Java Best Practices
Это то, что сделает вас хорошим программистом. Best Practices — набор правил, построенных на основе чужих ошибок, на основе чужой боли, чтобы их избежать.
Придерживаясь этих правил, вы сделаете свой код более читаемым и стабильным. Почитать про это вы можете в этом репозитории.
#java #usefull_link
Это то, что сделает вас хорошим программистом. Best Practices — набор правил, построенных на основе чужих ошибок, на основе чужой боли, чтобы их избежать.
Придерживаясь этих правил, вы сделаете свой код более читаемым и стабильным. Почитать про это вы можете в этом репозитории.
#java #usefull_link
commons-cli
Пользователь, запуская приложение, может передавать какие-либо данные через терминал. Все они сохраняются в аргументе args метода
Чтобы упросить парсинг этих самых аргументов, можно воспользоваться библиотекой commons-cli. Она, к тому же, не имеет зависимостей.
📕 Документация
#java #lesson #cli
Пользователь, запуская приложение, может передавать какие-либо данные через терминал. Все они сохраняются в аргументе args метода
main(String[] args)
.Чтобы упросить парсинг этих самых аргументов, можно воспользоваться библиотекой commons-cli. Она, к тому же, не имеет зависимостей.
📕 Документация
#java #lesson #cli
Roadmap по Java
Эта дорожная карта ответит на вопросы: «С чего мне начать?» и «Что учить дальше?» Пройдясь по этому пути вы сможете полностью освоить язык и назвать себя настоящим Java программистом.
#roadmap
Эта дорожная карта ответит на вопросы: «С чего мне начать?» и «Что учить дальше?» Пройдясь по этому пути вы сможете полностью освоить язык и назвать себя настоящим Java программистом.
#roadmap
Тип Optional
Если вы работает с коллекциями то, наверное, уже столкнулись с проблемой, когда метод
Вместо этого мы можем получить null, задать значение по умолчанию или выбросить другую ошибку.
#java #lesson #collections
Если вы работает с коллекциями то, наверное, уже столкнулись с проблемой, когда метод
stream().any()
может ничего не вернуть. Мы получаем ошибку, с которой неудобно работать.Вместо этого мы можем получить null, задать значение по умолчанию или выбросить другую ошибку.
#java #lesson #collections
Function<T, R> и Consumer<T>
Бывает такое, что нам нужно передать в метод какую-либо другую функцию. Чтобы не создавать кучу интерфейсов с одним методом, мы можем воспользоваться уже готовыми.
Мы вполне можем использовать эти интерфейсы с лямбдами. Подробнее про Function и Consumer.
#java #lesson #interface
Бывает такое, что нам нужно передать в метод какую-либо другую функцию. Чтобы не создавать кучу интерфейсов с одним методом, мы можем воспользоваться уже готовыми.
Function<T, R>
— принимает в себя значение с типом T, а возвращает с типом R.Consumer<T>
— принимает в себя значение с типом T, но ничего не возвращает.Мы вполне можем использовать эти интерфейсы с лямбдами. Подробнее про Function и Consumer.
#java #lesson #interface
Cloneable
При передаче объекта функции, мы, на самом деле, передаём ссылку на него. И все изменения с экземпляром, что происходят внутри функции, повлияют и на внешнюю переменную.
Чтобы избежать неожиданное изменение свойств, мы можем создать клон объекта и передать функции уже его. Для этого нужно, чтобы класс реализовывал интерфейс Cloneable.
📌 Документация
#java #lesson #objects
При передаче объекта функции, мы, на самом деле, передаём ссылку на него. И все изменения с экземпляром, что происходят внутри функции, повлияют и на внешнюю переменную.
Чтобы избежать неожиданное изменение свойств, мы можем создать клон объекта и передать функции уже его. Для этого нужно, чтобы класс реализовывал интерфейс Cloneable.
📌 Документация
#java #lesson #objects
Разделяй и властвуй
В разы приятнее, когда программа разделена на логические части: эта папка отвечает за кисти, эта за отрисовку изображения, эта за отправку запросов.
Код мы разделяем с помощью пакетов. Пакет (из документации) — это группа связанных типов, обеспечивающая защиту доступа и управление пространством имен.
Мы можем отделять части программы, ограничивать к ним доступ и/или переносить в другие приложения.
📌 Документация
#java #lesson #packages
В разы приятнее, когда программа разделена на логические части: эта папка отвечает за кисти, эта за отрисовку изображения, эта за отправку запросов.
Код мы разделяем с помощью пакетов. Пакет (из документации) — это группа связанных типов, обеспечивающая защиту доступа и управление пространством имен.
Мы можем отделять части программы, ограничивать к ним доступ и/или переносить в другие приложения.
📌 Документация
#java #lesson #packages
Анонимные классы
Очень классная система, которая позволяет создавать объекты «без имени». Мы создаём экземпляр, передаём его в метод и всё.
В примере мы могли бы создать три отдельных класса, наследуемых от MonitoringSystem, но ради чего? Они используются только один раз и просто захламляли бы систему.
Это более элегантное решение, но во всём надо знать меру.
#java #lesson #class
Очень классная система, которая позволяет создавать объекты «без имени». Мы создаём экземпляр, передаём его в метод и всё.
В примере мы могли бы создать три отдельных класса, наследуемых от MonitoringSystem, но ради чего? Они используются только один раз и просто захламляли бы систему.
Это более элегантное решение, но во всём надо знать меру.
#java #lesson #class
Очередь
Структура данных, работающая по принципу FIFO (первый вошёл, первый вышел). То есть чем раньше был добавлен элемент в коллекцию, тем раньше он из нее удаляется. Это однонаправленная очередь.
Есть и двунаправленные очереди, в которых мы можем добавить элемент не только в начала, но и в конец. С удалением то же самое.
Интерфейс Queue представляет однонаправленную очередь, а Deque — двунаправленную или стек. Примером двунаправленной очереди является класс ArrayDeque.
📕 Документация
#java #lesson #structures
Структура данных, работающая по принципу FIFO (первый вошёл, первый вышел). То есть чем раньше был добавлен элемент в коллекцию, тем раньше он из нее удаляется. Это однонаправленная очередь.
Есть и двунаправленные очереди, в которых мы можем добавить элемент не только в начала, но и в конец. С удалением то же самое.
Интерфейс Queue представляет однонаправленную очередь, а Deque — двунаправленную или стек. Примером двунаправленной очереди является класс ArrayDeque.
📕 Документация
#java #lesson #structures
Класс LinkedList
Это структура данных в виде связанного списка. Таким образом мы можем быстро добавлять элементы, но нам будет проблематично брать данные по индексу.
У него есть все методы, которые определены в интерфейсах List, Queue, Deque.
📌 Документация
#java #lesson #collections
Это структура данных в виде связанного списка. Таким образом мы можем быстро добавлять элементы, но нам будет проблематично брать данные по индексу.
У него есть все методы, которые определены в интерфейсах List, Queue, Deque.
addFirst() / offerFirst()
— добавляет элемент в начало списка. addLast() / offerLast()
— в конец.removeFirst() / pollFirst()
— удаляет первый элемент из начала списка. removeLast() / pollLast()
— с конца списка.getFirst() / peekFirst()
; getLast() / peekLast()
— возвращает первый/последний элемент списка.📌 Документация
#java #lesson #collections
Подчёркивания между цифрами
Мы люди, не машины, и нам довольно сложно прочитать число 1000000000, намного проще, если оно разделено: 1 000 000 000.
В Java мы не можем использовать пробелы, поэтому таким разделением выступает нижнее подчёркивание.
Оно никак не влияет на поведение, просто делает код более читаемым, простым (особенно, если есть большие числа).
#java #lesson #tricks
Мы люди, не машины, и нам довольно сложно прочитать число 1000000000, намного проще, если оно разделено: 1 000 000 000.
В Java мы не можем использовать пробелы, поэтому таким разделением выступает нижнее подчёркивание.
Оно никак не влияет на поведение, просто делает код более читаемым, простым (особенно, если есть большие числа).
#java #lesson #tricks
Кэширование значений
Integer это тоже объект, который занимает определённое место в памяти. С числами мы работаем довольно часто (тот же for), так что и создаются они довольно часто.
Чтобы каждый раз не инициировать, разработчики решили значения от -128 до 127 сохранять в отдельном месте, а потом просто передавать ссылки на них.
Поэтому мы видим такие результаты, как выше. На местах, где всегда true, постарался компилятор и оптимизировал программу.
#java #lesson #performance
Integer это тоже объект, который занимает определённое место в памяти. С числами мы работаем довольно часто (тот же for), так что и создаются они довольно часто.
Чтобы каждый раз не инициировать, разработчики решили значения от -128 до 127 сохранять в отдельном месте, а потом просто передавать ссылки на них.
Поэтому мы видим такие результаты, как выше. На местах, где всегда true, постарался компилятор и оптимизировал программу.
#java #lesson #performance
Побитовые операции
Побитовые операции происходят в бинарной системе счисления, когда число состоит из двух цифр: 1 и 0.
Побитовое И (&) — оставляет бит, только если два числа — единицы.
Побитовое ИЛИ (|) — будет 1, если хотя бы одно из чисел — 1.
Исключающее или (^) — действует так же, как и ИЛИ, но если оба числа — единицы, ставит 0.
Оператор НЕ (~) — «переворачивает» все биты в числе.
#java #lesson #operator
Побитовые операции происходят в бинарной системе счисления, когда число состоит из двух цифр: 1 и 0.
Побитовое И (&) — оставляет бит, только если два числа — единицы.
Побитовое ИЛИ (|) — будет 1, если хотя бы одно из чисел — 1.
Исключающее или (^) — действует так же, как и ИЛИ, но если оба числа — единицы, ставит 0.
Оператор НЕ (~) — «переворачивает» все биты в числе.
a << x
, a >> x
— смещение битов числа a вправо/влево на x значений.#java #lesson #operator
Шпаргалка по Java
Небольшая фотография, которая поможет освежить знания, вычитать что-то новое и быстрее освоить язык.
#cheatsheet
Небольшая фотография, которая поможет освежить знания, вычитать что-то новое и быстрее освоить язык.
#cheatsheet
Рекурсия
Зачастую это функция, которая вызывает сама себя, просто с другими параметрами. Примером использования рекурсии может быть фрактал.
На самом деле это очень удобно, поскольку позволяет разделить одну задачу на несколько маленький.
Но есть небольшая опасность, рекурсия ограничена стеком. Если вызовется очень много функций, приложение не выдержит и выдаст ошибку.
P.S. Если ввести в гугл «рекурсия», то Google скажет: «Возможно, вы имели в виду: рекурсия». Такой прикол от разработчиков
#java #lesson #basic
Зачастую это функция, которая вызывает сама себя, просто с другими параметрами. Примером использования рекурсии может быть фрактал.
На самом деле это очень удобно, поскольку позволяет разделить одну задачу на несколько маленький.
Но есть небольшая опасность, рекурсия ограничена стеком. Если вызовется очень много функций, приложение не выдержит и выдаст ошибку.
P.S. Если ввести в гугл «рекурсия», то Google скажет: «Возможно, вы имели в виду: рекурсия». Такой прикол от разработчиков
#java #lesson #basic
Одинарные и двойные кавычки
В Java есть такое понятие, как символ (Char). Это определённая буква, цифра, эмодзи и т.д. Несколько таких символов уже составляют строку (String).
Так вот, в одинарных кавычках мы записываем только один символ, а в двойных кавычках мы создаём строку.
С этим нужно быть очень осторожным, поскольку пытаясь получить
#java #lesson #theory
В Java есть такое понятие, как символ (Char). Это определённая буква, цифра, эмодзи и т.д. Несколько таких символов уже составляют строку (String).
Так вот, в одинарных кавычках мы записываем только один символ, а в двойных кавычках мы создаём строку.
С этим нужно быть очень осторожным, поскольку пытаясь получить
"MY"
, выполняя 'M' + 'Y'
, вы получите 166.#java #lesson #theory
Строка на несколько строк
Бывает так, что нам нужно вписать какое-то огромное выражение и сделать это так, чтобы оно выглядело по человечески. Это может быть длинный SQL запрос.
Тут есть два варианта: использовать «одномерные» строковые литералы или «многомерные» (которые начинаются и заканчиваются на """).
Доступно с Java 15.
📌 Документация
#java #lesson #theory
Бывает так, что нам нужно вписать какое-то огромное выражение и сделать это так, чтобы оно выглядело по человечески. Это может быть длинный SQL запрос.
Тут есть два варианта: использовать «одномерные» строковые литералы или «многомерные» (которые начинаются и заканчиваются на """).
Доступно с Java 15.
📌 Документация
#java #lesson #theory