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

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
加入频道
Работаем с временем

Для работы с датами и временем, у нас, в пакете java.util, есть класс Date.

При создании экземпляра с пустым конструктором вы получаете время и дату, которая сейчас. Если же вам надо считать всё из строки, воспользуйтесь классом SimpleDateFormat и его методом parse().

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

#lesson #theory
Аннотация FunctionalInterface

С версии Java 1.8 были добавлены лямбда-выражения. Они позволяют в короткой форме описать действия метода, который был описан в функциональном интерфейсе.

Такой интерфейс имеет лишь один метод, который и будет реализован как лямбда-выражение. Именно на наличие такого метода проверяет аннотация FunctionalInterface. Если в интерфейсе будет больше чем одного метода или вовсе их не будет, то при компиляции будет выведена ошибка.

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

#java #lesson #annotations
Многопоточность

В Java многопоточность реализована через класс Thread. Каждый поток, даже основной, обёрнутый в этот класс.

Благодаря потокам выполнения кода можно разделять и выполнять параллельно. Сам код переопределяется в методе Thread::run.

#java #lesson #thread
Интерфейс Runnable

В отдельном потоке могут жить не только методы, но и целый класс.

Для этого ему надо имплементировать интерфейс Runnable, в котором находится метод run(). В самом методе нужно написать скрипт, который запустится при запуске потока, как метод main.

После сей класс нужно предоставить потоку как аргумент в конструктор new Thread(runnable)

#java #lesson #thread
Обработка изображений

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

К примеру, класс java.awt.BufferedImage который позволяет обрабатывать изображения каким угодно способом, хоть попиксельно.

Чтобы загрузить изображение из файла используют ImageIO::read, для записи — ImageIO::write.

#java #lesson #awt
Логирование данных

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

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

Самым популярным логером на данный момент является Log4J, установить который можно с помощью Maven/Gradle.

#java #lesson #features
Когда использовать рефлексии?

Уверен многих кто только начал учить 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