Конструкция do...while
Эта конструкция встречается редко на практике, но знать её нужно. Описать её можно как дополнение к привычному всем while(condition).
Суть в чём: сначала в блоке do{...} пишется код, а после вызывается while(condition). В результате обязательно выполнится код в блоке do, а после начнётся цикл while.
#lesson #features
Эта конструкция встречается редко на практике, но знать её нужно. Описать её можно как дополнение к привычному всем while(condition).
Суть в чём: сначала в блоке do{...} пишется код, а после вызывается while(condition). В результате обязательно выполнится код в блоке do, а после начнётся цикл while.
#lesson #features
Regex-выражения в Java
Работа с Regex а Java максимально упрощенна и сводится к двум основным классам – Pattern и Matcher.
Класс Pattern хранит в себе само выражение и может создать Matcher для него. Также для упрощённой работы в нём есть статические методы для проверки без создания Matcher-а.
#lesson #regex
Работа с Regex а Java максимально упрощенна и сводится к двум основным классам – Pattern и Matcher.
Класс Pattern хранит в себе само выражение и может создать Matcher для него. Также для упрощённой работы в нём есть статические методы для проверки без создания Matcher-а.
#lesson #regex
Работа с Matcher
Объект Matcher создаётся с помощью класса Pattern и позволяет находить части строки, которые подходят под введённое выражение.
К примеру, методы match() и find() возвращают true если такая строка была найдена. Разница в них лишь в том, что find() записывает положение найденного участка строки.
После того как этот участок найден и записан, с помощью метода group() можно получить строку с группой. В regex-выражениях группы обозначаются круглыми скобками.
#lesson #regex
Объект Matcher создаётся с помощью класса Pattern и позволяет находить части строки, которые подходят под введённое выражение.
К примеру, методы match() и find() возвращают true если такая строка была найдена. Разница в них лишь в том, что find() записывает положение найденного участка строки.
После того как этот участок найден и записан, с помощью метода group() можно получить строку с группой. В regex-выражениях группы обозначаются круглыми скобками.
#lesson #regex
Пакетный менеджер Maven
Чтобы быстро и удобно добавлять чужие библиотеки и фреймворки в свой проект программисты придумали пакетные менеджеры. Благодаря им можно в несколько строчек импортировать различные ресурсы в проект.
Maven основан на файле pom.xml, в котором хранятся все настройки проекта. К примеру в блоке <dependencies>...</> указанны подключённые к проекту модули.
В наше время пакетные менеджеры предоставляют намного более широкий функционал, например установка плагинов, компиляция проекта и загрузка его на сторонние сервисы.
#java #lesson #resourses
Чтобы быстро и удобно добавлять чужие библиотеки и фреймворки в свой проект программисты придумали пакетные менеджеры. Благодаря им можно в несколько строчек импортировать различные ресурсы в проект.
Maven основан на файле pom.xml, в котором хранятся все настройки проекта. К примеру в блоке <dependencies>...</> указанны подключённые к проекту модули.
В наше время пакетные менеджеры предоставляют намного более широкий функционал, например установка плагинов, компиляция проекта и загрузка его на сторонние сервисы.
#java #lesson #resourses
Сортировка Stream
Для сортировки в классе Stream существует метод sorted, у которого есть две реализации.
Основной это метод Stream<T>::sorted(). Он сортирует элементы которые имплементирует интерфейс Comparable<T>. Логика проста: если результат метода compare(T o) отрицательный, то объект о будет ниже в списке, если же положительный — выше.
Также можно сортировать объекты своим объектом Comparator с помощью метода sorted(Comparator<? extend T>).
#java #lesson #stream
Для сортировки в классе Stream существует метод sorted, у которого есть две реализации.
Основной это метод Stream<T>::sorted(). Он сортирует элементы которые имплементирует интерфейс Comparable<T>. Логика проста: если результат метода compare(T o) отрицательный, то объект о будет ниже в списке, если же положительный — выше.
Также можно сортировать объекты своим объектом Comparator с помощью метода sorted(Comparator<? extend T>).
#java #lesson #stream
Софт-девелопинг на 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