- Один из наиболее популярных языков в мире по индексам RedMonk, TIOBE
- Длительная история развития с 1991
- Платформонезависимость (Виртуальная машина Java VM)
- Объектно-ориентированная парадигма
- Статическая типизация
- Автоматическая сборка мусора
Java Development Kit (JDK) — комплект инструментальных средств для разработки приложений на языке Java. Включает компилятор javac, утилиты, библиотеки классов Java API, документацию и примеры, среду исполнения приложений — Java Runtime Environment (JRE).
JRE включает виртуальную машину Java Virtual Machine (JVM) и cкомпилированные библиотеки классов 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
Запустить «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».
Запустится компиляция исходного кода программы в байт-код и затем исполнение приложения в JVM. Результат выполнения программы, сообщение «Hello World!», будет выводиться во встроенной командной строке.
Файл с расширением .java — это обычный текстовый файл, в котором хранится исходный код (текст) одного или нескольких классов.
Класс — это шаблон (форма), на основе которого создаются объекты.
Класс состоит из объявления и тела:
class MyClass // Объявление класса
{
// Тело класса
}Объект — это конкретная сущность в памяти компьютера, созданная на основе шаблона, которое предоставляет класс. Объект обладает: состоянием — данными, поведением — действиями, которые он может выполнять, и идентичностью — уникальным адресом в памяти.
Класс верхнего уровня — это класс, который не является вложенным, то есть он не определен внутри другого класса. Он находится непосредственно на верхнем уровне исходного кода файла .java.
// Класс верхнего уровня
class MyTopLevelClass {
//...
// Вложенный класс
class MyInnerClass { // Вложенный класс
//...
}
}Публичный класс — это класс, объявленный с модификатором доступа public.
// Публичный класс
public class MyPublicClass {
//...
}Публичный класс верхнего уровня доступен для любых других классов.
В файле .java может быть только один публичный класс верхнего уровня.
Имя файла .java должно полностью совпадать с именем такого публичного класса верхнего уровня. Например, файл .java, содержащий публичный класс верхнего уровня с именем MyPublicClass должен назваться MyPublicClass.java. При компиляции файла MyPublicClass.java компилятор создает файл с байт-кодом с именем MyPublicClass.class.
Main-класс — это публичный класс верхнего уровня, в котором есть Main-метод, который запускает поток исполнения программы.
public class MyMainClass {
// Main-метод
public static void main(String[] args) {
// Инструкции
}
}Main-метод — это специальный статический метод, который виртуальная машина JVM вызывает при запуске Java-приложения.
Сигнатура этого метода строго определена:
// Main-метод всегда имеет имя main и единственный параметр типа String[]
public static void main(String[] args) {
// инструкции
}Принято использовать стиль UpperCamelCase, т. е. каждое слово в названии начинается с заглавной буквы, а пробелы между словами отсутствуют.
- Примеры корректного именования классов:
Car,BankAccount,HttpRequestHandler - Примеры некорректного именования классов:*
car,bank_account,httpRequestHandler
Имена классов почти всегда являются существительными или существительными с определениями.
Пакет — это механизм для объединения связанных классов в единое пространство имен. Физически пакет представлен каталогом (директорией), внутри которого лежат, содержащего файлы классов.
В самом верху исходного файла .java может быть включено ключевое слово package, после которого следует идентификатор, задающий имя пакета, например:
package ru.isu.math.example; Физически такой пакет будет представлен следующей структурой папок:
ru/isu/math/example;
Файл .java с инструкцией package ru.isu.math.example
package ru.isu.math.example;
public class MyMainClass {
// ...
}должен быть размещен в каталоге, соответствующем этому пакету, т. е.
ru/isu/math/example/MyMainClass.java;
Чтобы использовать классы других пакетов необходимо их импортировать с помощью инструкций import.
package ru.isu.math.example;
import java.util.Scanner; // Импортировать класс Scanner из пакета java.util
import java.io.*; // Импортировать все классы пакета java.io
public class MyMainClass {
// ...
}Инструкция кода — команда для выполнения в Java VM. Инструкция заканчивается точкой с запятой ;.
// Объявить и инициализировать переменную целочисленного типа
int x = 1;Блок кода — набор инструкций, заключенный в пару симметричных фигурных скобок.
{
int x = 1;
x = x + 2;
}Вывод текста в командную строку осуществляется через встроенный поток вывода:
public class MyMainClass {
// main-метод
public static void main(String[] args) {
// Вывести сообщение "my text" в командную строку
System.out.println("my text");
}
}Локальная переменная — это переменная, объявленная внутри блока кода. Область видимости такой переменной ограничена блоком кода, в котором она объявлена.
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";Блок кода, следующий за условной инструкцией if, выполняется только если ее аргумент типа boolean имеет значение true.
boolean condition = true;
if (condition) {
System.out.println("The condition is true");
}Условная инструкция if-else.
char c = '0';
if (Character.isDigit(c))
System.out.println("цифра");
else
System.out.println("не цифра");Многоступенчатая инструкция if-else-if.
double x = 0.1;
if (x < 0.5) {
System.out.println("x меньше 0.5");
}
else if (x < 0.75) {
System.out.println("x меньше 0.75");
}
else if (x < 1.0) {
System.out.println("x меньше 1.0");
} else {
System.out.println("x больше или равен 1.0");
}Цикл — управляющая инструкция, которая определяет выполнение сопряженного блока кода (тела цикла) множество раз.
Цикл 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».
Чтобы считать данные из командной строки можно использовать объект типа Scanner, например:
package ru.isu.math.example;
import java.util.Scanner; // Импортировать класс Scanner
public class MyMainClass {
public static void main(String[] args) {
// Создать сканер для чтения данных из командной строки
Scanner scanner = new Scanner(System.in);
System.out.println("Введите число");
// Считать вещественное число
double x = scanner.nextDouble();
System.out.println("Вы ввели число: " + x);
}
}При запуске программы из IDE, данные вводятся во встроенной командной сроке IDE.
Для генерации случайных чисел можно использовать класс Math, например:
double x = Math.random(); // Сгенерировать число между 0 и 1.0Также можно воспользоваться объектом типа Random, например:
package ru.isu.math.example;
import java.util.Random; // Импортировать класс Random
public class MyMainClass {
public static void main(String[] args) {
// Создать генератор случайных чисел
Random rand = new Random();
// Сгенерировать случайное число в диапозоне от 0 до 49, включительно
int n = rand.nextInt(50);
}
}Чтобы вам было проще работать с командной строкой настройте переменную среды
JAVA_HOME
Для того чтобы откомпилировать класс из командной строки, необходимо перейти в директорию, в которой находится файл с исходным кодом:
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Результат дизассемблирования байт-кода выводится в командную строку.
JAR (Java Archive) — это способ упаковки и распространения Java-приложений и библиотек в виде ZIP-архива.
JAR-файл — это файл с расширением .jar, в который упакованы:
- Все скомпилированные классы проекта, организованные по своим пакетам;
- Файлы ресурсов (
*.properties,*.xml, изображения и пр.); - Метаинформация в папке
META-INF, включая файл —MANIFEST.MF; - Опционально другие JAR-файлы.
Исполняемый JAR-файл — это специальным образом сконфигурированный JAR-файл, который можно запустить на исполнение, не указывая вручную Main-класс.
Чтобы JAR-файл стал исполняемым, в манифесте META-INF/MANIFEST.MF должен быть указан Main-класс с помощью атрибута Main-Class.
Manifest-Version: 1.0
Main-Class: ru.isu.math.example.MyMainClass # JAR-файл будет запускаться при наличии скомпилированного Main-класса: ru/isu/math/example/MyMainClass.class
Задание 1-1 — 1 балл
- Разработать консольное приложение, которое позволяет пользователю конвертировать значения между различными единицами измерения длинны, веса, времени, площади или др.
- Реализовать перевод по крайней мере пяти единиц измерений.
- Реализовать пользовательский ввод значений и выбор единиц измерений.
Задание 1-2 — 1 балл
- Разработать консольную игру "Угадай число". Игровое приложение загадывает целое число в заданном диапазоне, а пользователь пытается его угадать. Игровое приложение дает подсказки: "больше" или "меньше".
- Реализовать случайную генерацию загадываемого числа.
- Реализовать пользовательский ввод диапазона загадываемых чисел.
Задание 1-3 — 1 балл
- Разработать продвинутый вариант консольной игры "Угадай число", добавив выбор уровня сложности, от которого зависит количество попыток отгадать число.
- Реализовать ограничение числа попыток через аргументы командной строки.
- Реализовать возможность начать игру заново.
- Скомпилировать Java программу в командной строке с помощью команды javac.
- Запустить Java программу в командной строке с помощью команды java.
- Дизассемблировать Java программу (байт код) с помощью команды javap.
- Собрать и запустить игру в виде JAR-файла.
- Какими особенностями обладает язык программирования Java?
- Что такое платформа разработки JDK?
- Что такое платформа исполнения JRE?
- Что такое байт-код?
- Что такое виртуальная машина JVM?
- В каком пакете находится ваш файл с исходным кодом?
- Какие классы были импортированы вами?
- Как устроен ваш Main-класс?
- Как устроен ваш Main-метод?
- Как принято именовать классы?
- Какие локальные переменные вы объявили?
- Как вы инициализировали ваши локальные переменные?
- Какие блоки кода есть в вашем исходном коде?
- Какие ветвления возможны в процессе исполнения вашей программы?
- Какие блоки вашего исходного кода выполняются повторно?
- Как вы считываете данные с командной строки?
- Как вы выводите текстовые сообщения в командной строке?
- Как вы используете аргументы командной строки?
- Как вы генерируете случайное число?
- Как устроен исполняемый JAR-файл?






