Особенности работы с Java последних версий

Содержание

Особенности java последних версий

Современные версии Java имеют свои особенности, комплекты разработчика претерпели изменения

  • модульная система (java 9)
  • оболочка jshell
  • условия рецензирования

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

Фактически модуль представляет группу пакетов или ресурсов, объединенных в одно целое и к которым можно обращаться по имени модуля.

Модуль состоит из группы пакетов. Также модуль включает список все пакетов, которые входят в модуль, и список всех модулей, от которых зависит данный модуль. Дополнительно (но необязательно) он может включать файлы ресурсов или файлы нативных библиотек.

Модуль размещается в отдельном каталоге на диске, имеющий название такое же, как и у модуля.

В его состав входит специальный служебный файл module-info.java:

module имя_модуля {
}

Пример простого модуля

В модуль должен обязательно входить хотя бы один пакет. Рассмотрим следующую структуру:

└── hello
    ├── greet
    │   ├── Hello.class
    │   └── Hello.java
    ├── module-info.class
    └── module-info.java

В модуле по имени hello расположен пакет greet, в котором определен класс Hello со следующим содержимым:

package greet;

class Hello {
    public static void main(String[] args) {
        System.out.println("Hello!");
    }
}

Мы компилируем и запускаем проект, находясь в каталоге, родительском для модуля:

javac hello/module-info.java hello/greet/Hello.java
java --module-path hello --module hello/greet.Hello

Использование JavaFX в последних версиях

С появлением версии Java 11, пакет JavaFX перестал быть стандартной частью JDK.

Его нужно установить отдельно с этого адреса:

https://gluonhq.com/products/javafx

Сначала необходимо скачать и распаковать пакеты. Далее, переносим пакет в каталог /Library/Java, где на маке хранятся все jdk:

sudo mv ~/Downloads/javafx-sdk-11.0.2 /Library/Java/`

Создадим пробный файл HelloFX.java:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class HelloFX extends Application {

    @Override
    public void start(Stage stage) {
        String javaVersion = System.getProperty("java.version");
        String javafxVersion = System.getProperty("javafx.version");
        Label l = new Label("Hello, JavaFX " + javafxVersion + ", 
                            running on Java " + javaVersion + ".");
        Scene scene = new Scene(new StackPane(l), 640, 480);
        stage.setScene(scene);
        stage.show();
    }
    public static void main(String[] args) {
        launch();
    }
}

Устанавливаем значение переменной:

export PATH_TO_FX=/Library/Java/javafx-sdk-11.0.2/lib

Теперь можно компилировать:

javac --module-path $PATH_TO_FX --add-modules javafx.controls HelloFX.java

А теперь можно запускать:

java --module-path $PATH_TO_FX --add-modules javafx.controls HelloFX

Автор: Anton Shtanyuk

Created: 2019-07-22 Mon 14:46

Emacs 26.1 (Org mode 9.1.14)

Validate