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

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
加入频道
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
Класс LinkedList

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

У него есть все методы, которые определены в интерфейсах 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
Кэширование значений

Integer это тоже объект, который занимает определённое место в памяти. С числами мы работаем довольно часто (тот же for), так что и создаются они довольно часто.

Чтобы каждый раз не инициировать, разработчики решили значения от -128 до 127 сохранять в отдельном месте, а потом просто передавать ссылки на них.

Поэтому мы видим такие результаты, как выше. На местах, где всегда true, постарался компилятор и оптимизировал программу.

#java #lesson #performance
Побитовые операции

Побитовые операции происходят в бинарной системе счисления, когда число состоит из двух цифр: 1 и 0.

Побитовое И (&) — оставляет бит, только если два числа — единицы.

Побитовое ИЛИ (|) — будет 1, если хотя бы одно из чисел — 1.

Исключающее или (^) — действует так же, как и ИЛИ, но если оба числа — единицы, ставит 0.

Оператор НЕ (~) — «переворачивает» все биты в числе.

a << x, a >> x — смещение битов числа a вправо/влево на x значений.

#java #lesson #operator
Шпаргалка по Java

Небольшая фотография, которая поможет освежить знания, вычитать что-то новое и быстрее освоить язык.

#cheatsheet