Софт-девелопинг на Java
Язык Java часто используется для создания софта. Уверен многие из вас используют продукты JetBrains — они тоже написаны на Java.
Для создания приложений (не только на пк, но и на телефоны) используют один из трёх официальных движков: AWT, Swing и JavaFX.
Последний является самым популярным и удобным на данный момент, если будете пробовать данное направление — начинайте с него
#java #lesson #soft
Язык Java часто используется для создания софта. Уверен многие из вас используют продукты JetBrains — они тоже написаны на Java.
Для создания приложений (не только на пк, но и на телефоны) используют один из трёх официальных движков: AWT, Swing и JavaFX.
Последний является самым популярным и удобным на данный момент, если будете пробовать данное направление — начинайте с него
#java #lesson #soft
Перечисления в Java
Это набор именнованых констант. Таким образом мы можем заменить непонятные цифры (1, 2, 4) или буквы ("E", "W", "N", "S") и сделать код более стабильным.
Определяются они с помощью ключевого слова enum, после которого идёт имя, и, в фигурных, скобках перечиляются значения.
Перечесления в Java могут также хранить собственные переменные и методы. Для этого надо создать enum конструктор и добавить его вызов к значениям.
#java #lesson
Это набор именнованых констант. Таким образом мы можем заменить непонятные цифры (1, 2, 4) или буквы ("E", "W", "N", "S") и сделать код более стабильным.
Определяются они с помощью ключевого слова enum, после которого идёт имя, и, в фигурных, скобках перечиляются значения.
Перечесления в Java могут также хранить собственные переменные и методы. Для этого надо создать enum конструктор и добавить его вызов к значениям.
#java #lesson
Работаем с временем
Для работы с датами и временем, у нас, в пакете
При создании экземпляра с пустым конструктором вы получаете время и дату, которая сейчас. Если же вам надо считать всё из строки, воспользуйтесь классом
После вы можете редактировать объект, добавлять значения, отбавлять или переводить всё в строку.
#lesson #theory
Для работы с датами и временем, у нас, в пакете
java.util
, есть класс Date. При создании экземпляра с пустым конструктором вы получаете время и дату, которая сейчас. Если же вам надо считать всё из строки, воспользуйтесь классом
SimpleDateFormat
и его методом parse()
. После вы можете редактировать объект, добавлять значения, отбавлять или переводить всё в строку.
#lesson #theory
Аннотация FunctionalInterface
С версии Java 1.8 были добавлены лямбда-выражения. Они позволяют в короткой форме описать действия метода, который был описан в функциональном интерфейсе.
Такой интерфейс имеет лишь один метод, который и будет реализован как лямбда-выражение. Именно на наличие такого метода проверяет аннотация FunctionalInterface. Если в интерфейсе будет больше чем одного метода или вовсе их не будет, то при компиляции будет выведена ошибка.
Для создания функциональных интерфейсов не обязательно использования этой аннотации, но с ней редактор кода будет лучше понимать как обрабатывать данный интерфейс.
#java #lesson #annotations
С версии Java 1.8 были добавлены лямбда-выражения. Они позволяют в короткой форме описать действия метода, который был описан в функциональном интерфейсе.
Такой интерфейс имеет лишь один метод, который и будет реализован как лямбда-выражение. Именно на наличие такого метода проверяет аннотация FunctionalInterface. Если в интерфейсе будет больше чем одного метода или вовсе их не будет, то при компиляции будет выведена ошибка.
Для создания функциональных интерфейсов не обязательно использования этой аннотации, но с ней редактор кода будет лучше понимать как обрабатывать данный интерфейс.
#java #lesson #annotations
Интерфейс Runnable
В отдельном потоке могут жить не только методы, но и целый класс.
Для этого ему надо имплементировать интерфейс Runnable, в котором находится метод run(). В самом методе нужно написать скрипт, который запустится при запуске потока, как метод main.
После сей класс нужно предоставить потоку как аргумент в конструктор new Thread(runnable)
#java #lesson #thread
В отдельном потоке могут жить не только методы, но и целый класс.
Для этого ему надо имплементировать интерфейс Runnable, в котором находится метод run(). В самом методе нужно написать скрипт, который запустится при запуске потока, как метод main.
После сей класс нужно предоставить потоку как аргумент в конструктор new Thread(runnable)
#java #lesson #thread
Обработка изображений
Думаем, каждый согласится, что подавать информацию в виде изображения лучше всего для восприятия. Однако сначала нужно сгенерировать такое изображение, и на этот случай в Java есть множество инструментов.
К примеру, класс java.awt.BufferedImage который позволяет обрабатывать изображения каким угодно способом, хоть попиксельно.
Чтобы загрузить изображение из файла используют ImageIO::read, для записи — ImageIO::write.
#java #lesson #awt
Думаем, каждый согласится, что подавать информацию в виде изображения лучше всего для восприятия. Однако сначала нужно сгенерировать такое изображение, и на этот случай в Java есть множество инструментов.
К примеру, класс java.awt.BufferedImage который позволяет обрабатывать изображения каким угодно способом, хоть попиксельно.
Чтобы загрузить изображение из файла используют ImageIO::read, для записи — ImageIO::write.
#java #lesson #awt
Логирование данных
Уже давно прошло то время, когда для наблюдением за работой программы надо сидеть на стуле и всматриваться в консоль, сейчас эту работу делают логеры.
Суть логеров в записи данных из программы, дополняя её такими данными как время, место, уровень и так далее.
Самым популярным логером на данный момент является Log4J, установить который можно с помощью Maven/Gradle.
#java #lesson #features
Уже давно прошло то время, когда для наблюдением за работой программы надо сидеть на стуле и всматриваться в консоль, сейчас эту работу делают логеры.
Суть логеров в записи данных из программы, дополняя её такими данными как время, место, уровень и так далее.
Самым популярным логером на данный момент является Log4J, установить который можно с помощью Maven/Gradle.
#java #lesson #features
Когда использовать рефлексии?
Уверен многих кто только начал учить ReflectionAPI удивили возможности этого инструмента. Но работа с ним довольно тяжёлая для системы, поэтому лучше использовать её в крайних случаях.
К примеру — обработка класса с аннотациями (пример выше). Извлекая аннотации из объектов класса, можно обрабатывать её каким угодно образом.
Также рефлексии часто применяют в тестировке, а именно для приватных полей и методов. Достаточно получить метод из класса, задать method.isAccessible(true) и можно вызывать его как публичный.
#java #lesson #reflection
Уверен многих кто только начал учить ReflectionAPI удивили возможности этого инструмента. Но работа с ним довольно тяжёлая для системы, поэтому лучше использовать её в крайних случаях.
К примеру — обработка класса с аннотациями (пример выше). Извлекая аннотации из объектов класса, можно обрабатывать её каким угодно образом.
Также рефлексии часто применяют в тестировке, а именно для приватных полей и методов. Достаточно получить метод из класса, задать method.isAccessible(true) и можно вызывать его как публичный.
#java #lesson #reflection
Зачем нужны юнит-тесты
Тестирование — ключевой инструмент любого проекта, который помогает вовремя найти баги и не получить тумаков за положенный прод.
Самым популярным типо тестирования сейчас является юнит-тестирование. Грубо говоря это тестирования каждого отдельного класса и метода на разных этапах работы программы.
#java #lesson #theory
Тестирование — ключевой инструмент любого проекта, который помогает вовремя найти баги и не получить тумаков за положенный прод.
Самым популярным типо тестирования сейчас является юнит-тестирование. Грубо говоря это тестирования каждого отдельного класса и метода на разных этапах работы программы.
#java #lesson #theory
Проверка неточности числа
Чаще всего мы проверяем это с помощью остатка от деления (%), но подобный способ не сработает с отрицательными числами.
Поэтому программисты нашли более быструю и точную альтернативу — использование логического оператора &.
Последний бит определяет, будет число чётным или нет, это мы и проверяем.
#lesson #theory
Чаще всего мы проверяем это с помощью остатка от деления (%), но подобный способ не сработает с отрицательными числами.
Поэтому программисты нашли более быструю и точную альтернативу — использование логического оператора &.
Последний бит определяет, будет число чётным или нет, это мы и проверяем.
#lesson #theory
Два понятия инкапсуляции
✅ Правильное понятие:
Инкапсуляция — механизм языка, позволяющий объединить данные и методы в единый объект.
❌ Неправильное понятие:
Инкапсуляция — это сокрытие данных одних компонентов к другим.
ℹ️ Отличие:
Инкапсуляция позволяет разбивать данные на объекты и, зачастую, скрывать детали реализации от пользователя. Не во всех языках сокрытие существует, но в Java без него никак.
#java #lesson #oop
✅ Правильное понятие:
Инкапсуляция — механизм языка, позволяющий объединить данные и методы в единый объект.
❌ Неправильное понятие:
Инкапсуляция — это сокрытие данных одних компонентов к другим.
ℹ️ Отличие:
Инкапсуляция позволяет разбивать данные на объекты и, зачастую, скрывать детали реализации от пользователя. Не во всех языках сокрытие существует, но в Java без него никак.
#java #lesson #oop
Паттерн "Стратегия"
Представьте что у вас есть класс фермы Farm, который обрабатывает классы Cow, Pig и Chicken. Чтобы хранить их в классе нам нужен массив для них, но в статической Java невозможно сделать массив для разных типо.
Для решения этой ситуации создают интерфейс Animal, который будет имплементироваться всеми классами животных.
Далее в классе Farm делаем массив типо Animal[], который может хранить в себе любое животное. Это и есть паттерн стратегия.
#java #lesson #patterns
Представьте что у вас есть класс фермы Farm, который обрабатывает классы Cow, Pig и Chicken. Чтобы хранить их в классе нам нужен массив для них, но в статической Java невозможно сделать массив для разных типо.
Для решения этой ситуации создают интерфейс Animal, который будет имплементироваться всеми классами животных.
Далее в классе Farm делаем массив типо Animal[], который может хранить в себе любое животное. Это и есть паттерн стратегия.
#java #lesson #patterns
Юнит и интеграционные тесты
Юнит-тестирование предусматривает тестирование конкретных объектов и их методов по отдельности. Такой тип тестов легко писать и с ними легче найти конкретное место появления ошибки.
Интеграционное тестирование тестирует как разные объекты взаимодействуют друг с другом. Глобально такие тесты считаются полезнее и надёжнее, так как тестируют саму суть работы программы.
#java #lesson #theory
Юнит-тестирование предусматривает тестирование конкретных объектов и их методов по отдельности. Такой тип тестов легко писать и с ними легче найти конкретное место появления ошибки.
Интеграционное тестирование тестирует как разные объекты взаимодействуют друг с другом. Глобально такие тесты считаются полезнее и надёжнее, так как тестируют саму суть работы программы.
#java #lesson #theory
Нейронные сети с KepoJ
На сегодняшний день всё больше набирает популярность машинное обучение и нейронные сети, особенно на таких языках как Java и Python.
Как раз в этой области специализируется KepoJ. С помощью этой библиотеки можно создавать и обрабатывать нейронные сети в пару кликов.
Для использования нужно лишь вписать dependency в
Библиотека
#java #lesson #library
На сегодняшний день всё больше набирает популярность машинное обучение и нейронные сети, особенно на таких языках как Java и Python.
Как раз в этой области специализируется KepoJ. С помощью этой библиотеки можно создавать и обрабатывать нейронные сети в пару кликов.
Для использования нужно лишь вписать dependency в
pom.xml
вашего проекта. KepoJ также имеет краткий гайд и полную документацию.Библиотека
#java #lesson #library
Обмен данными между потоками
Класс Exchanger предназначен для обмена данными между потоками. Он является типизированным и типизируется типом данных, которыми потоки должны обмениваться.
По своей сути это буфер, в который можно положить что-то, и вернуть то, что в нём было до этого. Реализуться это методом exchange():
Класс Exchanger предназначен для обмена данными между потоками. Он является типизированным и типизируется типом данных, которыми потоки должны обмениваться.
По своей сути это буфер, в который можно положить что-то, и вернуть то, что в нём было до этого. Реализуться это методом exchange():
T exchange(T x) throws InterruptedException
#java #lesson #threadsРабота с датами LocalDateTime
Класс LocalDateTime из пакета java.time позволяет создавать даты и изменять их, добавляя и отнимая необходимое количество часов, дней, месяцев, лет и даже эпох.
Чтобы получить текущую дату на вашем устройстве достаточно вызвать метод LocalDateTime::now.
Зеркалом этого класса в JDBC является класс TimeStamp, в который можно перевести методом of().
#java #lesson #features
Класс LocalDateTime из пакета java.time позволяет создавать даты и изменять их, добавляя и отнимая необходимое количество часов, дней, месяцев, лет и даже эпох.
Чтобы получить текущую дату на вашем устройстве достаточно вызвать метод LocalDateTime::now.
Зеркалом этого класса в JDBC является класс TimeStamp, в который можно перевести методом of().
#java #lesson #features
Оператор instanceof
Прежде чем приводить объект к определённому типу стоит проверить, а является ли он этим типом. А то превратите курицу в кошку.
Он может быть использован для перевода абстрактного Object в какой-то определённый объект (Cat) и последующей работы с ним.
#java #lesson #operators
Прежде чем приводить объект к определённому типу стоит проверить, а является ли он этим типом. А то превратите курицу в кошку.
Он может быть использован для перевода абстрактного Object в какой-то определённый объект (Cat) и последующей работы с ним.
#java #lesson #operators