java_geek | Unsorted

Telegram-канал java_geek - Java Geek

-

Учим Java на примерах

Subscribe to a channel

Java Geek

Проверка на нечетность

Можно ли использовать этот код с примера 1 на картинке для точного определения нечетного числа?

Надеюсь, вы заметили хитрость. Если мы решим таким образом проверить отрицательное нечетное число (например, -5), остаток от деления не будет равен единице, поэтому воспользуйтесь более точным методом (пример 2).

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

@java_geek

Читать полностью…

Java Geek

Приведите пример, когда какая-либо коллекция выбрасывает UnsupportedOperationException.

Ответ:
В примере возникает ошибка, потому что Collections.emptyList() возвращает пустой список без возможности добавления элементов.

@java_geek

Читать полностью…

Java Geek

Разница дат в Java

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

Результат выполнения кода будет похож на это:

Fri Jan 07 17:11:18 GMT 2022

Fri Jan 07 17:11:28 GMT 2022

Разница между датами: 10069 миллисекунд

@java_geek

Читать полностью…

Java Geek

Guava

Guava — это сборник множества библиотек от Google. Он включает в себя:

☕️ несколько новых типов коллекций, неизменяемые коллекции;
☕️ библиотеку, реализующую работу с графами;
☕️ работу с вводом\выводом, хешированием, кэшированием, строками и многим другим.

Например, часто в коде можно встретить повторяющиеся блоки, реализующие низкоуровневую конкатенацию строк (см. пример кода). Согласитесь, код с Guava выглядит лаконичнее, понятнее, а главное, выполняет эту операцию самым оптимальным образом.

На эту библиотеку определённо стоит обратить внимание как минимум по причинам. Во-первых, она разработана спецами из Google. Во-вторых, эти же спецы из Google сами её используют. Репозиторий с документацией и инструкцией к установке тут.

@java_geek

Читать полностью…

Java Geek

Чем похожи класс и интерфейс?

☕️ Интерфейс может содержать любое количество методов;
☕️ Интерфейс записан в файле с расширением .java, и имя интерфейса совпадает с именем файла;
☕️ Байт-код интерфейса находится в .class файле;
☕️ Интерфейсы появляются в пакетах, и их соответствующий файл байт-кода должен быть в структуре каталогов, которая совпадает с именем пакета.

@java_geek

Читать полностью…

Java Geek

Встроенные исключения

Java определяет несколько классов исключений внутри стандартного пакета java.lang.

Наиболее общие из этих исключений являются подклассами стандартного типа RuntimeException. Поскольку java.lang неявно импортируется во все java-программы, то большинство исключений, полученных из RuntimeException, автоматические.

Java определяет несколько других типов исключений, которые относятся к его различным библиотекам класса. Ниже приведен список неконтролируемых исключений на этапе выполнения (Unchecked RuntimeException).

@java_geek

Читать полностью…

Java Geek

Какое начальное количество корзин в HashMap?

В конструкторе по умолчанию - 16, используя конструкторы с параметрами можно задавать произвольное начальное количество корзин.

@java_geek

Читать полностью…

Java Geek

Класс FileWriter

Наследуется от класса OutputStreamWriter, используется для записи потоков символов. Код на картинке создает файл с разрешением .txt и записывает в него текст, а после с помощью FileReader читает его из файла.

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

@java_geek

Читать полностью…

Java Geek

Float vs Double

Программисты часто не могут выбрать необходимую им точность для чисел с плавающей точкой. Float требует всего 4 байта, но и значащих цифр у него только 7, в то время как Double в два раза точнее (15 цифр), но и в два раза расточительнее.

На самом деле большинство процессоров способны работать с Float и Double одинаково эффективно, поэтому воспользуйтесь рекомендацией Бьёрна Страуструпа (создателя языка С++):

"Выбор нужной точности в реальных задачах требует хорошего понимания природы машинных вычислений. Если у вас его нет, либо проконсультируйтесь с кем-нибудь, либо изучите проблему сами, либо используйте double и надейтесь на лучшее."

@java_geek

Читать полностью…

Java Geek

Комбинирование хеш-таблиц

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

@java_geek

Читать полностью…

Java Geek

Одинарные и двойные кавычки

Что ожидается в результате выполнения кода с картинки?

Казалось бы, строка должна возвращать «HaHa», но на самом деле это будет «Ha169».

Двойные кавычки обрабатывают символы как строки, но одинарные кавычки ведут себя иначе. Они преобразуют символьные операнды ('H' и 'a') в целые значения посредством расширения примитивных типов — получается 169.

@java_geek

Читать полностью…

Java Geek

Метод startsWith()

Метод startsWith() в Java имеет два варианта и проверяет, начинается ли строка с указанного префикса, начиная с указанного индекса или с начала (по умолчанию).

@java_geek

Читать полностью…

Java Geek

Клонирование массивов

Когда вы клонируете одномерный массив, такой как Object[], выполняется «глубокая копия» с новым массивом, содержащим копии элементов исходного массива, а не ссылки.

Подробнее с методом clone() можно ознакомиться здесь.

@java_geek

Читать полностью…

Java Geek

Метод compareTo()

В Java метод compareTo() получает значение 0, если аргумент является строкой лексически равной данной строке; значение меньше 0, если аргумент является строкой лексически большей, чем сравниваемая строка; и значение больше 0, если аргумент является строкой лексически меньшей этой строки.

@java_geek

Читать полностью…

Java Geek

Что вы знаете о OutOfMemoryError?

OutOfMemoryError выбрасывается, когда виртуальная машина Java не может создать (разместить) объект из-за нехватки памяти, а сборщик мусора не может высвободить достаточное её количество.

Область памяти, занимаемая java процессом, состоит из нескольких частей. Тип OutOfMemoryError зависит от того, в какой из них не хватило места:
• java.lang.OutOfMemoryError: Java heap space: Не хватает места в куче, а именно, в области памяти в которую помещаются объекты, создаваемые в приложении программно. Обычно проблема кроется в утечке памяти. Размер задается параметрами -Xms и -Xmx.
• java.lang.OutOfMemoryError: PermGen space: (до версии Java 8 ) Данная ошибка возникает при нехватке места в Permanent области, размер которой задается параметрами -XX:PermSize и -XX:MaxPermSize.
• java.lang.OutOfMemoryError: GC overhead limit exceeded: Данная ошибка может возникнуть как при переполнении первой, так и второй областей. Связана она с тем, что памяти осталось мало и сборщик мусора постоянно работает, пытаясь высвободить немного места. Данную ошибку можно отключить с помощью параметра -XX:-UseGCOverheadLimit.
• java.lang.OutOfMemoryError: unable to create new native thread: Выбрасывается, когда нет возможности создавать новые потоки.

@java_geek

Читать полностью…

Java Geek

NullPointer Exception

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

Рассмотрим строчку кода из примера 1 на картинке. Если объект school окажется равен null или его метод listStudents вернет null, вы получите исключение NullPointerException.

Хорошей практикой разработки на Java является предварительная проверка на null в методах (как в примере 2).

@java_geek

Читать полностью…

Java Geek

Побитовые операции

• ~ : Побитовый унарный оператор NOT;
• & : Побитовый AND;
• &= : Побитовый AND с присваиванием;
• | : Побитовый OR;
• |= : Побитовый OR с присваиванием;
• ^ : Побитовый исключающее XOR;
• ^= : Побитовый исключающее XOR с присваиванием;
• >> : Сдвиг вправо (деление на 2 в степени сдвига);
• >>= : Сдвиг вправо с присваиванием;
• >>> : Сдвиг вправо без учёта знака;
• >>>= : Сдвиг вправо без учёта знака с присваиванием;
• << : Сдвиг влево (умножение на 2 в степени сдвига);
• <<= : Сдвиг влево с присваиванием.

@java_geek

Читать полностью…

Java Geek

Верно ли утверждение, что примитивные типы данных всегда хранятся в стеке, а экземпляры ссылочных типов данных в куче?

Ответ:
Не совсем. Примитивное поле экземпляра класса хранится не в стеке, а в куче. Любой объект (всё, что явно или неявно создаётся при помощи оператора new) хранится в куче.

@java_geek

Читать полностью…

Java Geek

Каким образом из вложенного класса получить доступ к полю внешнего класса?

Статический вложенный класс имеет прямой доступ только к статическим полям обрамляющего класса.

Простой внутренний класс, может обратиться к любому полю внешнего класса напрямую. В случае, если у вложенного класса уже существует поле с таким же литералом, то обращаться к такому полю следует через ссылку на его экземпляр. Например: Outer.this.field.

@java_geek

Читать полностью…

Java Geek

Генерируем код и пароль

Часто мы забываем наши пароли и выбираем опцию «Забыть пароль», и в кратчайшие сроки мы получаем новый пароль на наш зарегистрированный адрес электронной почты или номер телефона для входа в нашу учетную запись.

Иногда мы получаем доступ к нашим банковским счетам во время покупок в интернет-магазине и чтобы подтвердить наш переход с банковского счета, нам отправляют нам OTP (одноразовый пароль) на наш зарегистрированный номер телефона или адрес электронной почты.

Следующий код объясняет, как быстро генерировать такие пароли и OTP.

@java_geek

Читать полностью…

Java Geek

Получение координат курсора

Чтобы фиксировать события мыши, вам необходимо реализовать интерфейс MouseMotionListener. Когда курсор попадает в определенную область, срабатывает обработчик события mouseMoved, из которого вы можете получить точные координаты (используя Swing для UI).

@java_geek

Читать полностью…

Java Geek

Воспроизведение звуков

Звук — важный компонент многих десктопных приложений и игр. Язык программирования Java предоставляет средства для работы с ним.

@java_geek

Читать полностью…

Java Geek

Выполнение консольных команд

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

Например, давайте попробуем открыть файл PDF через терминал Java (на Linux’e).

@java_geek

Читать полностью…

Java Geek

Какие существуют особенности использования вложенных классов: статических и внутренних? В чем заключается разница между ними?

• Вложенные классы могут обращаться ко всем членам обрамляющего класса, в том числе и приватным.
• Для создания объекта статического вложенного класса объект внешнего класса не требуется.
• Из объекта статического вложенного класса нельзя обращаться к не статическим членам обрамляющего класса напрямую, а только через ссылку на экземпляр внешнего класса.
• Обычные вложенные классы не могут содержать статических методов, блоков инициализации и классов. Статические вложенные классы - могут.
• В объекте обычного вложенного класса хранится ссылка на объект внешнего класса. Внутри статической такой ссылки нет. Доступ к экземпляру обрамляющего класса осуществляется через указание .this после его имени. Например: Outer.this.

@java_geek

Читать полностью…

Java Geek

Чем отличаются конструктор по-умолчанию, конструктор копирования и конструктор с параметрами?

У конструктора по умолчанию отсутствуют какие-либо аргументы. Конструктор копирования принимает в качестве аргумента уже существующий объект класса для последующего создания его клона. Конструктор с параметрами имеет в своей сигнатуре аргументы (обычно необходимые для инициализации полей класса).

@java_geek

Читать полностью…

Java Geek

Метод lastIndexOf()

Метод lastIndexOf() в Java имеет следующие варианты:

int lastIndexOf(int ch) — возвращает индекс в данной строке последнего вхождения указанного символа или -1, если символ не встречается.

public int lastIndexOf(int ch, int fromIndex) — возвращает индекс последнего вхождения символа в символьной последовательности, представленной данным объектом, который меньше или равен fromIndex, или -1, если символ не встречается до этой точки.

public int lastIndexOf(String str) — если аргумент строки встречается один или несколько раз в подстроке в этом объекте, то он возвращает индекс первого символа последней такой подстроки.

public int lastIndexOf(String str, int fromIndex) — возвращает индекс внутри данной строки последнего вхождения указанной подстроки, поиск осуществляется назад, начиная с указанного индекса.

Параметры:
ch — символ;
fromIndex — индекс, чтобы начать поиск (от);
str — строка.

@java_geek

Читать полностью…

Java Geek

Зубчатый массив в Java

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

@java_geek

Читать полностью…

Java Geek

Форматирование строк

Класс String предоставляет возможность создания форматированных строк. За это отвечает статический метод format.

@java_geek

Читать полностью…

Java Geek

Как преобразовать цветное изображение в черно-белое

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

@java_geek

Читать полностью…

Java Geek

Метод rotate()

Метод java.util.Collections.rotate() присутствует в классе java.util.Collections. Используется для поворота элементов, присутствующих в указанном списке Коллекции, на заданное расстояние.

@java_geek

Читать полностью…
Subscribe to a channel