Java Learning
18.6K subscribers
1.62K photos
1 video
3 files
999 links
№ 5079899194

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

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

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

Реклама на бирже - https://telega.in/c/Java_per_month
Download Telegram
Что такое BufferedInputStream?

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

Как работает BufferedInputStream?

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

#для_продвинутых
👍121
Класс ByteArrayOutputStream

Класс ByteArrayOutputStream представляет собой поток вывода, в котором данные пишутся в байтовый массив. Буфер автоматически растет, поскольку данные пишутся ему. Поток класса ByteArrayOutputStream создает буфер в памяти, и все данные, отправленные в поток, хранятся в буфере.

#для_продвинутых
👍9
Ключевое слово new

Ключевое слово new используется для создания нового объекта. Оно всегда используется в сочетании с именем класса, к которому принадлежит создаваемый объект. Например, чтобы создать новый объект класса String, мы можем написать код, как на картинке.

В этом примере переменная str будет ссылаться на новый объект класса String. По умолчанию, новый объект будет инициализирован значениями по умолчанию для своего типа. Например, объект класса String будет содержать пустую строку.

#для_начинающих
👍19🔥1
Интерфейс Function

Функциональный интерфейс Function представляет собой интерфейс, который используется для представления функции, принимающей один аргумент и возвращающей результат. Он является частью пакета java.util.function и был введен в Java 8 для поддержки функционального программирования.

#для_продвинутых
👍13
#Вопросы_с_собеседования
Что такое цепочка конструкторов?

Цепочка конструкторов – это процесс вызова одного конструктора из другого по отношению к текущему объекту. Цепочка конструкторов возможна только в устаревших версиях, когда конструктор подкласса отвечает за вызов конструктора суперкласса первым. В цепочке конструкторов может быть любое количество классов. Цепочка конструкторов может быть достигнута двумя способами:

1) В том же классе, используя this().
2) Из базового класса с использованием super().
👍122
#Вопросы_с_собеседования
Чем отличается переопределение от перегрузки?


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

Перегрузка — это возможность определить несколько методов с одинаковым именем, но разными параметрами. При перегрузке сигнатура методов должна различаться по количеству, типу или порядку параметров.
👍251
DelayQueue

DelayQueue — это очередь, которая хранит элементы в порядке их задержки. Элементы в очереди извлекаются только после истечения их задержки.

DelayQueue реализует интерфейс BlockingQueue, поэтому элементы могут извлекаться из нее только блокирующими методами take() или poll(long timeout, TimeUnit unit).

Элементы DelayQueue должны реализовывать интерфейс Delayed. Интерфейс Delayed определяет два метода:

getDelay(): возвращает оставшуюся задержку элемента в миллисекундах.
isExpired(): возвращает true, если задержка элемента истекла.

#для_продвинутых
👍11
Что такое интерфейс Cloneable?

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

Как работает клонирование в Java?

1. Реализация интерфейса Cloneable: Класс, объекты которого вы хотите клонировать, должен реализовывать интерфейс Cloneable.
2. Переопределение метода clone(): Вам необходимо переопределить метод clone() из класса Object в вашем классе. Этот метод возвращает копию объекта.
3. Вызов метода clone(): Чтобы создать копию объекта, вызовите метод clone() у этого объекта.

#для_продвинутых
👍15
Атомарные переменные в Java.util.concurrent

Пакет java.util.concurrent.atomic определяет классы, которые поддерживают атомарные операции над отдельными переменными. Все классы имеют методы get и set, которые работают как чтение и запись волатильных переменных. То есть set имеет отношение happens-before с любым последующим get на той же переменной.

Ниже перечислены все переменные, определенные в пакете: AtomicBoolean, AtomicInteger, AtomicLong, AtomicReference.


В этом примере создается AtomicInteger со значением 0. Затем значение инкрементируется с помощью метода incrementAndGet(). В конце значение получается с помощью метода get().
👍11
Даны 3 потока Т1, Т2 и Т3? Как реализовать выполнение в последовательности Т1, Т2, Т3?

Такой последовательности выполнения можно достичь многими способами, например просто воспользоваться методом join(), чтобы запустить поток в момент, когда другой уже закончит своё выполнение. Для реализации заданной последовательности, нужно запустить последний поток первым, и затем вызывать метод join() в обратном порядке, то есть Т3 вызывает Т2.join, а Т2 вызывает Т1.join, таким образом Т1 закончит выполнение первым, а Т3 последним.
👍22
ExecutorService

ExecutorService — это API JDK, который упрощает запуск задач в асинхронном режиме. В общем смысле, ExecutorService автоматически предоставляет пул потоков и API для назначения задач.

Лучший вариант использования ExecutorService — это обработка независимых задач, таких как транзакции или запросы по схеме "один поток для одной задачи".

В этом примере создается ExecutorService с помощью фабричного метода Executors.newSingleThreadExecutor(). Затем запускается задача с помощью метода submit(). В конце работы ExecutorService завершается с помощью метода shutdown().
👍15
Класс Character

Класс Character в Java является классом-обёрткой для примитивного типа данных char. Он предоставляет несколько полезных методов для работы с символами, таких как проверка на принадлежность к различным категориям (цифры, буквы, пробелы и т.д.) и преобразование регистров.

#для_начинающих
👍13
Класс System

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

Класс System является частью пакета java.lang, который импортируется по умолчанию во все программы на Java.

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

#для_начинающих
👍22
Класс Calendar

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

Момент времени можно представить в виде значения в миллисекундах, которое является смещением от эпохи, 1 января 1970 года 00:00:00.000 GMT (григорианский). Класс также предоставляет дополнительные поля и методы для реализации конкретной системы календаря за пределами пакета. Эти поля и методы определены как protected.

#для_продвинутых
👍141
Класс TimeZone

Класс TimeZone представляет собой часовой пояс. Часовой пояс — это географическая область, в которой используется один и тот же стандарт времени.

Класс TimeZone имеет несколько методов для работы с часовыми поясами. Например, метод getAvailableIDs() возвращает список всех известных часовых поясов. Метод getTimeZone(String id) возвращает объект TimeZone по его идентификатору.

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

DecimalFormat — это класс, предназначенный для форматирования десятичных чисел. Он имеет множество параметров, которые позволяют настроить вывод числа в соответствии с вашими потребностями.

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

Шаблон — это строка, которая определяет, как будет отображаться число.

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

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

Когда поток получает исключение ThreadDeath, он немедленно завершается. Если поток был заблокирован на мониторе, он сначала разблокирует монитор.

Важно отметить, что исключение ThreadDeath не может быть обработано с помощью блока try-catch. Если поток получает исключение ThreadDeath, оно просто игнорируется и поток завершается.

#для_продвинутых
👍121
Класс Throwable

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

Класс Throwable имеет следующие важные методы:

getMessage() — возвращает строковое сообщение, описывающее исключение.
printStackTrace() — выводит в стандартный поток ошибок подробную информацию об исключении, включая его тип, сообщение и стек вызовов.
Исключения делятся на две категории: ошибки и исключения. Ошибки являются необратимыми ситуациями, которые приводят к завершению работы программы. Исключения же являются обратимыми ситуациями, которые можно обработать и продолжить выполнение программы.

#для_продвинутых
👍9
#вопросы_с_собеседований
В чем разница между Iterator и Enumeration?

Iterator появился в JDK 1.2 и реализует интерфейс Iterable, в то время как Enumeration существовал в более ранних версиях JDK и не реализует Iterable.

— Методы Iterator позволяют удалять элементы во время итерации, в то время как методы Enumeration не предоставляют такой возможности.

Iterator является "fail-fast", то есть выбросит ConcurrentModificationException, если коллекция была изменена, а Enumeration не гарантирует такого поведения.

Iterator поддерживает обобщенные типы, а Enumeration работает только с объектами типа Object.
👍17
#вопросы_с_собеседований
Почему современные фреймворки используют в основном только unchecked exceptions?

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

Некоторые же фреймворки используют checked exceptions для обработки ошибок ввода-вывода или других проблем, которые могут возникнуть в процессе выполнения программы. Однако, это может привести к тому, что код становится более сложным и менее читаемым.
👍22
#вопросы_с_собеседований
Что будет, если в static блоке кода возникнет исключение?

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

Поэтому нужно либо обрабатывать исключения в static блоке, либо избегать кода, который может привести к исключениям.
Лучше выносить в static блок только простую инициализацию, а сложную логику помещать в конструктор или методы класса.
👍31