Язык программирования Java и Java-платформа

1 Теоретическая часть

1.1 Основные особенности языка программирования Java и Java-платформы

Под Java понимают:

  • язык программирования
  • программную платформу

Работа над языком Java началась с 1990 г. Первым названием языка было Oak. Название Java появилось в 1995 г, первая официальная версия (Java 1.0) была выпущена 21 января 1996 года. Язык Java обладает следующими основными свойствами:

  • кросс-платформенный (синтаксис языка и набор стандартных средств не зависит от определенной операционной системы и типа компьютера);
  • объектно-ориентированный;
  • поддерживает строгую типизацию (ограниченное количество примитивных типов, усовершенствованные правила преобразования типов);
  • легкий в освоении и разработке;
  • обеспечивает повышенную надежность благодаря отсутствию указателей и обязательной проверке виртуальной машиной кода загружаемых классов и действий, которые выполняет программа;
  • приспособлен к разработке интернет-приложений.

Для предотвращения многих типичных ошибок, присущих программам на С++, используется механизм автоматической сборки мусора (garbage collection). Этот механизм автоматически подсчитывает количество ссылок на каждый объект Java. Когда на объект больше не указывает ни одна ссылка, он удаляется из памяти, освобождая ресурсы для программы.

Основным сходством c языком С++ является во многом похожий синтаксис. Вместе с тем, Java обладает свойством кросс-платформенности (переносимости), применяет интерпретатор байт-кода, использует иную объектную модель, то есть иную совокупность объектно-ориентированных концепций и набора средств описания классов и связей между ними, а также способов создания объектов, и др.

В отличие от многих других языков и систем программирования, исходный код Java компилируется не непосредственно в машинные команды, а в так называемый байт-код. Набор команд этого кода должен быть интерпретирован для выполнения на конкретном компьютере под управлением конкретной операционной системы. Другими словами, требуется специальная программная платформа.

Программная платформа в общем случае включает набор программных средств, обеспечивающих выполнение других программ. Программные средства, составляющие программную платформу, как правило, имеют стандартный набор функций, технически по-разному реализованных на различных аппаратных платформах и в разных операционных системах. Java-платформу составляют виртуальная машина Java и стандартные классы.

Виртуальная машина Java (Java Virtual Machine) – программа, интерпретирующая и выполняющая байт-код, предварительно созданный из исходного текста программы компилятором Java.

Примечание. Использование интерпретации негативно влияет на производительность приложений. Альтернатива интерпретации - JIT-компиляция (just-in-time compilation, компиляция "на лету"), реализованная в некоторых версиях виртуальных машин Java. Байт-код компилируется непосредственно во время выполнения работы программы.

Кроме языка Java, перечисленные ниже языки также созданы для разработки Java-приложений. Вот некоторые из них:

  • Clojure
  • Processing
  • Groovy
  • Scala
  • Gosu
  • Fantom
  • Kotlin
  • JRuby
  • Jython
  • Rhino

Кроме того, ряд ранее созданных универсальных языков также обеспечивает создание приложений для JVM. Ниже приводится список некоторых из них:

  • Ada
  • AWK
  • BASIC
  • BBx
  • Boo
  • C
  • COBOL
  • ColdFusion
  • Common Lisp
  • Component Pascal
  • Erlang
  • Forth
  • Go
  • JavaScript
  • Logo
  • Lua
  • Oberon-2
  • OCaml
  • Object Pascal
  • Pascal
  • PHP
  • Prolog
  • Python
  • REXX
  • Ruby
  • Scheme
  • Tcl

Количество языков, ориентированных на JVM очень быстро расширяется. Продолжают создаваться новые языки с поддержкой JVM.

Концептуально платформа Java реализована на нескольких уровнях, в зависимости от назначения программных приложений:

  • Java Platform, Standard Edition, (Java SE) – версия платформы Java, предназначенная для создания и выполнения приложений, рассчитанных на индивидуальное пользование;
  • Java Platform, Enterprise Edition, сокращенно Java EE – платформа, которая реализует серверную архитектуру для задач средних и крупных предприятий;
  • Java ME (Micro Edition) – платформа Java для устройств, с ограниченными ресурсами (сотовых телефонов, карманных компьютеров и т.п.);
  • Java Card – версия Java-платформы для устройств с очень ограниченными вычислительными ресурсами; основное назначение продукта – применение в смарт-картах.

Примечание: в версии Java 7 была добавлена платформа Java FX – платформа и набор инструментов для создания "насыщенных" интернет приложений (Rich Internet Applications); начиная с версии Java 8 средства Java FX рассматриваются как подсистема в рамках Java SE.

Технически средства Java SE реализованы на двух уровнях:

  • Java Runtime Environment (JRE) – исполнительная среда Java. Физически это набор программных средств, включающих виртуальную машину Java и библиотеку классов.
  • Java Development Kit (JDK) – бесплатно распространяемый комплект разработчика приложений на языке Java, включающий в себя компилятор Java (javac), стандартные библиотеки классов Java, примеры, документацию, различные утилиты и исполнительную среду Java (JRE).

Каждая новая версия Java обладает новыми возможностями по сравнению с предыдущей. Java версии 1.2 (1998 г.) настолько превосходила платформу 1.1, что, начиная с нее, все последующие версии назвали платформой Java 2. Начиная с JDK 1.5 (2004 г.), принято говорить о Java 5. Версия Java 6 (JDK 1.6, 2006 г.) отличается от предыдущей преимущественно расширенными библиотеками классов. Версии Java 7 (2013 г.) и Java 8 (2014 г., первая из версий, вышедшая под руководством Oracle), помимо расширенных библиотек классов, предоставляют большое количество новых удобных синтаксических конструкций.

В 2017 г. вышла версия Java SE 9, реализующая дополнительный уровень модульности, ранее отсутствовавший в Java. В 2018 г. вышли десятая и одиннадцатая версии Java SE. В настоящее время Java SE 11 и Java 8 являются официально поддерживаемыми версиями.

1.2 Установка Java

1.2.1 Установка JRE

Для того чтобы приложение Java могло быть выполнено на конкретном компьютере, на нем необходимо установить JRE или JDK. Установка JRE достаточна в большинстве случаев, если речь идет не о разработке, а только о запуске приложений. Если работа осуществляется под управлением операционной системы Windows, установка осуществляется следующим образом. С главной страницы сайта java.com следует перейти по ссылке Download (Загрузить). На следующей странице следует согласиться с условиями лицензионного соглашения, нажав соответствующую кнопку, после чего начинается загрузка программы установки Java для автоматически определенной операционной системы. Во многих случаях вариант инсталляции следует выбирать вручную. Для этого используется ссылка See all Java downloads (Просмотрите все загружаемые файлы Java). На открывшейся странице выбираем и загружаем инсталлятор для нашей операционной системы (рекомендуется online-версия).

Перед установкой JDK целесообразно закрыть браузеры и другие программы, которые могут использовать Java. В процессе инсталляции можно сменить каталог установки (Change destination folder). JRE умолчанию устанавливается в папку Program Files\Java. Если на компьютере ранее были установлены старые версии JRE, установщик предложит их удалить. Удаляемые версии можно выбрать из списка. Обычно после инсталляции в браузере открывается страница, с которой можно проверить версию Java.

После завершения можно проверить успешность установки, набрав в командной строке (Start | Run... cmd) следующую команду:

java -version

В консольном окне будет выведена версия JRE.

1.2.1 Установка JDK

Установленная виртуальная машина Java (JRE) обеспечивает выполнение большинства Java-приложений. Однако для разработки приложений, а также для в некоторых случаях для выполнения программы (например, при генерации и компиляции классов на лету) необходимо загрузить и установить JDK. Это также можно сделать с сайта java.com, перейдя по ссылке http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html, найдя раздел Java SE 8u191 / Java SE 8u192 и нажав кнопку DOWNLOAD возле строчки JDK. На следующей станице принимаются условия лицензионного соглашения и выбирается программа установки для используемой операционной системы.

Рекомендуется скачать архив с JDK и раскрыть его в удобном месте вручную. Это позволит вам работать с JDK различных версий.

1.3 Общая структура программы

В Java нет глобальных переменных, функций или процедур. Это сделано с целью предотвращения конфликтов имен. Программа состоит из одного или более описаний классов с полями (элементами данных) и методами (функциями-элементами). Классы в Java могут иметь модификатор public. Такие классы называются открытыми (публичными). Один из открытых классов должен определять метод main(), с которого начинается выполнение программы. Код определения классов следует хранить в текстовых файлах с расширением .java. Имя класса (без расширения) должно совпадать с именем публичного класса, содержащегося в этом файле. Отсюда следует, что в одном исходном файле может находиться один открытый класс, не являющийся вложенным. Классов без модификатора public в одном исходном файле может быть любое количество.

Каждый класс компилируется в отдельный файл, содержащий байт-коды и имеющий расширение .class. В отличие от других языков программирования, скомпилированный код представляет собой не команды процессора, а байт-коды.

Java не предусматривает статического компоновки кода в файл, который может быть выполнен (.exe). Компоновка (получение байт-кода из разных файлов с расширением .class и интерпретация кода) осуществляется динамически.

Примечание. Существует также так называемая AOT-компиляция (ahead-of-time compilation, компиляция до начала выполнения). Такая компиляция позволяет преобразовать .class-файл, полученный обычным Java-компилятором, в выполняемый код конкретной операционной системы (т. н. native code). Компилятор такого типа появился в стандартном JDK начиная с версии Java 9.

Для удобства развертывания классы, необходимые для выполнения приложения, можно объединить в специальный архив (jar).

В Java нет препроцессора и заголовочных файлов, типичных для C и C++.

1.4 Пример простейшей программы

Изучение языков программирования традиционно начинается с создания приложения "Hello, World!" ("Привет, мир!"). Создаем произвольный каталог, например, C:\First и простейшим редактором создаем в нем файл Hello.java следующего содержания:

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

В первой строчке кода создается класс с именем Hello и открывается фигурная скобка, после которой расположено тело класса. Следующая строчка – заголовок функции main(). С тела этой функции начинается выполнение программы. Строка "System.out.println("He`llo, World!");" – единственная выполняемая инструкция программы. С помощью стандартной функции println() объекта out осуществляется вывод строки "Hello, World!" на стандартное устройство вывода (в консольное окно). В свою очередь объект out описан как статическое поле стандартного класса System. Далее идут две строки, в которых закрываются открытые ранее фигурные скобки.

Все дальнейшие действия будем производить в окне командной строки (cmd). Сначала необходимо осуществить компиляцию. В простейшем случае достаточно вызвать компилятор Java, который находится в подкаталоге bin папки, содержащей установленную версию JDK. Для упрощения работы можно сразу перейти в эту папку, набрав, например такую команду:

cd c:\Program Files\Java\jdk1.8.0_51\bin

На конкретном компьютере путь может быть иным. Также может отличаться версия JDK. Если переход произошел успешно, можно выполнить следующую команду:

javac c:\First\Hello.java 

Если компиляция прошла успешно, в той же папке C:\First появится файл Hello.class, который содержит байт-код, полученный после компиляции. Не выходя из режима командной строки, осуществляем выполнение приложения с помощью следующей команды:

java -cp c:\First Hello

Получим в консольном окне ожидаемое приветствие. Можно было также вывести приветствие, используя символы кириллицы.

Примечание: в последней команде после опции -cp (classpath) задаем путь к интересующему нас классу (C:\First) , а затем указываем имя класса Hello.

1.5 Пакеты

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

Пакеты могут вкладываться друг в друга. Каждый класс Java находится в каком-либо пакете. Имена пакетов должны совпадать с именами папок, в которых находятся файлы исходного текста (или скомпилированные файлы).

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

package package_name;

Если имя пакета пропущено, считается, что код относится к безымянному пакету (пакету по умолчанию), границы которого определяются текущей папкой. Использование безымянного пакета нежелательно, а в больших проектах недопустимо, так как не существует способов обращения к классам такого пакета извне.

Если перед именем класса, созданного в пакете, не указан спецификатор public, класс считается видимым только в пределах его пакета.

Для обеспечения доступа к классу или интерфейсу из другого пакета есть три варианта:

  1. Использование полного имени.
  2. Импорт класса или интерфейса (с использованием ключевого слова import).
  3. Импорт всего пакета (с использованием ключевого слова import).

Следующий пример демонстрирует все перечисленные варианты.

import java.io.FileReader;  // Импорт класса (интерфейса)
import java.util.*;         // Импорт всего пакета

public class TestClass {
    public static void main(String[] args) {
        java.io.FileWriter fw;  // Полное имя
        FileReader fr;          // Прямой  доступ к импортированному имени
        ArrayList al;           // ArrayList входит в пакет java.util
        . . .
    }
}

Импорт всех средств пакета менее рекомендован, чем импорт отдельных имен, так как второй подход снижает вероятность возникновения конфликтов имен. Если же, тем не менее, конфликт имен имеет место, предпочтение отдается именам из текущего пакета.

Стандартный пакет java.lang содержит классы с очень полезными функциями и не требует явного подключения (всегда подключается автоматически).

Недостатком приведенного ранее примера (Hello, World!) является использование пакета по умолчанию. Лучшим решением будет поместить класс в какой-либо пакет, например, mypack. В папке C:\First создаем подкаталог mypack и помещаем в него файл Hello.java, добавив в текст одну строчку (package mypack;):

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

Исходный код необходимо скомпилировать. Для этого указываем измененный путь:

javac c:\First\mypack\Hello.java

При запуске приложения точка входа не изменится, однако перед именем класса через точку нужно будет указать имя пакета:

java -cp c:\First mypack.Hello

Приято использовать более содержательные имена пакетов. Можно создавать вложенные пакеты, соответственно создавая вложенные папки. Кроме того, желательно обеспечить уникальность имен пакетов. Для обеспечения уникальности можно использовать обращенное доменное имя. Например, если доменное имя автора author.com, то следует использовать пакет com, далее подпакет author и далее подпакеты, соответствующие различным задачам. Далее в примерах будет использоваться пакет ua.inf.iwanoff, являющийся обращенным доменным именем автора. В этом пакете будут создаваться подпакеты.

1.6 Обзор существующих сред разработки

Не смотря на то, что Java-приложение можно создать, скомпилировать и загрузить на выполнение, используя утилиты командной строки, более удобную и производительную работу обеспечивает использование интегрированной среды разработки (Integrated Development Environment, IDE).

В функции IDE входит:

  • обеспечение создания и редактирования исходного кода
  • выполнение трансляции кода
  • автоматизация сборки приложений
  • выполнение и отладка приложений

Современные IDE также обеспечивают визуальные средства проектирования интерфейса пользователя, контроль версий, поддержку объектно-ориентированного проектирования и т. д. Существует большое количество IDE для Java-разработки. Среди них наиболее популярны такие:

  • Eclipse – свободно используемая IDE разрабатываемая и поддерживаемая некоммерческой организацией Eclipse Foundation
  • MyEclipse – коммерческий вариант Eclipse
  • IntelliJ IDEA – популярная среда, разрабатываемая компанией JetBrains и доступная как в коммерческом (Ultimate Edition), так и в некоммерческом варианте (Community Edition)
  • NetBeans – свободная IDE, поддерживаемая и спонсируется компанией Oracle; разработка NetBeans осуществляется независимым сообществом разработчиков (NetBeans Community) и компанией NetBeans Org.
  • JDeveloper – бесплатная интегрированная среда разработки программного обеспечения, разработанная корпорацией Oracle
  • JBuilder – коммерческая среда разработки на языке Java компании Embarcadero

Все интегрированные среды имеют свои достоинства и недостатки. Интегрированная среда IntelliJ IDEA по мнению большинства разработчиков предоставляет наиболее удобные средства автозаполнения, рефакторинга и отладки, эффективно работает с контекстом кода. Недостатком IntelliJ IDEA долгие годы была коммерческая лицензия на ее использование, однако с появлением Community Edition этот недостаток почти нивелирован, в особенности, если речь не идет о разработке Java EE.

1.7 Среда программирования Eclipse

1.7.1 Платформа Eclipse и среда программирования

Eclipse - многоязыковая среда разработки программного обеспечения. Возникновению Eclipse предшествовало появление среды разработки IBM VisualAge (1984 год). Первая версия (Eclipse 1.0) вышла в ноябре 2001 года. Среда была рассчитана на разработчиков Java, но особенностью Eclipse изначально была возможность расширения функциональности через добавление плагинов. Это позволило использовать Eclipse для разработки на других языках программирования, в частности, C++, C#, PHP и т.д.. Программные средства Eclipse написаны в основном на Java.

Eclipse является свободным программным обеспечением. Некоммерческая организация Eclipse Foundation выпускает версии реализации программы. Текущая версия программы - Eclipse 2018-09.

Среду программирования можно загрузить со страницы http://www.eclipse.org/downloads/ сайта Eclipse Foundation. Выбираем линк Eclipse IDE for Java Developers и тип операционной ситемы. После загрузки файла eclipse.zip содержимое архива нужно раскрыть на жесткий диск. Eclipse не требует процедуры инсталляции.

С каждым вариантом использования Eclipse связана так называемая перспектива. Перспективой в терминологии Eclipse называется определенная конфигурация платформы, которая определяет набор и расположение необходимых окон, меню, горячих клавиш и других элементов интерфейса. Примеры перспектив - Java (для разработки программ на Java), Debug (для отладки программного кода по шагам), C++ (для разработки программ на C++) и др.

В процессе первой загрузки Eclipse предлагается установить так называемое рабочее пространство. Рабочее пространство представляет собой контейнер для проектов. Кроме этого, в нем содержатся настройки, сохраняемые компонентами Eclipse, и вспомогательные данные. Физически рабочее пространство представляет собой папку, подкаталоги которой соответствуют проектам, а подкаталог .metadata используется как хранилище настроек и данных.

После первой загрузки программы Eclipse Juno на экране появляется стартовое окно интегрированной среды ("Welcome to the Eclipse IDE for Java Developers") с кнопками "Overview", "What's New", "Samples", "Tutorial" и "Workbench". Далее можно закрыть окно "Welcome" и, если надо, изменить рабочее пространство. Для того чтобы начать работу с Java-проектом, необходимо выбрать соответствующую перспективу (Window | Open Prespective | Java). Чаще всего эта перспектива выбрана по умолчанию. Теперь можно создавать новый проект.

Если рабочее пространство было создано раньше, раскрывается рабочее окно, которое содержит подокна просмотра и редактирования ресурсов в соответствии с выбранной ранее перспективой. При работе с Java-проектами зачастую необходимо работать с подокном редактирования кода (в средней части окна Eclipse), а также с деревом проектов Package Explorer (слева) и некоторыми подокнами (Problems, Console) в нижней части. Можно продолжить работу над предшествующими проектами, или создать новый.

1.7.2 Создание нового проекта

Для создания нового проекта следует применить функцию File | New | Java Project главного меню среды Eclipse. Далее следует набрать имя проекта (например, First) и нажать Finish., оставив опции по умолчанию. В подокне Package Explorer появится новый пустой проект.

Примечание: Опция Use project folder as root for sources and class files предусматривает, что исходные и скомпилированные файлы содержатся в общих папках. Опция Create separate folders for sources and class files предусматривает создание двух отдельных параллельных иерархий папок исходных и скомпилированных файлов. Эта опция выбрана по умолчанию является рекомендованной.

1.7.3 Создание простейшей программы на языке Java

Все функции в языке программирования Java реализуются в контексте классов. Необходимо спроектировать класс, который должен по крайней мере содержать статический метод main(), с которого начинается выполнение программы на Java.

Функция File | New | Class осуществляет активизацию мастера классов. С помощью мастера классов к проекту добавляется новый файл с исходным текстом, который содержит описание открытого класса. Для будущего класса надо определить имя пакета, в который он входит, имя класса, уровень доступа (public или default, иногда дополнительно abstract и final) и имя базового класса (Superclass). Создание консольной программы предусматривает выбор базового класса java.lang.Object - общего предка всех классов Java.

Для создания простейшего тестирующего класса надо включить опции "public" (генерация класса, методы которого могут использоваться за пределами пакета) и "public static void main(String[] args)" (генерация статического метода main()). В более сложных программах классу может быть нужно перекрытие конструкторов базового класса (опция "сonstructors from superclass"). В нашем случае конструктор вообще не нужен, так как класс не будет иметь нестатических данных. Если базовым классом не является абстрактный класс, отсутствует необходимость в перекрытии абстрактных методов (опция "Іnherited abstract methods"). Опция "Generate comments" (генерация комментариев) используется для автоматического создания программной документации.

Предположим, в проекте First создан пакет с названием ua.inf.iwanoff и выбрано имя класса TestClass. После нажатия кнопки ОК создается файл TestClass.java, который содержит следующий код:

package ua.inf.iwanoff;

public class TestClass {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

    }

}

Примечание. Если вы предпочитаете использовать пробелы вместо символов табуляции, до герерации кода необходимо выполнить определенные настройки - в окне Preferences (позиция Window | Preferences главного меню) выбрать Java | Code Style | Formatter, далее создать новый профайл (New... и выбрать любое имя), далее нажать Edit... и в ветке Indentation дерева настроек указать Tab policy: Spaces only. Аналогично можно настроить другие опции форматирования и сохранить созданный профайл.

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

package first;

public class TestClass {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("Привет, мир!");
}
}

Для того, чтобы выполнить программу, в простейшем случае следует воспользоваться функцией меню Run | Run, или клавшной комбинацией Ctrl-F11. Можно также воспользоваться функцией Run As | Java Application контекстного меню. В нижней части окна появляется специальное консольное подокно (Console), в котором отображаются результаты работы программы. Если консольное окно отсутствует вообще, его можно сделать видимым с помощью функции главного меню Window | Show View | Console.

Если необходимо установить дополнительные параметры, например опции командной строки, следует воспользоваться функцией главного меню Run | Run Cofigurations.... Среди конфигураций выбирают "Java Application". После нажатия кнопки New контекстного меню меняется содержимое окна, где выбирают имя проекта (Project) и главного класса (Main class). Далее можно закрыть окно или осуществить выполнение программы (Run).

Если проект был создан ранее на другом компьютере, средствами операционной системы его можно скопировать в папку, которая представляет рабочее пространство, а потом импортировать проект с помощью функции импорта (File | Import... General | Existing Project into Workspace). Импорт не предусматривает физического копирования файлов проекта.

1.7.4 Отладка программы

Средства отладки используются для поиска и исправления ошибок времени выполнения. Для запуска этих средств используется специальная перспектива - Debug, которую можно раскрыть с помощью функции Window | Open Prespective | Debug. Далее в исходном тексте расставляются точки прерывания (функция Run | Toggle Line Breakpoint или Ctrl-Shift-B). Для выполнения программы по шагам используются функции Step Іnto (F5, отладка с заходом в функции) и Step Over (F6, без захода в функции).

Если поместить курсор мыши на скалярную переменную, отладчик покажет ее значение в маленьком окошке.

Прекратить выполнение можно с помощью функции Run | Resume (F8).

1.8 Интегрированная реда программирования IntelliJ IDEA

1.8.1 Установка IDE IntelliJ IDEA и создание первого проекта

Интегрированная среда разработки IntelliJ IDEA - приложение, полностью написанное на Java. Для работы IDE Java должна быть заранее установлена на компьютере. Для компиляции классов IntelliJ IDEA требуется JDK.

Программу установки среды программирования IntelliJ IDEA можно скачать со страницы загрузки сайта компании JetBrains. Выбираем вариант Community Edition. После загрузки инсталлятора его нужно запустить на выполнение. Нажимая кнопку Next, проходим по страницам мастера установки, выбирая папку для установки (можно оставить по умолчанию), ассоциируя файлы с новой программой (также можно оставить по умолчанию) и выбирая группу в меню Пуск. На последней странице мастера можно сразу выбрать опцию Run IntelliJ IDEA Community Edition и нажать Finish.

После установки IntelliJ IDEA в папке пользователя (Users\имя_пользователя) создается каталог .IdeaIC14, содержащий два подкаталога - config (индивидуальные настройки пользователя) и system (временные файлы IntelliJ IDEA)

После первого запуска среды нам предлагают окно, в котором можно выбрать вариант импорта настроек предыдущей версии. Если IntelliJ IDEA устанавливается впервые, никакие опции импортировать не нужно. В следующем окне выбираются темы интерфейса пользователя (IntelliJ и Dracula). Тема выбирается по своему усмотрению. В окне выбора плагинов все оставляется по умолчанию.

В окне Welcome to IntelliJ IDEA при первом запуске логично создать новый проект (Create New Project). Далее для проекта нужно выбрать Project SDK. Нажав кнопку New... против соответствующей строчки, выбираем ранее установленный JDK и указываем путь к нему.

В мастере New Project выбираем опцию Create project from template, а затем выбираем шаблон Command Line App (консольное приложение). На следующей странице вводим имя проекта (Project name), папку размещения проекта (Project location) и имя базового пакета (Base package). В качестве имени базового пакета лучше всего выбрать обращенное доменное имя (у автора это ua.inf.iwanoff). Далее нажимаем кнопку Finish. Открывается главное окно IDE, в области редактирования которого можно увидеть такой код:

package ua.inf.iwanoff;

public class Main {

    public static void main(String[] args) {
    // write your code here
    }
}

Примечание. По умолчанию для создаваемых проектов используется кодировка, принятая в операционной системе (например, Windows-1251). Для обеспечения корректной работы с символами кириллицы целесообразно выбрать кодовую таблицу UTF-8. Это можно сделать с помощью кнопки (ссылки), расположенной в нижней правой части окна и озаглавленной именем текущей кодировки. Далее выбираем из выпадающего списка UTF-8. Если исходный код уже содержал символы, требующие перекодировки, появляется окно, в котором предлагается возможный набор связанных с этим действий. Нужно нажать кнопку Convert.

В теле функции main() вместо комментария можно разместить вывод какого-либо сообщения, например,

System.out.println("Привет, мир!");

Для запуска приложения на выполнение можно воспользоваться функцией главного меню Run | Run 'Main', зеленой стрелкой в панели инструментов или клавишной комбинацией Shift+F10. В случае успешной компиляции исходного класса осуществляется выполнение программы. В нижней части главного окна появляется специальная область, имитирующая работу в консольном окне.

1.8.2 Элементы графического интерфейса пользователя IDE IntelliJ IDEA

Главное окно IDE включает как традиционные для всех современных интегрированных сред элементы пользовательского интерфейса (меню, панель инструментов, главное окно редактора, строка состояния), так и специфичный для среды IntelliJ IDEA набор инструментальных окон (Tool Windows). Инструментальные окна имеют кнопки вызова, расположенные по периметру рабочей области, с пиктограммой, подписью и числовым обозначением (последнее не обязательно). Если на эти кнопки нажать, рядом с ними откроются окошки с некоторой вспомогательной функциональностью.

В стандартном главном меню бросается в глаза отсутствие функции сохраниения. Автосохранение происходит при запуске приложения или при выходе. Подменю главного меню предлагают мощные средства управления кодом (Navigate, Code, Analyze и Refactor). В частности,

В строке, размещенной непосредственно после строки меню, показан путь к редактируемому файлу (внутри проекта), а также, наиболее часто используемые функции (выбор приложения для запуска, кнопки запуска и отладки, получения структуры проекта и поиска).

1.8.3 Использование шаблонов кода и горячих клавиш

Среда IntelliJ IDEA существенно облегчает набор исходного текста за счет использования шаблонов кода (Live Templates). Вызвать соответствующую функцию можно через главное меню (Code | Insert Live Template...) или с помощью клавишной комбинации Ctrl-J. Появляется список шаблонов кода. Список зависит от контекста (расположения курсора в окне редактора). Наиболее полезные из них приведены в таблице:

Последовательность символов Программный код
psvm public static void main(String[] args)
St String
psf public static final
fori for (int i = 0; i < ; i++)
itar
for (int i = 0; i < args.length; i++) {
    String arg = args[i];
ifn
if ( == null) {
     
}
iter
for (Object o : ) {
    
}
sout System.out.println();

Шаблоны можно также просто набирать в коде соответствующей последовательностью букв. После появления окошка подсказки подтверждаем ввод и получаем соответствующий текст в окне редактора.

Редактор IntelliJ IDEA поддерживает большое количество клавишных комбинаций для редактирования. Кроме стандартной работы с буфером, поддерживается, например, удаление строки (Ctrl-Y) , дублирование строки или блока (Ctrl-D), переход к точкам прерывания (Ctrl+номер_точки_прерывания) , комментирование блока (Ctrl+/) и т. д.

Комбинация Ctrl-пробел позволяет получить список возможных элементов объекта, параметров метода и т. д. Клавишная комбинация Ctrl-Shift-пробел фильтрует список, оставив только варианты ожидаемого типа.

Используя комбинацию Ctrl+Alt+L, можно отформатировать код.

Полезная клавишная комбинация Alt-Enter позволяет получить набор вариантов исправления возникшей ошибки (например, добавить директиву import, сгенерировать пустой метод и т. д.).

Перечень всех клавишных комбинаций можно получить в окне Settings, далее Keymap. (File | Settings...) .

1.8.4 Использование отладчика

Запуск приложения на отладку может осуществляться с помощью функции главного меню Run | Debug 'Main', кнопкой с изображением зеленого жука в панели инструментов или клавишной комбинацией Shift+F9. В простейшем случае для отладки программы достаточно указать точку прерывания (кликнуть мышью на вертикальной серой полоске слева от необходимой строчки) и запустить программу на отладку. Выполнение программы остановится на выбранной строке, после чего промежуточные значения переменных можно посмотреть в области вывода Variables или просто подведя курсор к переменной в программном коде. В меню Run во время отладки доступны различные функции выполнения программы по шагам, с заходом (F7) и без захода (F8) в вызываемые функции.

1.8.5 Структура проекта

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

Папка src содержит пакеты с исходными текстами проекта. Папка out содержит результат компиляции исходных кода. Внутри папки out находится подкаталог production, в нем - Проект, далее структура папок повторят аналогичную структуру папок подкаталога src.

Дополнительные опции проекта, связанные с компиляцией, кодировкой и т.д., представлены файлами скрытой папки .idea.

1.9 Использование репозитория сервиса GitHub

При разработке крупных проектов возникает необходимость в дополнительных средствах контроля за различными версиями артефактов, в частности, исходного кода. Необходимо обеспечить возможность доступа к предыдущим версиям документов с целью трассировки изменений. Для решения этих задач, а также для обеспечения коллективного доступа к проекту, используются системы контроля версий - специальное программное обеспечение для управления изменяющимися документами и предоставления доступа к этим документам. Ежедневный цикл взаимодействия с системой контроля версий включает обновление рабочей копии, модификацию проекта и фиксацию изменений. При работе над проектом можно создать несколько ветвлений (branches, forks) для различных вариантов решений, а затем осуществить слияние версий.

Системы контроля версий могут быть централизованными и распределенными. В централизованных системах хранение версий осуществляется на специальном сервере. Пример централизованной системы - Subversion (SVN). В распределенных системах имеется локальная копия репозитория и обеспечивается согласование данных с репозиторием на удаленном компьютере. Git представляет собой открытую систему контроля версий. Для проектов с открытым кодом использование Git бесплатно.

GitHub это социальный репозиторий для проектов с открытым исходным кодом, использующих Git для контроля версий исходного кода. Для создания репозиториев следует зарегистрироваться на сайте https://github.com.

Для работы с GitHub в IntelliJ IDEA предварительно нужно установить систему Git. Необходимое программное обеспечение можно скачать по адресу https://git-scm.com/downloads, выбрав версию для своей операционной системы.

Установив необходимое программное обеспечение, следует выполнить некоторые настройки. Для этого следует запустить программу Git Bash, в командной строке которой указываем имя и адрес пользователя, указанные ранее при регистрации на GitHub:

git config --global user.name "имя_пользователя"
git config --global user.email адрес_пользователя@почта

Создается файл .gitconfig, содержащий соответствующие настройки.

В среде IntelliJ IDEA выполняем настройку Git (File | Settings..., далее Version Control | Git) - указываем путь к выполняемому файлу git.exe, например, C:\Program Files\Git\bin\git.exe. В настройках GitHub (Version Control | GitHub) указываем Host - github.com, далее имя пользователя и пароль.

Теперь проект можно скопировать на GitHub, воспользовавшись функцией меню VCS | Import into Version Control | Share Project on GitHub.

В любое другое время, закрыв все проекты, можно воспользоваться функцией Check out from Version Control на стартовом окне IntelliJ IDEA. Далее выбираем GitHub, в окне Clone Repository уточняем папку размещения проекта, далее подтверждаем его открытие.

После внесения изменений в код с помощью функции меню VCS | Commit Changes осуществляем обновление проекта в репозитории.

2 Примеры программ

2.1 Среднее арифметическое

Необходимо реализовать программу задачи определения среднего арифметического.

Внутри функции main()новой программы можно создать две переменные, например, a и b, прочитать их значения с клавиатуры и определить значение c, являющееся их средним арифметическим.

В первой строке функции main() для ввода с клавиатуры данных нужно создать объект класса Scanner:

Scanner scanner = new Scanner(System.in);

Определение (описание) переменной, можно объединять с присваиванием начального значения (инициализацией). В данном случае создаются и инициализируются три переменных типа double. Этот тип используется для представления вещественных данных повышенной точности. Определение переменных должно завершаться точкой с запятой:

double a = scanner.nextDouble();
double b = scanner.nextDouble();
double c = (a + b) / 2;

Первые две переменные инициализируются данными, прочитанными с клавиатуры. После инициализации переменной c необходимый результат уже вычислен. Его необходимо вывести на экран (в консольное окно) с использованием функции println() объекта out класса System.

System.out.println("Среднее арифметическое: " + c);

В данной строке плюс означает не сложение, а сшивание строк. К строковой константе "Среднее арифметическое: " пришивается строковое представление значения переменной c.

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

package ua.inf.iwanoff.first;

import java.util.Scanner;

public class Average {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("Введите a и b: ");
        double a = scanner.nextDouble();
        double b = scanner.nextDouble();
        double c = (a + b) / 2;
        System.out.println("Среднее арифметическое: " + c);
    }

}

После запуска программы на выполнение в консольном окне, в котором появился запрос на ввод, необходимо ввести два вещественных значения (например, 1.8 и 3). Ниже появится искомый результат:

Среднее арифметическое: 2.4

При вводе вещественных чисел в качестве десятичного разделителя следует использовать точку или запятую, в зависимости от локализации операционной системы.

2.2 Квадратный корень

Необходимо ввести целое число и определить его квадратный корень.

Создаем новый класс с именем SquareRoot.

При реализации данной программы необходимо проверять, не является ли аргумент отрицательным, и выдавать соответствующее сообщение. Для представления ветвления в Java можно использовать конструкцию if ... else. Если в какой-либо из ветвей необходимо выполнить более одного действия, эти действия нужно заключить в фигурные скобки. Вместо комментария внутри сгенерированной функции main()можно вписать следующий код:

Scanner scanner = new Scanner(System.in);
int x = scanner.nextInt();
System.out.println("x: " + x);
double y;
if (x < 0) {
    System.out.println("Квадратный корень не может быть определен");
}
else {
    y = Math.sqrt(x);
    System.out.println("Квадратный корень: " + y);
}

Для вычисления квадратного корня используется функция sqrt() класса Math. Программа будет иметь вид:

package ua.inf.iwanoff.second;

import java.util.Scanner;

public class SquareRoot {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int x = scanner.nextInt();
        double y;
        if (x < 0) {
            System.out.println("Квадратный корень не может быть определен");
        }
        else {
            y = Math.sqrt(x);
            System.out.println("Квадратный корень: " + y);
        }
    }

}

3 Задания на самостоятельную работу

3.1 Среднее геометрическое

Реализовать алгоритм и программу, в которой вводится два числа и определяется их среднее геометрическое – квадратный корень из их произведения. Для обозначения умножения в Java, как и в других языках программирования, используется знак *.

Компиляцию и выполнение программы осуществить в командной строке, а также в выбранной Вами интегрированной среде разработки.

Осуществить размещение проекта на GitHub.

4 Контрольные вопросы

  1. В чем преимущества и недостатки языка Java?
  2. Что такое программная платформа?
  3. Что такое Java-платформа?
  4. В чем смысл автоматической сборки мусора?
  5. Какие существуют уровни реализации Java-платформы?
  6. Какие языки позволяют реализовывать программы для Java-платформы? Приведите примеры.
  7. Чем отличается JDK и JRE?
  8. Что такое байт-код?
  9. Какие существуют версии платформы Java?
  10. Сколько классов может быть реализовано в одном исходном файле Java?
  11. Какие файлы содержат исходный код на Java и какие содержат результат компиляции?
  12. Чем определяется имя файла с исходным кодом на Java?
  13. Для чего используются пакеты в Java?
  14. Можно ли вкладывать пакеты друг в друга?
  15. Для чего используется инструкция import?
  16. Какой пакет Java не требует явного подключения?
  17. Почему нежелательно использование безымянного пакета?
  18. Как осуществить компиляцию исходного кода Java в командной строке?
  19. Что такое classpath?
  20. Как осуществить загрузку консольного Java-приложения на выполнение?
  21. Можно ли создавать вложенные пакеты?
  22. Для чего в именах пакетов используются обращенные доменные имена?
  23. Какие интегрированные среды разработки могут быть использованы для создания Java-приложений?
  24. Какие основные особенности интегрированной среды IntelliJ IDEA?
  25. Как создать проект и выполнить программу в среде IntelliJ IDEA?
  26. Как использовать шаблоны исходного кода?
  27. Как получить список горячих клавиш?
  28. Как осуществить отладку программы в среде IntelliJ IDEA?
  29. Что такое система контроля версий?
  30. Что такое Git?
  31. Что такое GitHub?
  32. Как воспользоваться Git и GitHub в среде IntelliJ IDEA?

 

up