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

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
加入频道
Анонимные классы

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

В примере мы могли бы создать три отдельных класса, наследуемых от 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
Рекурсия

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

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

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

P.S. Если ввести в гугл «рекурсия», то Google скажет: «Возможно, вы имели в виду: рекурсия». Такой прикол от разработчиков

#java #lesson #basic
Одинарные и двойные кавычки

В Java есть такое понятие, как символ (Char). Это определённая буква, цифра, эмодзи и т.д. Несколько таких символов уже составляют строку (String).

Так вот, в одинарных кавычках мы записываем только один символ, а в двойных кавычках мы создаём строку.

С этим нужно быть очень осторожным, поскольку пытаясь получить "MY", выполняя 'M' + 'Y', вы получите 166.

#java #lesson #theory
Строка на несколько строк

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

Тут есть два варианта: использовать «одномерные» строковые литералы или «многомерные» (которые начинаются и заканчиваются на """).

Доступно с Java 15.

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

#java #lesson #theory
Нужно быстро отправить файлы с одного компьютера на другой?

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

Для этого вводите: jwebserver -b 0.0.0.0, а на другом компьютере открываете сервер по IP, выбираете и загружаете нужный вам файл.

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

Доступно с Java 18

#java #lesson #tricks
Перечисления в Java

Считается плохой практикой использовать непонятные строки/цифры в коде. Ведь, намного лучше status == WebStatus.Ok, чем status == 200.

Чтобы объяснять магические цифры используют перечисления — набор именованных констант. Создаются с помощью enum.

#java #lesson #theory
Нативные методы и библиотеки

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

Его используют для объявления в метода, который будет имплементирован в библиотеке с расширением .dll или .so. Загрузить библиотеку в JVM надо в рантайме с помощью метода System.loadLibrary("name").

Чтобы добавить путь к нативной библиотеке, его указывают как VM-переменную:
-Djava.library.path=/path/to/lib

#java #lesson #advanced
Рефлексия

Java Reflection API — интерфейс, который позволяет анализировать компоненты и окружение во время выполнения, изменять своё поведение и структуру.

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

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

#java #lesson #theory
Работаем со временем

В пакете java.util есть класс Date(). Он позволяет узнать, который сейчас час или просто представить какой-либо день.

Самое интересное и сложное здесь — SimpleDateFormat(). Форматирование определяет то как дата будет считываться/выводится (а это важная задача).

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

#java #lesson #data
Бесконечность в Java

Это особое состояние числа с плавающей запятой. Оно всегда меньше или больше абсолютно любого другого числа.

Найти их можно в классе Double/Float под названием NEGATIVE_INFINITY и POSITIVE_INFINITY.

Ещё интересная фишка — эти числа больше/меньше не только других чисел, но и себя.

#java #lesson #features
Тестируем код

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

Для этого у нас есть JUnit — самая популярная библиотека чтобы доказать, что тут всё работает и можно спокойно пушить изменения.

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

#java #lesson #testing
Синхронизация потоков

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

Простое решение — использовать synchronized. Он приостанавливает один поток, пока второй работает с ячейкой памяти.

📌 Объяснение от Oracle

#java #lesson #multithreading
BigInteger и BigDecimal

Полезно, если вам нужно работать прямо с очень большими числами (если число больше чем 2 147 483 647). Классы могут хранить числа любого размера и выполнять с ними математические задачи.

BigInteger позволяет нам работать с целыми числами, в то время как BigDecimal нужен для чисел с плавающей запятой.

#java #lesson #features
Синхронизация потоков

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

Простое решение — использовать synchronized. Он приостанавливает один поток, пока второй работает с ячейкой памяти.

📌 Объяснение от Oracle

#java #lesson #multithreading
BigInteger и BigDecimal

Полезно, если вам нужно работать прямо с очень большими числами (если число больше чем 2 147 483 647). Классы могут хранить числа любого размера и выполнять с ними математические задачи.

BigInteger позволяет нам работать с целыми числами, в то время как BigDecimal нужен для чисел с плавающей запятой.

#java #lesson #features