Java — широко используемый язык программирования, известный своей универсальностью, стабильностью и масштабируемостью. Однако написание эффективного и высококачественного кода может оказаться непростой задачей. Вот несколько рекомендаций по написанию чистого и оптимизированного кода на Java.
- По возможности отдавайте предпочтение примитивам, а не примитивным оболочкам.
Объявление типов-примитивов, таких как long
и int
, предпочтительнее соответствующих оболочек объектов, таких как Long
и Integer
, из-за их меньшего объема памяти и лучшей производительности.
2. Используйте побитовый оператор AND, чтобы проверить наличие странностей.
Побитовый оператор И — это более быстрый и эффективный способ проверить, является ли число нечетным или четным, чем использование арифметического оператора по модулю.
public boolean isOdd(int num) { return (num & 1) != 0; }
3. Избегайте избыточной инициализации.
Избегайте инициализации переменных значениями по умолчанию, такими как 0
для int
или false
для boolean
.
String name; int speed; boolean isOpen;
4. Заявляйте о неприкосновенности частной жизни членов класса, когда это возможно.
Чтобы обеспечить инкапсуляцию, лучше всего объявить члены класса как частные и предоставить геттеры и сеттеры для управления ими.
private int age;
5. Избегайте использования ключевого слова new
при создании строк.
Использование ключевого слова new
при создании строкового объекта является ненужным выделением памяти. Вместо этого используйте строковые литералы, которые хранятся в пуле строк, для повышения производительности.
String s2 = "AnyString";
6. Используйте concat()
для объединения возможно пустых строк и +
в противном случае.
Для объединения строк используйте concat()
, если какая-либо из строк может быть пустой, и используйте +
в противном случае. В Java 8 и более поздних версиях также допустимо использование +
всех конкатенаций.
String address = streetNumber.concat(" ").concat(streetName) .concat(" ").concat(cityName).concat(" ").concat(cityNumber) .concat(" ").concat(countryName); String concat = str1 + str2 + str3;
7. Используйте символы подчеркивания в числовых литералах.
Использование подчеркивания в числовых литералах делает их более читабельными.
int myMoneyInBank = 58_356_823; long billsToPay = 1_000_000_000L;
8. Используйте расширенный цикл for вместо цикла for
с индексами.
Использование расширенного цикла for (также известного как цикл for-each) вместо традиционного цикла for
с индексной переменной помогает предотвратить ошибки, которые могут возникнуть при манипулировании индексной переменной.
for (String name : names) { saveInDb(name); }
9. Используйте try-with-resources вместо try-catch-finally.
Оператор try-with-resources — это более лаконичный способ обработки ресурсов, которые необходимо закрыть после использования, таких как потоки ввода-вывода.
try (Scanner scanner = new Scanner(new File("test.txt"))) { while (scanner.hasNext()) { System.out.println(scanner.nextLine()); } } catch (FileNotFoundException e) { e.printStackTrace(); }
10. Избегайте пустых блоков захвата.
Пустые блоки catch затрудняют отладку ошибок. По крайней мере, зарегистрируйте сообщение об ошибке, чтобы упростить отладку.
try { productPrice = Integer.parseInt(integer); } catch (NumberFormatException ex) { unreadablePrices.add(productPrice); log.error("Cannot read price : ", productPrice); }
11. Избегайте исключений нулевого указателя.
Избегайте исключений нулевого указателя, возвращая пустые коллекции вместо нулевых элементов, используя класс Optional
и метод requireNonNull
из класса java.util.Objects
.