Регулярные выражения
java.util.regex позволяет с помощью специальных выражений находить нужные значения внутри текста.
Нам понадобятся только классы Matcher (для сохранения результатов сравнения) и Pattern (для создания выражения).
Если у вас есть какие-то ошибки в синтаксисе, то метод
#java #lesson #regex
java.util.regex позволяет с помощью специальных выражений находить нужные значения внутри текста.
Нам понадобятся только классы Matcher (для сохранения результатов сравнения) и Pattern (для создания выражения).
Если у вас есть какие-то ошибки в синтаксисе, то метод
compile()
выдаст PatternSyntaxException.#java #lesson #regex
public vs protected vs private
Это параметры доступа, они определяют, в каких условиях можно получить доступ к определённым функциям/переменным.
public — любой класс может получить доступ к этому методу, считать его и изменить.
protected — доступ к переменной могут получить только дети этого класса.
private — изменять и считывать значения можно только внутри класса, где она создана.
По умолчанию ко всем объектам применяется модификатор private.
#java #lesson #basics
Это параметры доступа, они определяют, в каких условиях можно получить доступ к определённым функциям/переменным.
public — любой класс может получить доступ к этому методу, считать его и изменить.
protected — доступ к переменной могут получить только дети этого класса.
private — изменять и считывать значения можно только внутри класса, где она создана.
По умолчанию ко всем объектам применяется модификатор private.
#java #lesson #basics
Паттерн Singleton
Класс существует только в едином экземпляре и к нему есть глобальный доступ (то есть, отовсюду).
Обратите внимание, что Singleton стоит использовать, если вам нужен только один экземпляр, а не когда вам нужен глобальный доступ к экземпляру.
Многие новички допускают ошибку, которую я описал выше, что превращает их код в кучу Singleton'ов. Решение: Dependency Injection.
#java #lesson #patterns
Класс существует только в едином экземпляре и к нему есть глобальный доступ (то есть, отовсюду).
Обратите внимание, что Singleton стоит использовать, если вам нужен только один экземпляр, а не когда вам нужен глобальный доступ к экземпляру.
Многие новички допускают ошибку, которую я описал выше, что превращает их код в кучу Singleton'ов. Решение: Dependency Injection.
#java #lesson #patterns
Dependency Injection
Особо актуально, если у вас больше 30 разных классов и вам нужно как-то одни передавать в другие. Перейдём к теории:
Концепция Dependency Injection состоит в том, чтобы перенести ответственность за создание экземпляра объекта из тела метода за пределы класса и передать уже созданный экземпляр объекта обратно.
То есть приложение само отвечает за «внедрение» экземпляров внутрь классов. Это делает код чище и упрощает работу.
📕 Google Guice tutorial
#java #lesson #di
Особо актуально, если у вас больше 30 разных классов и вам нужно как-то одни передавать в другие. Перейдём к теории:
Концепция Dependency Injection состоит в том, чтобы перенести ответственность за создание экземпляра объекта из тела метода за пределы класса и передать уже созданный экземпляр объекта обратно.
То есть приложение само отвечает за «внедрение» экземпляров внутрь классов. Это делает код чище и упрощает работу.
📕 Google Guice tutorial
#java #lesson #di
Тернарная операция
Если условие верно, задать "123", иначе — "321". Это пример условия, которое можно записать в одну строку.
Если
#java #lesson #theory
Если условие верно, задать "123", иначе — "321". Это пример условия, которое можно записать в одну строку.
var x = condition ? expression1 : expression2
— общий вид тернарного оператора.Если
condition
== true
, то задать x
значение expression1
, иначе — expression2
.#java #lesson #theory
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