Весной 2022 года, а точнее 22 марта (Месяц Первого Зерна) 2022, вышла новая версия Java. Я уже описывал изменения, которые произошли в Java 17. Также рекомендую ознакомиться с учебником Java. Нововведений довольно мало. Большая часть перешла из Java 17 как preview или incubator, то есть пока недоступна без специальных опций. Я их не буду описывать ещё раз. Здесь описаны только те возможности, которые окончательно вошли в Java.
UTF-8 по умолчанию
- файлы исходных кодов,
- API работы с файлами,
- Charset.defaultCharset() возвращает UTF-8,
- и многое другое.
Кроме System.out и System.err, которые используют не кодировку из Charset.defaultCharset(), а Console.charset().
Довольно важное изменение, я считаю, так как раньше могло появляться порядочно проблем. Если создавать, например, new InputStreamReader(new FileInputStream(file));, то использовалась кодировка системы по умолчанию. Нужно было указывать кодировку new InputStreamReader(new FileInputStream(file), encoding);, чтобы избежать этой неоднозначности. Теперь же в этом случае будет использоваться UTF-8, а не кодировка системы по умолчанию.
Кусочки кода в JavaDoc
Раньше для вставки кусков кода в документацию часто писали:
1 2 3 4 5 6 |
/** * Пример кода: * <pre>{@code * lines of source code * }</pre> */ |
Теперь для этого существует специальный тег @snippet:
1 2 3 4 5 6 7 8 |
/** * The following code shows how to use {@code Optional.isPresent}: * {@snippet : * if (v.isPresent()) { * System.out.println("v: " + v.get()); * } * } */ |
Object.finalize помечен для удаления в будущих релизах
Метод java.lang.Object.finalize был указан как устаревший в Java 9. В Java 18 он указан как метод для удаления в последующих релизах.