Java Learning
18.7K subscribers
1.62K photos
1 video
3 files
998 links
№ 5079899194

Обучающий канал по Java

Ссылка для друга - https://t.iss.one/+ZEYYht6-46w5MDM6

По всем вопросам @mascarov_valentin

Реклама на бирже - https://telega.in/c/Java_per_month
Download Telegram
Исключение в static блоке кода

Если в статическом блоке инициализации возникнет исключение, то это приведет к ошибке при инициализации класса.

Решить эту проблему можно двумя способами:

1. Перехватить исключение с помощью try-catch в этом же статическом блоке.
2. Перехватить исключение в последующем методе, куда оно будет выброшено, если не обрабатывать исключение в статическом блоке.

Как видно из примера, исключение из статического блока перехватывается в нем же блоком try-catch.
После этого класс инициализируется успешно, и его статический метод можно вызвать.

Если не обрабатывать исключение в статическом блоке, то оно будет выброшено дальше и его можно будет поймать в методе main, как показано в примере.
👍13🔥1
Что такое Shutdown hook?

Shutdown hook — это механизм, который позволяет выполнить код при завершении работы JVM. Например, можно закрыть все открытые ресурсы и завершить потоки перед тем, как программа будет полностью остановлена.

Вы можете зарегистрировать Shutdown hook с помощью метода Runtime.addShutdownHook(). Этот метод принимает объект класса Thread, который представляет код, который вы хотите выполнить при завершении JVM.

Shutdown hook будет выполнен при завершении JVM, независимо от того, был ли завершен процесс JVM нормально (например, с помощью System.exit()) или из-за необработанного исключения.

#для_продвинутых
👍20
Принцип FIFO

Принцип FIFO (First-In-First-Out) относится к упорядочиванию и обработке элементов в порядке их поступления. В Java вы можете реализовать FIFO с использованием структуры данных, такой как очередь (Queue). В стандартной библиотеке Java есть несколько классов и интерфейсов, которые поддерживают FIFO:

— Queue интерфейс: Queue является интерфейсом, который предоставляет основные методы для работы с очередью. Вы можете использовать реализации этого интерфейса, такие как LinkedList или PriorityQueue, чтобы создать FIFO очередь.

— ArrayDeque: ArrayDeque также может быть использован для реализации FIFO очереди. Вы можете добавлять элементы в начало или конец очереди и извлекать их из начала очереди.

#для_продвинутых
👍12
BufferedWriter

BufferedWriter - это класс в Java, который позволяет записывать символы в файл с буферизацией. Он наследует класс Writer и реализует интерфейсы Closeable, Flushable и Appendable.

Конструктор BufferedWriter имеет одну форму:

BufferedWriter (Writer writer) - создает объект BufferedWriter, который будет использовать указанный Writer для записи данных.

#для_продвинутых
👍16
FileWriter

FileWriter — это класс в Java, который позволяет записывать символы в файл. Он наследует класс OutputStreamWriter и реализует интерфейс Closeable, Flushable и Appendable.

Конструктор FileWriter имеет две формы:

1. FileWriter (File file) - создает объект FileWriter, который будет записывать в указанный файл.

2. FileWriter (String fileName) - создает объект FileWriter, который будет записывать в файл с указанным именем.

#для_продвинутых
👍13
abstract

Ключевое слово abstract используется для определения абстрактного класса или метода. Абстрактный класс не может быть создан, он служит только в качестве базового класса для других классов, которые могут быть созданы на его основе.

Это позволяет упростить проектирование классов и повторно использовать код.

#для_продвинутых
👍15😱4
Юнит-тестирование в Java

Юнит-тестирование — это процесс тестирования отдельных блоков кода (юнитов) с целью обеспечения их корректной работы и выявления возможных ошибок и проблем в функциональности. Юнит-тесты должны быть маленькими, изолированными и быстрыми, и они позволяют выявить ошибки и несоответствия в вашем коде на ранних этапах разработки. В Java для написания юнит-тестов часто используется фреймворк JUnit. Вот как написать и запустить юнит-тесты в Java с использованием JUnit.

#для_продвинутых
👍18
Сортировка слиянием (Merge Sort)

Сортировка слиянием - это алгоритм сортировки, который основан на разделении массива на меньшие части, сортировке каждой части и объединении этих частей в отсортированный массив. Он имеет сложность O(n log n) и может быть эффективно использован для сортировки больших наборов данных.

Она может быть применена для сортировки массивов объектов, чисел, строк и любых других данных. В некоторых случаях сортировка слиянием может быть более эффективной, чем другие алгоритмы сортировки, особенно когда данные не упорядочены.

#для_продвинутых
👍192
Сервлеты

Сервлеты — это программные компоненты, которые расширяют функциональность сервера, помогают создавать веб-страницы и взаимодействовать с базами данных.

Сервлет получает запрос от браузера, обрабатывает его и отправляет ответ в браузер.

#для_продвинутых
👍171
Интерфейс Predicate

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

#для_продвинутых
👍16
Получить атомное время из интернет-часов

Для получения атомного времени из интернет-часов в Java вы можете воспользоваться классом java.net.URL для выполнения HTTP-запроса к одному из сервисов времени, таким как «time.google.com». Затем вы можете обработать полученный ответ и извлечь атомное время.

Обратите внимание, что формат ответа от сервиса времени может различаться, и вам может потребоваться настроить метод parseAtomicTime для вашего конкретного сервиса. Подобные сервисы могут предоставлять атомное время в разных форматах, таких как ISO 8601 или Unix Timestamp.

#для_начинающих
👍8
Инвертированный индекс

Инвертированный индекс — это структура данных, используемая в информационных поисковых системах для быстрого поиска документов, содержащих определенные слова или фразы. В инвертированном индексе каждое уникальное слово (термин) в коллекции документов связывается с списком документов, в которых это слово встречается.

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

#для_продвинутых
👍93
Конечный автомат

Конечный автомат (Finite State Machine, FSM) — это модель вычислений, которая состоит из набора состояний, переходов между состояниями и действий, выполняемых при переходе из одного состояния в другое.

Для простого примера можно использовать светофор. Светофор может иметь три состояния: красный, желтый и зеленый. Когда светофор находится в состоянии красный, машины должны останавливаться, когда он находится в состоянии желтый, машины должны готовиться к остановке, а когда светофор находится в состоянии зеленый, машины могут двигаться.

#для_продвинутых
👍13
Bit Set

BitSet — это класс, предназначенный для работы с наборами битов. Он предоставляет удобные методы для установки, сброса, получения и манипулирования битами в наборе. Этот класс полезен, когда вам нужно хранить и обрабатывать большое количество булевых значений (true/false) или флагов, используя минимальное количество памяти.

#для_начинающих
👍8
Comparator

Comparator — это интерфейс в языке программирования Java, который используется для сравнения объектов. Он часто применяется для упорядочивания элементов в коллекциях, таких как списки, множества и карты.

В этом примере MyComparator реализует интерфейс Comparator для целых чисел (Integer) и сортирует список чисел в обратном порядке.

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

#для_начинающих
👍114
ReentrantLock

ReentrantLock - это класс в Java, который предоставляет механизм блокировки с возможностью повторного входа.

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

#для_начинающих
👍181
Тип Optional

Тип Optional используется для представления возможности отсутствия значения. Он обертывает другой тип данных и может содержать либо значение этого типа, либо быть пустым (null).

Этот код создает Optional объект, который может содержать строку. Если строка доступна, она будет возвращена; в противном случае будет возвращено значение "Default Value".

Использование Optional способствует более чистому и безопасному коду при работе с возможно отсутствующими значениями.

#для_начинающих
👍20
Класс LinkedList

Класс LinkedList представляет собой двусвязный список, который является одной из структур данных для хранения и управления коллекцией элементов. LinkedList предоставляет реализацию интерфейсов List и Deque, что означает, что он может использоваться как список элементов и как двусторонняя очередь (двунаправленный список).

#для_начинающих
👍13🔥2
Большие числа BigInteger

В Java для работы с большими числами (такими, которые не умещаются в примитивные типы данных) используется класс BigInteger из пакета java.math. Этот класс позволяет производить арифметические операции с большими числами, которые могут содержать до 2^31-1 битов.

#для_начинающих
👍16
SynchronousQueue

SynchronousQueue — это блокирующая очередь, в которой каждая операция вставки должна ждать соответствующей операции удаления другим потоком и наоборот.

В этом примере создается SynchronousQueue. Затем запускаются два потока: производитель и потребитель. Производитель пытается добавить значение в очередь с помощью метода put(). Этот метод заблокирует выполнение, пока другой поток не вызовет метод take(). Когда потребитель вызывает метод take(), он получает значение из очереди, и выполнение производителя продолжается.
👍16