Java 9 Flashcards Preview

Java > Java 9 > Flashcards

Flashcards in Java 9 Deck (11)
Loading flashcards...
1

JShell

система для интерактивного программирования в консоли.

G:\>jshell
| Welcome to JShell -- Version 9-ea
| For an introduction type: /help intro


jshell> int a = 10
a ==> 10

jshell> System.out.println("a value = " + a)
a value = 10

2

immutableList

Неизменяемые объекты List, Set и Map «из коробки»
Oracle представила несколько удобных методов для создания неизменяемых List, Set, Map и Map.Entry объектов без использования дополнительных классов
List immutableList = List.of(); // пустой неизменяемый список

List immutableList = List.of("one","two","three"); // неизменяемый список, содержащий информацию
Map имеет два набора методов: of() методы и ofEntries() методы для создания объектов Immutable Map и Map.Entry.

jshell> Map emptyImmutableMap = Map.of()
emptyImmutableMap ==> {} // пустое неизменяемое отображение

jshell> Map nonemptyImmutableMap = Map.of(1, "one", 2, "two", 3, "three")
nonemptyImmutableMap ==> {2=two, 3=three, 1=one} // неизменяемое отображение

3

Private методы в интерфейсах

В Java 8 мы можем обеспечивать реализацию метода в интерфейсах, используя default и static методы. Однако мы не можем создавать private методы в интерфейсах.
Для избавления от нагромождения и переизбытка кода Oracle собирается добавить private методы в интерфейсы Java SE 9. Начиная с девятой версии, мы также сможем создавать private static методы в интерфейсах с помощью private.

4

Модульная система

Одним из самых значительных изменений является появление модульной системы. До Java 9 мы использовали JAR-файлы для разработки приложений, базирующихся на Java. Однако, эта архитектура имеет несколько ограничений и недостатков. Для их устранения и внедрили модульную систему. Это нововведение является частью проекта Jigsaw, который разрабатывается для того, чтобы программисты могли разбивать программы на независимые и межпрограммные модули.

Вот некоторые из функций этой системы:

модульная JDK;
модульный исходный код Java;
модульные run-time изображения;
инкапсуляция внутренних API;
система модульной платформы;
JDK 9 поставляется с 92 модулями. Мы можем использовать их или создать свои, например:

5

try-with-resources

Как мы знаем, в Java SE 7 появилась новая конструкция обработки исключений Try-With-Resources для автоматического управления ресурсами. В Java SE 9 собираются внести несколько изменений в эту конструкцию, чтобы повысить читаемость.
Пример в Java SE 7:

void testARM_Before_Java9() throws IOException
{
BufferedReader reader1 = new BufferedReader(new FileReader("journaldev.txt"));
try (BufferedReader reader2 = reader1) {
System.out.println(reader2.readLine());
}

}

Пример в Java 9:
void testARM_Java9() throws IOException
{
BufferedReader reader1 = new BufferedReader(new FileReader("journaldev.txt"));
try (reader1) {
System.out.println(reader1.readLine());
}}
Можно заметить, что в новой версии, после try не обязательно объявлять новую переменную.

6

Реактивное программирование

В Java SE 9 появятся следующие API:

java.util.concurrent.Flow;
java.util.concurrent.Flow.Publisher;
java.util.concurrent.Flow.Subscriber;
java.util.concurrent.Flow.Processor.

public static void main(String[] args) {
PublishSubject subject = PublishSubject.create();
subject.onNext(1);
subject.subscribe(System.out::println);
subject.onNext(2);
subject.onNext(3);
subject.onNext(4);

7

Diamond оператор для анонимных классов

Вот как выглядит этот процесс в Java 8:

Box createBox(T content)
{
// Нужно поставить 'T' здесь 🙁
return new Box(content) { };
}

Вот как это выглядит в Java 9:

class inJava
{

Box createBox(T content)
{
// Java 9 выводит ‘T’, потому что этот тип обозначаемый
return new Box<>(content) { };
}

Box> createCrazyBox(Object content)
{
List > innerList = Arrays.asList(content);
// А этот тип не выводится, так как не можем его обозначить:
// return new Box<>(innerList) { };
// Вместо этого обозначаем тот тип, который нам нужен:
return new Box>(innerList) { };
}

}
Проблема в не обозначаемых (англ. non-denotable) типах, которые распознаются компилятором, а JVM — нет. (Такой случай может быть обработан компилятором, но вопрос — как корректно передать его JVM.)

8

несколько полезных методов в java.util.Optional. в JAVA9

Stream emp = getEmployee(id);

Stream empStream = emp.flatMap(Optional::stream);

9

нововведения в java.util.Stream\

Наиболее важными являются dropWhile и takeWhile методы.

jshell> Stream.of(1,2,3,4,5,6,7,8,9,10).takeWhile(i -> i < 5 ).forEach(System.out::println);

10

Расширенные аннотации @Deprecated

До Java 9 @Deprecated — просто интерфейс-маркер. Многие разработчики предлагали Oracle улучшить информирование об устаревших возможностях API. Их услышали и добавили возможности работы с устаревшими API. Например, появились инструменты для их анализа — forRemoval и since.

11

HTTP/2 клиент

Oracle планирует выкатить новый HTTP-клиент для поддержки протоколов HTTP/2 и WebSocket. Они заменяют HttpURLConnection API на новый, более производительный.
Новый API будет представлен в пакете «java.net.http». Он поддерживает как синхронный, так и асинхронный режимы.