Когда использовать рефлексии?
Уверен многих кто только начал учить 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
StringBuffer и StringBuilder
Вы знаете, что каждый раз, когда вы изменяете строку, на самом деле, создаётся новая строка? Это приводит к небольшим проблем с оптимизацией.
Если так получается, что строка часто меняется, то используйте StringBuilder. Если вам нужна многопоточная версия — StringBuffer.
Он помогает справиться с созданием временного мусора из-за модификаций объекта String.
#java #lesson #string
Вы знаете, что каждый раз, когда вы изменяете строку, на самом деле, создаётся новая строка? Это приводит к небольшим проблем с оптимизацией.
Если так получается, что строка часто меняется, то используйте StringBuilder. Если вам нужна многопоточная версия — StringBuffer.
Он помогает справиться с созданием временного мусора из-за модификаций объекта String.
#java #lesson #string
Лямбда-выражение
Вам нужна функция, которая больше нигде не пригодится и выполняет одно простое действие. Но ради этого надо будет создать отдельную функцию... Или нет.
Лямбда выражения позволяют определить функцию с одним действием в строку, а также вам не придётся думать над именем.
Создаётся она так:
#java #lesson #features
Вам нужна функция, которая больше нигде не пригодится и выполняет одно простое действие. Но ради этого надо будет создать отдельную функцию... Или нет.
Лямбда выражения позволяют определить функцию с одним действием в строку, а также вам не придётся думать над именем.
Создаётся она так:
(type1 arg1,type2 arg2) -> expression
, где arg1 и arg2 - аргументы функции, а expression
— действие, которое надо выполнить.#java #lesson #features
Очередь в Java
Описать работу очереди можно одной фразой: «Первый вошёл — последний вышел». Другими словами, элементы добавление первые в очередь будут получены первые остальных.
Для реализации очередей в Java есть интерфейс Queue<E> и метод pull(), который удаляет первый элемент в очереди и возвращает его.
#java #lesson #collections
Описать работу очереди можно одной фразой: «Первый вошёл — последний вышел». Другими словами, элементы добавление первые в очередь будут получены первые остальных.
Для реализации очередей в Java есть интерфейс Queue<E> и метод pull(), который удаляет первый элемент в очереди и возвращает его.
#java #lesson #collections
Выбрасываем исключения
Кто-то передал функции null? Давайте скажем об этом. Или заставил считать площадь квадрата с отрицательной стороной? Выдаём ошибку и перестаём работать!
Чтобы выдать исключение используется throw вместе с исключением, которое мы хотим выдать. Например, IllegalArgumentException.
Главное не забудьте написать после определения функции throws ExceptionType, иначе ничего не заработает.
#java #lesson #exception
Кто-то передал функции null? Давайте скажем об этом. Или заставил считать площадь квадрата с отрицательной стороной? Выдаём ошибку и перестаём работать!
Чтобы выдать исключение используется throw вместе с исключением, которое мы хотим выдать. Например, IllegalArgumentException.
Главное не забудьте написать после определения функции throws ExceptionType, иначе ничего не заработает.
#java #lesson #exception
Итераторы
Это объекты, по которым можно "пройтись". Итератором считается объект, который реализовал интерфейс
Такие итераторы можно получить, например, у ArrayList, поскольку он реализует Collection, а значит у него есть метод
#java #lesson #collections
Это объекты, по которым можно "пройтись". Итератором считается объект, который реализовал интерфейс
Iterator <E>
. Такие итераторы можно получить, например, у ArrayList, поскольку он реализует Collection, а значит у него есть метод
Iterator<E> iterator()
. #java #lesson #collections
Константа
Помимо переменных в Java данные можно хранить в константах. Язык не разрешает менять эти значения. Но зачем они тогда нужны, почему нельзя просто написать число?
Магические числа это плохая практика, поэтому мы даём им имена в виде констант. Не 0, а SUCCESSEXITCODE.
Или, например, число pi. которое мы можем заново использовать, а не вводить каждый раз 3.14...
#java #lesson #vars
Помимо переменных в Java данные можно хранить в константах. Язык не разрешает менять эти значения. Но зачем они тогда нужны, почему нельзя просто написать число?
Магические числа это плохая практика, поэтому мы даём им имена в виде констант. Не 0, а SUCCESSEXITCODE.
Или, например, число pi. которое мы можем заново использовать, а не вводить каждый раз 3.14...
#java #lesson #vars