NullPointerException
Эта ошибка появляется, если значение не задано какой-то переменной, а мы пытаемся получить доступ к их параметрам.
К сожалению, null могут принимать все ссылочные типы. Это массивы, классы и даже строки. Но вот числа никогда не будут null (поскольку это не ссылочные типы).
Что с этим делать? Достаточно просто добавить проверку на null и что-то делать с этим (выбрасывать ошибку или задавать значение по умолчанию).
#lesson #theory #errors
Эта ошибка появляется, если значение не задано какой-то переменной, а мы пытаемся получить доступ к их параметрам.
К сожалению, null могут принимать все ссылочные типы. Это массивы, классы и даже строки. Но вот числа никогда не будут null (поскольку это не ссылочные типы).
Что с этим делать? Достаточно просто добавить проверку на null и что-то делать с этим (выбрасывать ошибку или задавать значение по умолчанию).
#lesson #theory #errors
Интерфейс Comparable
Помимо обычных коллекций, в Java существуют Sorted... коллекции. Их значения автоматически сортируются в натуральном порядке.
Для реализации такой сортировки тип значения должен имплементировать интерфейс Comparable. Он сравнивает два объекта и возвращает "разницу" между ними в виде числа.
В дальнейшем это разница будет использованная для сортировки значений в коллекции.
#lesson #collections
Помимо обычных коллекций, в Java существуют Sorted... коллекции. Их значения автоматически сортируются в натуральном порядке.
Для реализации такой сортировки тип значения должен имплементировать интерфейс Comparable. Он сравнивает два объекта и возвращает "разницу" между ними в виде числа.
В дальнейшем это разница будет использованная для сортировки значений в коллекции.
#lesson #collections
Почему так много кода
Если ваш первый язык не Java, вы скорее всего задавались вопросом: "Почему просто чтобы начать программу или вывести текст в консоль нужно писать так много кода?"
Ответ кроется в структуре языка. В Java всё поделено на классы и объекты, в свою очередь у которых есть атрибуты и методы.
Разберём случай с выводом
#lesson #theory
Если ваш первый язык не Java, вы скорее всего задавались вопросом: "Почему просто чтобы начать программу или вывести текст в консоль нужно писать так много кода?"
Ответ кроется в структуре языка. В Java всё поделено на классы и объекты, в свою очередь у которых есть атрибуты и методы.
Разберём случай с выводом
System.out.println()
. Казалось бы, можно же просто ограничится функцией println. Но если мы захотим вывести текст в другой поток, например в System.err? В реализации Java будет достаточно сменить атрибут out -> err#lesson #theory
Записи Record
Часто некоторые классы созданы лишь для хранения и передачи данными между другими классами. Зачастую это просто набор публичных полей с модификатором final и конструктор, в котором задают им значения.
Для более упрощённого создания таких классов в JDK 15 появилось новое ключевое слово record. По своей сути, это синтаксический сахар для метода описанного выше.
#lesson #features
Часто некоторые классы созданы лишь для хранения и передачи данными между другими классами. Зачастую это просто набор публичных полей с модификатором final и конструктор, в котором задают им значения.
Для более упрощённого создания таких классов в JDK 15 появилось новое ключевое слово record. По своей сути, это синтаксический сахар для метода описанного выше.
#lesson #features
Ветвление switch
В Java существует два основных типа ветвлений скрипта: if...else и switch. Первый тип проверят некое условие и если оно верно — выполняет код.
В свою очередь switch получает на вход проверяемое значение и сравнивает его с перезаписанными данными. Если какой-то случай case совпадает, то JVM выполняет соответствующий код.
Отличительной особенностью switch есть то, что все его условия статические и компилируются сразу в байткод.
#lesson #keyword
В Java существует два основных типа ветвлений скрипта: if...else и switch. Первый тип проверят некое условие и если оно верно — выполняет код.
В свою очередь switch получает на вход проверяемое значение и сравнивает его с перезаписанными данными. Если какой-то случай case совпадает, то JVM выполняет соответствующий код.
Отличительной особенностью switch есть то, что все его условия статические и компилируются сразу в байткод.
#lesson #keyword
Вектор в Java
До появления системы Collections в Java часто использовался класс Vector<E> — старый аналог нынешнего ArrayList.
Основным отличием вектора от списка в распределении динамической памяти. При добавлении нового элемента в вектор он пересоздаёт массив с данными, прибавляя 1 к длиннее. В свою очередь, список умножает длину на 2.
Из этого можно сделать вывод: векторы меньше расходуют память, но требуют большего времени для добавления элемента
#lesson #collection
До появления системы Collections в Java часто использовался класс Vector<E> — старый аналог нынешнего ArrayList.
Основным отличием вектора от списка в распределении динамической памяти. При добавлении нового элемента в вектор он пересоздаёт массив с данными, прибавляя 1 к длиннее. В свою очередь, список умножает длину на 2.
Из этого можно сделать вывод: векторы меньше расходуют память, но требуют большего времени для добавления элемента
#lesson #collection
Конструкция 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
По своей сути, строки — это массив символов char, обёрнутый в класс String. Такая обёртка позволяет обрабатывать строку всеми возможными методами: split, join, trim и другими.
Особенность строк Java в том, что они — ссылочные и неизменяемые. Это позволяет оптимизировать занимаемую память строкой.
#lesson
По своей сути, строки — это массив символов char, обёрнутый в класс String. Такая обёртка позволяет обрабатывать строку всеми возможными методами: split, join, trim и другими.
Особенность строк Java в том, что они — ссылочные и неизменяемые. Это позволяет оптимизировать занимаемую память строкой.
#lesson
implements и extends
Одной из основных догм в ООП является наследование. В Java можно наследовать как и классы, так и интерфейсы, но делается это по-разному.
Ключевое слово extends привязывает к классу родительский класс и только один. В своё время ключевое слово implements привязывает к классу один или несколько интерфейсов, которые класс должен реализовать.
#java #lesson #oop
Одной из основных догм в ООП является наследование. В Java можно наследовать как и классы, так и интерфейсы, но делается это по-разному.
Ключевое слово extends привязывает к классу родительский класс и только один. В своё время ключевое слово implements привязывает к классу один или несколько интерфейсов, которые класс должен реализовать.
#java #lesson #oop
NullPointer Exception
Исключения нулевого указателя возникает в Java довольно часто при попытке вызова метода несуществующего объекта.
Возьмем для примера следующую строчку кода:
Если объект school окажется равен
Хорошей практикой разработки на Java является предварительная проверка на
#lesson #bug
Исключения нулевого указателя возникает в Java довольно часто при попытке вызова метода несуществующего объекта.
Возьмем для примера следующую строчку кода:
int noOfStudents = school.listStudents().count;
Если объект school окажется равен
Null
или его метод listStudents
вернет Null
, вы получите исключение NullPointerException
.Хорошей практикой разработки на Java является предварительная проверка на
Null
в методах (смотри на картинке).#lesson #bug
System.currentTimeMillis vs System.nanoTime
В Java есть два стандартных способа проведения тайм-операций и не всегда понятно, какой из них следует выбрать.
Метод
Метод
Таким образом,
#lesson #time
В Java есть два стандартных способа проведения тайм-операций и не всегда понятно, какой из них следует выбрать.
Метод
System.currentTimeMillis
возвращает текущее количество миллисекунд от начала эпохи Unix в формате Long
. Его точность составляет от 1 до 15 тысячных долей секунды в зависимости от системы.long startTime = System.currentTimeMillis();
long estimatedTime = System.currentTimeMillis() - startTime;
Метод
System.nanoTime
имеет точность до одной миллионной доли секунды (наносекунды) и возвращает текущее значение наиболее точного доступного системного таймера.long startTime = System.nanoTime();
long estimatedTime = System.nanoTime() - startTime;
Таким образом,
System.currentTimeMillis
отлично подходит для отображения абсолютного времени и синхронизации с ним, а System.nanoTime
– для измерения относительных интервалов.#lesson #time
Оптимизация строк
При конкатенации строк на Java с помощью оператора +, например, в цикле for, каждый раз создается новый объект String, что приводит к потере памяти и увеличению времени работы программы.
Также следует избегать создания Java строки с помощью конструктора класса: (смотри на фото)
#lesson #string
При конкатенации строк на Java с помощью оператора +, например, в цикле for, каждый раз создается новый объект String, что приводит к потере памяти и увеличению времени работы программы.
Также следует избегать создания Java строки с помощью конструктора класса: (смотри на фото)
#lesson #string