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

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
加入频道
Перечисления в 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
Кроссплатформенность

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

В Java такое достигается за счёт JVM (Java virtual machine). Эта система берёт ваш код и переводит его в понятный компьютеру язык.

Задач у JVM, на самом деле, несколько больше. Виртуальная машина ещё занимается организацией памяти и сборкой мусора.

#java #lesson #theory
Generics

Обобщения (Generics) позволяют нам уйти от жёстких ограничений используемых типов. Так мы сохраняем типобезопасность, но при этом используем разные классы.

Возьмём, к примеру, банковский счёт, где id может быть и Integer, и String, и UUID. Тогда нам надо создать класс, который принимает тип T и подставляет его там, где нужно.

При вызове обобщения передаются так: Account<Integer>. На месте, где раньше стоял T будет Integer.

#lesson #java #theory
Atomic

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

Разработчики придумали неблокирующие алгоритмы. Их сложнее реализовывать, но они более масштабируемые и быстрые.

Классы для реализации неблокирующих программ находятся в пакете java.util.concurrent.atomic.

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

#java #lesson #concurrent
Atomic

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

Разработчики придумали неблокирующие алгоритмы. Их сложнее реализовывать, но они более масштабируемые и быстрые.

Классы для реализации неблокирующих программ находятся в пакете java.util.concurrent.atomic.

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

#java #lesson #concurrent
javadoc

Это генератор документации в HTML-формате из комментариев исходного кода Java. Комментарии для документации определяются так: /** комментирование документации */.

У javadoc есть дескрипторы: @author, @version, @since, @see, @param, @return, которые определяют какое значение мы записываем в комментариях.

#java #lesson #javadoc
Не оставляйте try/catch блоки пустыми

Обязательно выводите ошибки или обрабатывайте их! Если их игнорировать, будет трудно найти баг и придётся дебажить код.

Исключения стоит выводить хотя бы через System.out.println(), но ещё лучше воспользоваться логгером log4j.

#java #lesson #best_practices
Scanner

Класс, способный получать данные от пользователя через командную строку. На вход Scanner принимает строку или I/O объект.

Если это String, то объект можно использовать для последовательного считывания строк.

Если это I/O объект, то позволяет считывать разные типы данных: строки, числа и подобное. Для получения данных от пользователя, передаём System.in.

#java #lesson #scanner
Класс Console

Находится в java.io и упрощает работу с консолью. Он не представляет доступ к вводу-выводу, а лишь использует уже имеющиеся потоки System.in и System.out.

Для получения доступа к этому классу надо вызвать System.console().

#java #lesson #io
Stream API

Мощный инструмент для обработки данных в Java. Позволяет выполнять операции над последовательностями элементов декларативным способом, а не с помощью императивных циклов.

Первым делом из коллекции нужно получить .stream(), а потом вызывать нужную функцию: filter(), reduce() и другие.

#java #lesson #stream
.stream().reduce()

Переводит набор элементов в единое значение с помощью функции. Функция принимает результат предыдущей работы и следующие значение.

#java #lesson #stream