Сейчас у Java диверсифицированное направление развития, включая JS, C++ и C#, не изучить его невозможно.
Давай, потратьте 5 минут, чтобы увидеть семь новых функций Java9-Java11, а также примеры кода.
Выпущен Java11, но многие компании все еще используют Java 8, вот краткое введение в новый синтаксис и API, введенные в Java 9-11.
Вывод типа локальной переменной
В Java 10 появилось новое ключевое слово var, которое может заменить информацию о типе при объявлении локальных переменных. Local (локальный) относится к объявлениям переменных внутри метода.
До Java 10 вам нужно было объявить объект String таким образом.
В Java 10 вы можете использовать var вместо String, и выражение станет таким:
Переменные, объявленные с помощью var, по-прежнему имеют статический тип. Несовместимые типы не могут быть переназначены таким переменным. Этот фрагмент кода не компилируется:
var также не допускается, если компилятор не может определить правильный тип переменной. Все следующие примеры кода приводят к ошибке компилятора:
Вывод типа локальной переменной может быть универсальным. В следующем примере тип Map>, который можно сократить до одного ключевого слова var, избегая большого количества шаблонного кода:
Начиная с Java 11 ключевое слово var также разрешено для лямбда-параметров:
HTTP Client
В Java 9 появился HttpClient API для обработки HTTP-запросов. Начиная с Java 11 этот API официально вошел в стандартный пакет библиотек (java.net). Давайте посмотрим, что мы можем сделать с этим API.
Новый HttpClient можно использовать синхронно или асинхронно. Синхронные запросы блокируют текущий поток. BodyHandlers определяют ожидаемый тип тела ответа (например, строка, массив байтов или файл):
Тот же запрос можно выполнить и с помощью async. Вызов sendAsync не блокирует текущий поток, но возвращает CompletableFuture для асинхронных операций.
Мы можем опустить .GET(), так как это метод запроса по умолчанию.
В следующем примере данные отправляются на указанный URL-адрес через POST. Как и в случае с BodyHandler, вы используете BodyPublishers для определения типа данных, отправляемых в качестве тела запроса, например строки, массива байтов, файла или входного потока:
Последний пример демонстрирует, как выполнить авторизацию через BASIC-AUTH:
Collections
Такие коллекции, как List, Set и Map, были дополнены новыми методами. List.of создает новый неизменяемый список из заданных аргументов. List.copyOf создает неизменяемую копию списка.
Поскольку список уже является неизменяемым, на самом деле нет необходимости создавать копию экземпляра списка, поэтому список и копия являются одним и тем же экземпляром. Однако, если вы скопируете изменяемый список, копия создаст новый экземпляр, поэтому при изменении исходного списка не гарантируются побочные эффекты:
При создании неизменяемой карты вам не нужно создавать записи карты самостоятельно, а передать ключ и значение в качестве параметров:
Неизменяемые коллекции в Java 11 по-прежнему используют старый интерфейс Collection API. Однако если вы попытаетесь изменить неизменяемую коллекцию, будет выдано исключение java.lang.UnsupportedOperationException. К счастью, если вы попытаетесь изменить неизменяемую коллекцию, Intellij IDEA предупредит вас
Streams
Потоки были представлены в Java 8, а в Java 9 добавлено три новых метода. Конструктор с одним параметром:
Добавлены методы takeWhile и dropWhile для освобождения элементов из потока:
Если вы не знакомы с Stream, вы можете обратиться к этой статье [1].
Optionals
Необязательные параметры предоставляют некоторые очень удобные функции, например, теперь вы можете просто преобразовать необязательный элемент в поток или предоставить другой необязательный элемент в качестве резервной копии для пустого дополнительного элемента:
Strings
Java 11 добавляет в String несколько вспомогательных методов для обрезки или проверки наличия пробелов и т. д.:
InputStreams
InputStream добавляет метод transferTo, который можно использовать для передачи данных напрямую в OutputStream:
Некоторые другие функции ВМ
С Java 8 по Java 11 было введено множество новых функций, вот список этих функций:
· Flow API for reactive programming
· Java Module System
· Application Class Data Sharing
· Dynamic Class-File Constants
· Java REPL (JShell)
· Flight Recorder
· Unicode 10
· G1: Full Parallel Garbage Collector
· ZGC: Scalable Low-Latency Garbage Collector
· Epsilon: No-Op Garbage Collector
· Deprecate the Nashorn JavaScript Engine
Примечание переводчика. Для переводчиков более привлекательными являются Application Class-Data Sharing (CDS), ZGC и Flight Recorder. Что касается ZGC, вы можете обратиться к статье о ZGC об архитектуре высокой доступности некоторое время назад.
Оригинальный адрес:
Бенджамин, автор этой статьи, переведенный Фан Юанем. Перепечатано из архитектуры высокой доступности общедоступной учетной записи.
Netease Yunxin, эксперты по мгновенным сообщениям и аудио- и видеотехнологиям вокруг вас, чтобы узнать нас, пожалуйста, нажмитеОфициальный веб-сайт NetEase Yunxin
Чтобы узнать больше об отрасли и технических галантерейных товарах, следуйтеБлог NetEase Yunxin
Для получения более интересного контента обратите внимание на учетную запись NetEase Yunxin Zhihu Institution Account.