uk
Feedback
Java Geek

Java Geek

Відкрити в Telegram

Практичные советы, лайфхаки и код для Java-разработчиков. Каждый пост — реальная польза. Учим Java на примерах. По всем вопросам @evgenycarter

Показати більше
2 447
Підписники
Немає даних24 години
+27 днів
+530 день
Архів дописів
Data reading Что плохого в этих невинных строках? Да в общем-то ничего, кроме того факта, что мы не знаем размер файла которы
Data reading Что плохого в этих невинных строках? Да в общем-то ничего, кроме того факта, что мы не знаем размер файла который считываем. Вместо файла может быть что угодно — открытый сокет, который принимает данные, данные из post запроса, все… В общем случае старайтесь не считывать всё в массив байтов, у вас попросту может не хватить памяти. Поэтому будьте осторожны с размером любых данных. Старайтесь обрабатывать и пересылать данные по частям. И всегда следите за размером пользовательских данных и по возможности ограничивайте их. @java_geek

Преобразование строки в дату Класс SimpleDateFormat имеет некоторые дополнительные методы, в частности parse(), который в Jav
Преобразование строки в дату Класс SimpleDateFormat имеет некоторые дополнительные методы, в частности parse(), который в Java поможет нам перевести строку в дату соответствии с форматом, хранящимся в данном объекте SimpleDateFormat. Пример на картинке. @java_geek

Какой самый надежный способ проверить, равны ли два значения типа double? Наиболее надежный и точный способ проверить это — и
Какой самый надежный способ проверить, равны ли два значения типа double? Наиболее надежный и точный способ проверить это — использовать Dоuble.соmpare() и сравнить значение с нулем. @java_geek

Какая проблема возникнет с этим кодом? Ответ: Данный код не с компилируется. Этот вопрос на знание иерархии исключений, в дан
Какая проблема возникнет с этим кодом? Ответ: Данный код не с компилируется. Этот вопрос на знание иерархии исключений, в данном случае FileNotFoundException унаследован от IOException, первый catch будет перехватывать все исключения и в следующий блок catch управление не будет передано. @java_geek

Метод matches() Возвращает значение true, если, и только в том случае, если эта строка соответствует заданному регулярному вы
Метод matches() Возвращает значение true, если, и только в том случае, если эта строка соответствует заданному регулярному выражению. @java_geek

Google-json (GSON) Google-json, как понятно из названия, ещё одна разработка прямиком из Google. Библиотека реализует механиз
Google-json (GSON) Google-json, как понятно из названия, ещё одна разработка прямиком из Google. Библиотека реализует механизмы работы с форматом JSON, а именно приведение Java-объектов в этот формат и обратно. Примерно вот так выглядит сериализация и десериализация с помощью GSON(см картинку). Как видно, перевод объекта проходит с помощью минимального количества легкочитаемого и понимаемого кода. Особенно эта библиотека пригодится при работе с RESTful приложениями, которые общаются преимущественно с помощью json. @java_geek

Пирамидальная сортировка Пирамидальная сортировка является методом сортировки, который интерпретирует элементы в массиве, как
Пирамидальная сортировка Пирамидальная сортировка является методом сортировки, который интерпретирует элементы в массиве, как почти полное бинарное дерево. Она берет элементы массива и вставляет их в пирамиду. После построения пирамиды, из нее по очереди удаляются наибольшие элементы и вставляются в конец массива, где и находятся в отсортированном виде. Общее время сортировки расчитывается по O(N logN) для N элементов. @java_geek

NullPointer Exception Исключения нулевого указателя возникает в Java довольно часто при попытке вызова метода несуществующего
NullPointer Exception Исключения нулевого указателя возникает в Java довольно часто при попытке вызова метода несуществующего объекта. Возьмем для примера следующую строчку кода: int noOfStudents = school.listStudents().count; Если объект school окажется равен Null или его метод listStudents вернет Null, вы получите исключение NullPointerException. Хорошей практикой разработки на Java является предварительная проверка на Null в методах. @java_geek

Interface for Consts Очень часто встречаются интерфейсы для описания констант. Это не правильно с точки зрения ООП. Интерфейс
Interface for Consts Очень часто встречаются интерфейсы для описания констант. Это не правильно с точки зрения ООП. Интерфейс должен описывать поведение, не больше не меньше. Этот пункт не очень принципиален, тем более что результат компиляции будет один и тот же, но все же java это ООП язык и было бы хорошо придерживаться его принципов. @java_geek

Метод fill() Присваивает определенное значение int к каждому элементу указанного целочисленного массива. Такой же метод может
Метод fill() Присваивает определенное значение int к каждому элементу указанного целочисленного массива. Такой же метод может быть использован всеми другими примитивными типами данных (byte, short, int и т.д.). @java_geek

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

Bit Set Что, если нам нужно выполнить какие-то операции с массивами битов? Вы будете использовать для этого boolean[]? Для эт
Bit Set Что, если нам нужно выполнить какие-то операции с массивами битов? Вы будете использовать для этого boolean[]? Для этого есть более эффективный с точки зрения использования памяти метод. Это класс BitSet, позволяющий нам хранить массивы битов и манипулировать ими. По сравнению с boolean[] он требует в 8 раз меньше памяти. Мы можем выполнять логические операции над массивами, такими как, например and, or, xor. Допустим, у нас есть два входных массива битов. Мы хотим провести на них операцию xor. Уточню, операция xor, возвращает только те элементы, которые имеются только в одном массиве, но не в другом. Для этого нам нужно создать два экземпляра BitSet и вставить туда элементы, как показано ниже. Наконец, вы должны вызвать метод xor в одном из BitSet объектов, указав в качестве аргумента второй BitSet объект. @java_geek

Шестнадцатеричный формат За этим нет большой истории. Иногда нам нужно преобразовать строки в шестнадцатеричный формат, байты
Шестнадцатеричный формат За этим нет большой истории. Иногда нам нужно преобразовать строки в шестнадцатеричный формат, байты или символы. Начиная с Java 17 вы можете использовать класс HexFormat. Просто создайте экземпляр HexFormat, а затем вы можете отформатировать, например, входную таблицу byte в шестнадцатеричную строку. Вы также можете, например, преобразовать входную шестнадцатеричную строку в таблицу байтов, как показано выше. @java_geek

Generics Всегда старайтесь типизировать ваши коллекции, методы и классы. Это избавляет сразу от 2-х потенциальных проблем: пр
Generics Всегда старайтесь типизировать ваши коллекции, методы и классы. Это избавляет сразу от 2-х потенциальных проблем: приведение типов и ошибок выполнения. Также назначение таких коллекций легче воспринимать. Особенно часто этим пренебрегают мои американо-индусские коллеги. Если же ваша коллекция должна содержать обьекты разных типов — используйте <?>, а еще лучше <? extends someType> тогда зная общий класс/интерфейс для всех обьектов вам не прийдется делать приведение типов и применять оператор instanceOf. @java_geek

Статический вложенный класс в Java Статический внутренний класс — это вложенный класс, который является статическим членом вн
Статический вложенный класс в Java Статический внутренний класс — это вложенный класс, который является статическим членом внешнего класса. Доступ к нему возможен без создания экземпляра внешнего класса с использованием других статических элементов. Как и статические члены, статический вложенный класс не имеет доступа к переменным экземпляра и методам внешнего класса. Синтаксис статического вложенного класса в Java выглядит следующим образом: class MyOuter { static class Nested_Demo { } } Создание экземпляра статического вложенного класса немного отличается от экземпляра внутреннего класса. Следующая программа показывает, как использовать статические вложенные классы. @java_geek

Что за зверь "Matcher"? Класс Java Matcher (java.util.regex.Matcher) создан для поиска некоторого множества вхождений регуляр
Что за зверь "Matcher"? Класс Java Matcher (java.util.regex.Matcher) создан для поиска некоторого множества вхождений регулярного выражения в одном тексте и поиска по одному шаблону в разных текстах. Класс Java Matcher имеет много полезных методов. Например: • boolean matches(): вернет значение true при совпадении строки с шаблоном. • boolean find(): вернет значение true при обнаружении подстроки, совпадающей с шаблоном, и перейдет к ней. • int start(): вернет значение индекса соответствия. • int end(): вернет значение индекса последующего соответствия. • String replaceAll(String str): вернет значение измененной строки подстрокой str. Другие методы Matcher можно найти в официальной документации. Рассмотрите простой пример работы с Pattern и Matcher. @java_geek

Конструктор по умолчанию в Java Как и C++, Java автоматически создает конструктор по умолчанию, если нет конструктора по умол
Конструктор по умолчанию в Java Как и C++, Java автоматически создает конструктор по умолчанию, если нет конструктора по умолчанию или параметризованного конструктора, написанного программистом. А также как и в C++ конструктор по умолчанию автоматически вызывает родительский конструктор по умолчанию. Но, в отличие от C++, конструктор по умолчанию в Java инициализирует члены класса значениями по умолчанию (числовые значения инициализируются как 0, логические значения инициализируются как false, а ссылки инициализируются как null). @java_geek

Работа с ошибками Отлов багов – это, возможно, самая трудоемкая составляющая процесса разработки на Java. Трассировка стека п
Работа с ошибками Отлов багов – это, возможно, самая трудоемкая составляющая процесса разработки на Java. Трассировка стека позволяет отследить, в каком именно месте проекта было выброшено исключение. @java_geek

Эффективный трюк, чтобы узнать, является ли число степенью двойки Обычный метод деления имеет сложность O(logN), но эту задач
Эффективный трюк, чтобы узнать, является ли число степенью двойки Обычный метод деления имеет сложность O(logN), но эту задачу можно решить со сложностью O(v), где v — количество цифр числа в двоичной форме. @java_geek

Резервирование памяти Некоторые Java-приложения очень требовательны к ресурсам и могут работать медленно. Для повышения произ
Резервирование памяти Некоторые Java-приложения очень требовательны к ресурсам и могут работать медленно. Для повышения производительности можно выделять Java-машине больше оперативной памяти. • Xms – минимальный пул выделения памяти; • Xmx – максимальный пул выделения памяти; • XX:PermSize – начальный размер, который будет выделен при запуске JVM; • XX:MaxPermSize – максимальный размер, который может быть выделен при запуске JVM. @java_geek