Java Portal | Программирование
11.3K subscribers
800 photos
59 videos
19 files
593 links
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
加入频道
Когда использовать рефлексии?

Уверен многих кто только начал учить ReflectionAPI удивили возможности этого инструмента. Но работа с ним довольно тяжёлая для системы, поэтому лучше использовать её в крайних случаях.

К примеру — обработка класса с аннотациями (пример выше). Извлекая аннотации из объектов класса, можно обрабатывать её каким угодно образом.

Также рефлексии часто применяют в тестировке, а именно для приватных полей и методов. Достаточно получить метод из класса, задать method.isAccessible(true) и можно вызывать его как публичный.

#java #lesson #reflection
Зачем нужны юнит-тесты

Тестирование — ключевой инструмент любого проекта, который помогает вовремя найти баги и не получить тумаков за положенный прод.

Самым популярным типо тестирования сейчас является юнит-тестирование. Грубо говоря это тестирования каждого отдельного класса и метода на разных этапах работы программы.

#java #lesson #theory
Проверка неточности числа

Чаще всего мы проверяем это с помощью остатка от деления (%), но подобный способ не сработает с отрицательными числами.

Поэтому программисты нашли более быструю и точную альтернативу — использование логического оператора &.

Последний бит определяет, будет число чётным или нет, это мы и проверяем.

#lesson #theory
Два понятия инкапсуляции

Правильное понятие:
Инкапсуляция — механизм языка, позволяющий объединить данные и методы в единый объект.

Неправильное понятие:
Инкапсуляция — это сокрытие данных одних компонентов к другим.

ℹ️ Отличие:
Инкапсуляция позволяет разбивать данные на объекты и, зачастую, скрывать детали реализации от пользователя. Не во всех языках сокрытие существует, но в Java без него никак.

#java #lesson #oop
Паттерн "Стратегия"

Представьте что у вас есть класс фермы Farm, который обрабатывает классы Cow, Pig и Chicken. Чтобы хранить их в классе нам нужен массив для них, но в статической Java невозможно сделать массив для разных типо.

Для решения этой ситуации создают интерфейс Animal, который будет имплементироваться всеми классами животных.

Далее в классе Farm делаем массив типо Animal[], который может хранить в себе любое животное. Это и есть паттерн стратегия.

#java #lesson #patterns
Юнит и интеграционные тесты

Юнит-тестирование
предусматривает тестирование конкретных объектов и их методов по отдельности. Такой тип тестов легко писать и с ними легче найти конкретное место появления ошибки.

Интеграционное тестирование тестирует как разные объекты взаимодействуют друг с другом. Глобально такие тесты считаются полезнее и надёжнее, так как тестируют саму суть работы программы.

#java #lesson #theory
String.join

Метод String.join склеивает все входящие в него строки, вставляя между ними разделитель.

Синтаксис: String.join(String delimiter, String... strings)

#lesson #method
BigInteger и BigDecimal

Примитивные числовые типы не всегда могут подходить по размерам для некоторых задач.

Для решения этой проблемы существуют объекты BigInteger и BigDecimal. Каждый из них может хранить числа абсолютно любого размера и производить математические операции.

#java #lesson #features
Нейронные сети с KepoJ

На сегодняшний день всё больше набирает популярность машинное обучение и нейронные сети, особенно на таких языках как Java и Python.

Как раз в этой области специализируется KepoJ. С помощью этой библиотеки можно создавать и обрабатывать нейронные сети в пару кликов.

Для использования нужно лишь вписать dependency в pom.xml вашего проекта. KepoJ также имеет краткий гайд и полную документацию.

Библиотека

#java #lesson #library
Обмен данными между потоками

Класс Exchanger предназначен для обмена данными между потоками. Он является типизированным и типизируется типом данных, которыми потоки должны обмениваться.

По своей сути это буфер, в который можно положить что-то, и вернуть то, что в нём было до этого. Реализуться это методом exchange():

T exchange(T x) throws InterruptedException

#java #lesson #threads
Работа с датами LocalDateTime

Класс LocalDateTime из пакета java.time позволяет создавать даты и изменять их, добавляя и отнимая необходимое количество часов, дней, месяцев, лет и даже эпох.

Чтобы получить текущую дату на вашем устройстве достаточно вызвать метод LocalDateTime::now.

Зеркалом этого класса в JDBC является класс TimeStamp, в который можно перевести методом of().

#java #lesson #features
Оператор instanceof

Прежде чем приводить объект к определённому типу стоит проверить, а является ли он этим типом. А то превратите курицу в кошку.

Он может быть использован для перевода абстрактного Object в какой-то определённый объект (Cat) и последующей работы с ним.

#java #lesson #operators
HashMap vs HashTable

Выполняют одну и ту же функцию, но разные по назначению. Используйте Hashtable, если у вас многопоточное приложение, класс потокобезопасен.

Если это не так, смело применяйте HashMap. Он быстрее в одном потоке, принимает null и лучше.

#java #lesson #features
Float vs Double

Оба эти типа данных представляют числа с плавающей запятой. А то, что double является более точным, является общеизвестным фактом.

Настоятельно рекомендуется использовать double вместо float. Но помните, что у всего есть цена, double требует в два раза больше памяти.

#java #lesson
StringBuffer и StringBuilder

Вы знаете, что каждый раз, когда вы изменяете строку, на самом деле, создаётся новая строка? Это приводит к небольшим проблем с оптимизацией.

Если так получается, что строка часто меняется, то используйте StringBuilder. Если вам нужна многопоточная версия — StringBuffer.

Он помогает справиться с созданием временного мусора из-за модификаций объекта String.

#java #lesson #string
Лямбда-выражение

Вам нужна функция, которая больше нигде не пригодится и выполняет одно простое действие. Но ради этого надо будет создать отдельную функцию... Или нет.

Лямбда выражения позволяют определить функцию с одним действием в строку, а также вам не придётся думать над именем.

Создаётся она так: (type1 arg1,type2 arg2) -> expression, где arg1 и arg2 - аргументы функции, а expression — действие, которое надо выполнить.

#java #lesson #features
Очередь в Java

Описать работу очереди можно одной фразой: «Первый вошёл — последний вышел». Другими словами, элементы добавление первые в очередь будут получены первые остальных.

Для реализации очередей в Java есть интерфейс Queue<E> и метод pull(), который удаляет первый элемент в очереди и возвращает его.

#java #lesson #collections
Выбрасываем исключения

Кто-то передал функции null? Давайте скажем об этом. Или заставил считать площадь квадрата с отрицательной стороной? Выдаём ошибку и перестаём работать!

Чтобы выдать исключение используется throw вместе с исключением, которое мы хотим выдать. Например, IllegalArgumentException.

Главное не забудьте написать после определения функции throws ExceptionType, иначе ничего не заработает.

#java #lesson #exception
Итераторы

Это объекты, по которым можно "пройтись". Итератором считается объект, который реализовал интерфейс Iterator <E>.

Такие итераторы можно получить, например, у ArrayList, поскольку он реализует Collection, а значит у него есть метод Iterator<E> iterator().

#java #lesson #collections
Константа

Помимо переменных в Java данные можно хранить в константах. Язык не разрешает менять эти значения. Но зачем они тогда нужны, почему нельзя просто написать число?

Магические числа это плохая практика, поэтому мы даём им имена в виде констант. Не 0, а SUCCESSEXITCODE.

Или, например, число pi. которое мы можем заново использовать, а не вводить каждый раз 3.14...

#java #lesson #vars