Java 9 Flashcards

1
Q

JShell

A

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

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

immutableList

A

Неизменяемые объекты 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} // неизменяемое отображение

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

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

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

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

A

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

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

модульная JDK;
модульный исходный код Java;
модульные run-time изображения;
инкапсуляция внутренних API;
система модульной платформы;
JDK 9 поставляется с 92 модулями. Мы можем использовать их или создать свои, например:
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

try-with-resources

A

Как мы знаем, в 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 не обязательно объявлять новую переменную.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

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

A

В 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);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

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

A

Вот как выглядит этот процесс в 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.)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

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

A

Stream emp = getEmployee(id);

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

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

A

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

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

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

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

HTTP/2 клиент

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly