Java Portal | Программирование
11.3K subscribers
799 photos
59 videos
19 files
592 links
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
加入频道
Регулярные выражения

java.util.regex
позволяет с помощью специальных выражений находить нужные значения внутри текста.

Нам понадобятся только классы Matcher (для сохранения результатов сравнения) и Pattern (для создания выражения).

Если у вас есть какие-то ошибки в синтаксисе, то метод compile() выдаст PatternSyntaxException.

#java #lesson #regex
public vs protected vs private

Это параметры доступа, они определяют, в каких условиях можно получить доступ к определённым функциям/переменным.

public — любой класс может получить доступ к этому методу, считать его и изменить.

protected — доступ к переменной могут получить только дети этого класса.

private — изменять и считывать значения можно только внутри класса, где она создана.

По умолчанию ко всем объектам применяется модификатор private.

#java #lesson #basics
Паттерн Singleton

Класс существует только в едином экземпляре и к нему есть глобальный доступ (то есть, отовсюду).

Обратите внимание, что Singleton стоит использовать, если вам нужен только один экземпляр, а не когда вам нужен глобальный доступ к экземпляру.

Многие новички допускают ошибку, которую я описал выше, что превращает их код в кучу Singleton'ов. Решение: Dependency Injection.

#java #lesson #patterns
Dependency Injection

Особо актуально, если у вас больше 30 разных классов и вам нужно как-то одни передавать в другие. Перейдём к теории:

Концепция Dependency Injection состоит в том, чтобы перенести ответственность за создание экземпляра объекта из тела метода за пределы класса и передать уже созданный экземпляр объекта обратно.

То есть приложение само отвечает за «внедрение» экземпляров внутрь классов. Это делает код чище и упрощает работу.

📕 Google Guice tutorial

#java #lesson #di
Паттерн Proxy

Особые объекты-заменители, которые перехватывают вызовы к оригинальному объекту, позволяя сделать что-то и/или после вызова.

Использовать можно, например, если у вас есть куча старого кода, который менять нельзя, но надо слегка изменить поведение.

#java #lesson #patterns
this

Ключевое слово, которое указывает на себя. Например, написав this.a мы получим значение свойства a.

Само по себе очень редко используется, но спасает, когда у вас локальная переменная и свойство названы одинаково.

#java #lesson #theory
Аннотации в Java

Это метаданные, которые предоставляют данные о программе, но никак на неё не влияют. Только данные и всё.

Используется для: передачи информации для компилятора, Обработка во время компиляции/развертывания/во время выполнения.

#java #lesson #theory
Тернарная операция

Если условие верно, задать "123", иначе — "321". Это пример условия, которое можно записать в одну строку.

var x = condition ? expression1 : expression2 — общий вид тернарного оператора.

Если condition == true, то задать x значение expression1, иначе — expression2.

#java #lesson #theory
Создание своих исключений

Во первых, так намного проще классифицировать ошибки, определять источник и исправлять их.

Во вторых, за счёт собственных исключений мы можем передавать доп. данные обработчику. Например, какое число получила функция.

#java #lesson #theory
Java Best Practices

Это то, что сделает вас хорошим программистом. Best Practices — набор правил, построенных на основе чужих ошибок, на основе чужой боли, чтобы их избежать.

Придерживаясь этих правил, вы сделаете свой код более читаемым и стабильным. Почитать про это вы можете в этом репозитории.

#java #usefull_link
commons-cli

Пользователь, запуская приложение, может передавать какие-либо данные через терминал. Все они сохраняются в аргументе args метода main(String[] args).

Чтобы упросить парсинг этих самых аргументов, можно воспользоваться библиотекой commons-cli. Она, к тому же, не имеет зависимостей.

📕 Документация

#java #lesson #cli
Переопределение метода

В Java мы можем менять поведение одного и того же метода, в зависимости от класса, с котором мы работаем.

Используется вместе с наследованием и интерфейсами. Это — важнейший механизм полиморфизма.

#java #lesson #theory
Roadmap по Java

Эта дорожная карта ответит на вопросы: «С чего мне начать?» и «Что учить дальше?» Пройдясь по этому пути вы сможете полностью освоить язык и назвать себя настоящим Java программистом.

#roadmap
Тип Optional

Если вы работает с коллекциями то, наверное, уже столкнулись с проблемой, когда метод stream().any() может ничего не вернуть. Мы получаем ошибку, с которой неудобно работать.

Вместо этого мы можем получить null, задать значение по умолчанию или выбросить другую ошибку.

#java #lesson #collections
Function<T, R> и Consumer<T>

Бывает такое, что нам нужно передать в метод какую-либо другую функцию. Чтобы не создавать кучу интерфейсов с одним методом, мы можем воспользоваться уже готовыми.

Function<T, R> — принимает в себя значение с типом T, а возвращает с типом R.

Consumer<T> — принимает в себя значение с типом T, но ничего не возвращает.

Мы вполне можем использовать эти интерфейсы с лямбдами. Подробнее про Function и Consumer.

#java #lesson #interface
Cloneable

При передаче объекта функции, мы, на самом деле, передаём ссылку на него. И все изменения с экземпляром, что происходят внутри функции, повлияют и на внешнюю переменную.

Чтобы избежать неожиданное изменение свойств, мы можем создать клон объекта и передать функции уже его. Для этого нужно, чтобы класс реализовывал интерфейс Cloneable.

📌 Документация

#java #lesson #objects
Разделяй и властвуй

В разы приятнее, когда программа разделена на логические части: эта папка отвечает за кисти, эта за отрисовку изображения, эта за отправку запросов.

Код мы разделяем с помощью пакетов. Пакет (из документации) — это группа связанных типов, обеспечивающая защиту доступа и управление пространством имен.

Мы можем отделять части программы, ограничивать к ним доступ и/или переносить в другие приложения.

📌 Документация

#java #lesson #packages
Методы Object

toString() — переводит объект в строку. Если не определено, выводиться полное имя класса.

hashCode() — переводит объект в число, так называемый хэш-код.

getClass() — позволяет получить тип.

equals() — сравнивает два объекта на равенство.

#java #lesson #class
Анонимные классы

Очень классная система, которая позволяет создавать объекты «без имени». Мы создаём экземпляр, передаём его в метод и всё.

В примере мы могли бы создать три отдельных класса, наследуемых от MonitoringSystem, но ради чего? Они используются только один раз и просто захламляли бы систему.

Это более элегантное решение, но во всём надо знать меру.

#java #lesson #class
Очередь

Структура данных, работающая по принципу FIFO (первый вошёл, первый вышел). То есть чем раньше был добавлен элемент в коллекцию, тем раньше он из нее удаляется. Это однонаправленная очередь.

Есть и двунаправленные очереди, в которых мы можем добавить элемент не только в начала, но и в конец. С удалением то же самое.

Интерфейс Queue представляет однонаправленную очередь, а Deque — двунаправленную или стек. Примером двунаправленной очереди является класс ArrayDeque.

📕 Документация

#java #lesson #structures