Java Development Kit (JDK) — комплект инструментальных средств для разработки приложений на языке Java. Включает компилятор javac, утилиты, библиотеки классов Java API, документацию и примеры, среду исполнения приложений — Java Runtime Environment (JRE).
JRE включает виртуальную машину Java Virtual Machine (VM) и откомпилированные библиотеки классов Java API. Позволяет запускать Java приложения на любых устройствах или операционных системах.
Существует три редакции JDK:
- SE (Standard Edition) — стандартная редакция JDK, которая используется для разработки консольных и настольных приложений.
- EE (Enterprise Edition) — редакция для разработки распределенных приложений масштаба предприятий.
- ME (Micro Edition) — редакция для разработки приложений мобильных устройств и встраиваемых систем.
Integrated Development Environment (IDE) — комплекс программных средств, используемый программистами для разработки программного обеспечения (ПО), в том числе, текстовый редактор, средства автоматизации сборки, отладчик.
Существует несколько популярных IDE для разработки Java приложений:
Для выполнение заданий необходимо установить следующие инструментальные средства:
- Oracle JDK SE или OpenJDK (версию 8 или выше).
- IntelliJ IDEA Community Edition
Main-класс — класс, в котором есть main-метод. Main-метод запускает поток исполнения приложения, вызывается вирутальной машиной Java VM:
public class MyMainClass {
// main-метод
public static void main(String[] args) {
// инструкции
}
}
Вывод текста в командную строку осуществляется через встроенный поток вывода:
public class MyMainClass {
// main-метод
public static void main(String[] args) {
// Вывести сообщение "my text" в командную строку
System.out.println("my text");
}
}
Запустить «IntelliJ IDEA». Если открыт приветственный экран «Welcome to IntelliJ IDEA», нажать кнопку «New Project». Если открыто основное окно, выбрать пункт меню «File | New | Project».
Выбрать пункт «New Project» из списка слева. Задать имя нового проекта «Name» и изменить его месторасположение «Location», если необходимо. В списке «Languages» должен быть выбран язык «Java». В списке «JDK» должна быть выбрана JDK версии 8 или выше.
В окне «Project» щелкнуть правой кнопкой мыши папку «src», выбрать пункт «New | Java Class» (Alt+Insert).
Задать полное имя класса следующим образом: «ru.isu.math.example.MyMainClass» и нажать кнопку «OK». В результате будет создан пакет «ru.isu.math.example» и класс «MyMainClass» внутри этого пакета.
package ru.isu.math.example;
public class MyMainClass {
}
Добавить в созданный класс main-метод с необходимыми инструкциями.
package ru.isu.math.example;
public class MyMainClass {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
Выбрать пункт меню «Run | Run…» или нажать кнопку «Run» на панели инструментов сверху — «зеленый треугольник» (Alt+Shift+F10). В раскрывшемся списке выбрать «MyMainClass».
Запустится компиляция исходного кода программы в байт-код и затем исполнение приложения в Java VM. Результат выполнения программы, сообщение «Hello World!», будет выводиться во встроенной командной строке.
Для того чтобы откомпилировать класс из командной строки, необходимо перейти в директорию, в которой находится файл с исходным кодом:
cd <path to the scr directory>
запустить компилятор javac, указав в качестве параметра название файла с исходным кодом с расширением:
javac -d target ru/isu/math/example/MyMainClass.java
В результате компилятор создаст файл с байт-кодом с тем же именем класса, но расширением «class» — «MyMainClass.class» в папке «target/ru/isu/math/example».
Для того чтобы исполнить откомпилированный класс необходимо перейти в директорию, в которой находится файл с байт-кодом:
cd <path to the target directory>
и запустить Java VM, указав в качестве параметра название файла с байт-кодом без расширения:
java ru.isu.math.example.MyMainClass
Когда переменная среды JAVA_HOME не настроена, следует указывать полный путь к компилятору javac и виртуальной машине java соответственно:
<path to JDK>/bin/javac -d target ru/isu/math/example/MyMainClass.java
<path to JDK>/bin/java ru.isu.math.example.MyMainClass
Для того чтобы дизассемблировать откомпилированный класс необходимо перейти в директорию, в которой находится файл с байт-кодом:
cd <path to the target directory>
запустить дизассемблер javap, указав в качестве параметра название файла с байт-кодом:
javap -c ru/isu/math/example/MyMainClass.class
Когда переменная среды JAVA_HOME не настроена, следует указывать полный путь к дизассемблеру javap:
<path to JDK>/bin/javap -c ru/isu/math/example/MyMainClass.class
Результат дизассемблирования байт-кода выводится в командную строку.
Инструкция кода — команда для выполнения в Java VM. Инструкция заканчивается точкой с запятой ;
.
// Объявить и инициализировать переменную целочисленного типа
int x = 1;
Блок кода — набор инструкций, заключенный в пару симметричных фигурных скобок.
{
int x = 1;
x = x + 2;
}
Локальная переменная — это переменная, объявленная внутри блока кода. Область видимости такой переменной ограничена блоком кода, в котором она объявлена.
public static void main(String[] args) {
int x; // Объявить локальную переменную
x = 1; // Присвоить значение локальной переменной
System.out.println("x = " + x); // Вывести значение переменной
}
При объявлении переменной необходимо указать ее тип данных. Например, если переменная имеет тип int
, то в качестве своих значений она может принимать только целые числа:
int x = 2;
Переменная, объявленная с типом double
, содержит только вещественные числа:
double y = 2.5;
Переменная с типом String, будет ссылаться на строки
String s = "my text";
Цикл — управляющая инструкция, которая определяет выполнение сопряженного блока кода (тела цикла) множество раз.
Цикл for имеет следующий синтаксис:
for (инициализация счетчика; условие завершения; итерация) блок кода
Например, следующий цикл выполняет инструкции тела десять раз:
for (int i = 0; i < 10; i++) {
System.out.println("i = " + i);
}
Аргументы командной строки передаются приложению в виде единственного параметра main-метода — массива строк:
public class MyMainClass {
public static void main(String[] args) {
// Вывести аргументы командной строки
for (int i = 0; i < args.length; i++) {
String arg = args[i];
System.out.printf("Argument %d: %s%n", i, arg);
}
}
}
При запуске приложения из командной строки аргументы указываются после имени main-класса:
java ru.isu.math.example.MyMainClass p0 p1 p2
Для того чтобы задать аргументы командной строки в IDE, необходимо создать новую конфигурацию запуска следующим образом: выбрать пункт меню «Run | Edit Configurations…», добавить новую конфигурацию, выбрав в списке слева пункт «Application», задать имя при необходимости, указать main-класс, ввести значения аргументов в поле «Program Arguments», нажать кнопку «OK».
Затем запустить программу с помощью созданной конфигурации, выбрав ее по имени в выпадающем списке слева от кнопки запуска «Run».
Для двух точек двухмерного пространства
евклидово расстояние вычисляется следующим:
Для реализации этой формулы в Java можно использовать класс Math (является частью Java API) который обеспечивает основные метаматематические операции над числами, например:
double x = 4;
Math.pow(x, 2); // Возведение x в степень 2
Math.sqrt(x); // Квадратный корень из x
Вышеприведенная формула может быть реализована следующим образом:
double d = Math.sqrt(Math.pow(x1-x2, 2) + Math.pow(y1-y2, 2));
Другой способ реализации вычисления евклидова расстояния в Java состоит в том, чтобы воспользоваться готовым методом, поставляемом в составе сторонней библиотеки, например Apache Commons Math.
Если открыт приветственный экран «Welcome to IntelliJ IDEA», нажать кнопку «New Project». Если открыто основное окно, выбрать пункт меню «File | New | Project».
В качестве системы сборки «Build system» выбрать «Maven». Изменить имя проекта «Name» и месторасположение его файлов «Location» при необходимости, а также «GroupId» и «ArtifactId» в скрытой панели «Advanced Settings».
Добавить пакет и класс с исходным кодом в папку «src/main/java». Раскрыть панель «Maven» справа, затем дважды щелкнуть пункт «install» в списке «Lifecycle». Запустится процесс сборки проекта. На панели «Run» внизу можно увидеть сообщение об успешном выполнении сборки «[INFO] BUILD SUCCESS». На панели «Project» (слева) можно увидеть результаты сборки — JAR файлы, раскрыв папку target.
Открыть файл pom.xml, выбрав его на панели структуры проекта «Project». Добавить пару тегов <dependencies></dependencies>
в конце перед закрывающимся тегом следующим образом:
<?xml version ="1.0" encoding="UTF-8"?>
<project ...>
...
<dependencies>
</dependencies>
</project>
Добавить координаты зависимости от библиотеки Apache Commons Math в раздел dependencies следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<project ...>
...
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-math3</artifactId>
<version>3.6.1</version>
</dependency>
</dependencies>
</project>
Актуальные координаты зависимости можно найти на веб-сайте mvnrepository.com.
После добавления зависимости, пакеты и классы библиотеки Apache Commons Math становятся доступными для импорта в разрабатываемые классы. Например, для того чтобы использовать готовую реализацию вычисления Евклидового пространства следует импортировать класс из данной библиотеки org.apache.commons.math3.ml.distance.EuclideanDistance как показано ниже:
package ru.isu.math.example;
import org.apache.commons.math3.ml.distance.EuclideanDistance;
public class MyMainClass {
public static void main(String[] args) {
EuclideanDistance ed = new EuclideanDistance();
double d = ed.compute(new double[]{10,20},new double[]{30.,40.});
System.out.println("Euclidean distance: " + d);
}
}
Для того чтобы собрать запускаемый, в файл pom.xml необходимо добавить следующий код:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>ru.isu.math.example.MyMainClass</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Обновить Maven проект, нажав кнопку «Reload All Maven Projects», удалить предыдущую сборку — «clean» в списке «Lifecycle» и запустить новую сборку — «install» в списке «Lifecycle».
В случае ошибки сборки «Source option 5 is no longer supported. Use 6 or later» добавьте в pom.xml версию Java в секции "properties", например, для Java 8, это будет выглядеть следующим образом:
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
Если открыт приветственный экран «Welcome to IntelliJ IDEA», нажать кнопку «New Project». Если открыто основное окно, выбрать пункт меню «File | New | Project».
В качестве системы сборки «Build system» выбрать «Gradle». Изменить имя проекта «Name» и месторасположение его файлов «Location» при необходимости, а также «GroupId» и «ArtifactId» в скрытой панели «Advanced Settings».
Добавить пакет и класс с исходным кодом в папку src/main/java. Раскрыть панель «Gradle» справа, затем дважды щелкнуть пункт «build» в списке «Tasks | build». Запустится процесс сборки проекта. На панели «Run» внизу можно увидеть сообщение об успешном выполнении сборки «BUILD SUCCESSFUL». На панели «Project» (слева) можно увидеть результаты сборки — JAR файлы, раскрыв папку build/libs.
Открыть файл build.gradle, выбрав его на панели структуры проекта «Project». Добавить строку с координатами зависимости от библиотеки Apache Commons Math:
implementation group: 'org.apache.commons', name: 'commons-math3', version: '3.6.1'
в раздел «dependencies» следующим образом:
plugins {
id 'java'
}
group 'ru.isu.math'
version '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1'
implementation group: 'org.apache.commons', name: 'commons-math3', version: '3.6.1'
}
test {
useJUnitPlatform()
}
Актуальные координаты зависимости можно найти на веб-сайте mvnrepository.com.
После этого можно импортировать пакеты и классы из библиотеки Apache Commons Math в разрабатываемые классы.
Для того чтобы собрать запускаемый, в файл build.gradle необходимо добавить следующий код:
jar {
manifest {
attributes "Main-Class": "ru.isu.math.example.MyMainClass"
}
from {
configurations.runtimeClasspath.collect {it.isDirectory() ? it: zipTree(it)}
}
}
Обновить Gradle проект, нажав кнопку «Reload All Gradle Projects», удалить предыдущую сборку — «clean» в списке «Tasks | build» и запустить новую сборку — «build» в списке «Tasks | build».
Необходимо перейти в папку с запускаемым JAR файлом.
cd <path to jar directory>
Запустить Java VM с флагом -jar, после которого указать имя JARфайла, например:
java -jar MyProject.jar
Командная строка отобразит результаты выполнения JAR файла.
Часть I
- Разработать Java программу: вычислить евклидово расстояние между заданными точками.
- Создать, собрать и запустить Java проект в IDE.
Часть II
- Скомпилировать Java программу (исходный код) в командной строке.
- Запустить файл Java программу (байт код) в командной строке.
- Считать параметры командной строки (некоторые точки евклидова пространства)
- Дизассемблировать Java программу (байт код)
Часть III
- Создать, собрать и запустить Maven проект с зависимостью «Apache Commons Math»
- Создать, собрать и запустить Gradle проект с зависимостью «Apache Commons Math»
- Платформа разработки JDK
- Платформа исполнения JRE
- Интерпретация байт-кода (Just-in-Time компиляция)
- Main-метод и main-класс
- Литералы
- Идентификаторы
- Локальные переменные
- Блоки кода
- Сборка мусора
- Управляющие инструкции
- Г. Шилдт. Java Руководство для начинающих. Глава 1
- Компилятор javac
- Создание проекта в IntelliJIDEA
- Main-класс и main-метод
- Евклидово расстояние
- Библиотека «Apache Commons Math»
- Класс Class EuclideanDistance из «Apache Commons Math»
- Maven репозиторий
- IntelliJIDEA на русском
- Maven в IntelliJ IDEA
- Gradle в IntelliJ IDEA