Java — это всем известный и очень продуманный язык программирования с широким спектром применения: его можно как изучать за школьной партой, так и использовать для запуска масштабных коммерческих приложений. Главное его преимущество – он кросс-платформенный: после создания программы на Java вы можете запускать ее в разных ОС, включая серверы (Linux/Unix), настольные (Windows, macOS, Linux) и мобильные ОС. (Андроид, iOS).
У Java высокая производительность, поскольку он выполняет скомпилированный (то есть машинно-оптимизированный) код. Для разработчиков это значит, что его исходный код нужно скомпилировать, прежде чем запустить. Если вы знакомы с PHP и Python, которые позволяют выполнять исходный код напрямую, то компиляция станет для вас новым шагом в процессе разработки.
В этом уроке мы создадим программу «Hello, World!». С неё традиционно начинается изучение Java. Такая простая программа дает возможность новому программисту почувствовать, что что-то да заработало. Создав «Hello, World», вы начнете изучать базовый синтаксис Java, а также процесс компиляции и выполнения программы. Когда мы закончим, вы сможете писать и запускать базовый код Java.
Требования
Для этого урока нам понадобится:
- Установленная Java (версия 11 или выше). Для Ubuntu и Debian выполните шаги для Варианта 1 в нашем руководстве Как установить Java. Для других операционных систем, включая Mac и Windows, см. другие решения для установки Java.
- Компилятор Java Development Kit (JDK). Чтобы скомпилировать исходный код, мы будем использовать компилятор по умолчанию, который называется javac. Вы можете скомпилировать свой исходный код либо на своем локальном компьютере, либо на удаленном сервере в облаке.
- (Необязательно) Среда выполнения Java (JRE), которая будет выполнять скомпилированный код. JRE является частью JDK, поэтому устанавливать ее дополнительно не нужно. Но можно установить JRE отдельно. Это полезно, если вы собираетесь запускать свой код на удаленном сервере, где его небезопасно компилировать. Вы можете загрузить и установить JRE через встроенный менеджер пакетов. Для Ubuntu и Debian используйте sudo apt install openjdk-11-jre. Для других дистрибутивов используйте соответствующие менеджеры пакетов, выполните поиск по ключевому слову jre и выберите версию 11 или выше.
- Терминал для выполнения команд. Java хорошо поддерживается во всех основных ОС, а это значит, что вы можете следовать инструкциям на локальном компьютере и использовать терминал для подключения к удаленному серверу.
- Текстовый редактор, например nano. Чтобы начать писать код Java, вы можете использовать любой текстовый редактор. Но для эффективного кодирования рассмотрите возможность использования интегрированной среды разработки (IDE), например Eclipse IDE. IDE исправляет ваш синтаксис, автоматически дополняет ваш код и позволяет вам напрямую тестировать код, избавляя от этапа ручной компиляции. Но IDE не всегда интуитивно понятны и могут запутать вас, если вы не пользовались ними раньше. Для первой Java-программы проще использовать привычный вам текстовый редактор.
Написание и выполнение программы «Hello, World!» на Java
Для многих людей их первая Java-программа часто оказывается и последней, поскольку даже самый простой код кажется слишком сложным и нужно изучить много нового, чтобы полностью его понять. Мы начнем с написания кода и его запуска, а затем посмотрим, как он работает.
Для начала создайте новый каталог hello-world, в который вы поместите свой код. Чтобы создать каталог проекта и перейти в него, выполните в терминале следующие команды:
mkdir hello-world
cd hello-world
В nano или в любом другом текстовом редакторе, создайте файл с Hello.java. Для nano используйте следующую команду:
nano Hello.java
Добавьте в файл код:
public class Hello { public static void main(String[] args) { System.out.println("Hello, World!"); } }
Эта программа выдаст сообщение Hello, World! в консоли. Имя файла (в данном случае Hello с расширением .java) должно совпадать с именем public class в исходном коде, то есть Hello. Соответствие имени файла и public class в исходном коде является соглашением Java. (Об этом нужно помнить, потому что, если вы найдете какой-то полезный код, вы будете знать, как назвать файл исходного кода Java.)
Сохраните и закройте файл. В nano нажмите CTRL+X для выхода, Y для сохранения, и ENTER, чтобы подтвердить имя и закрыть файл. В терминале запустите javac из каталога, где находится файл Hello.java, чтобы код скомпилировался:
javac Hello.java
Команда javac скомпилирует исходный код Java с учетом имени файла.
Наконец, запустите программу с помощью java следующим образом:
java Hello
Чтобы выполнить скомпилированный код, вы должны запустить java, за которым следует название класса (в нашем примере это Hello). Нельзя использовать расширение файла, такое как .java или .class, при выполнении кода.
Итог будет выглядеть так:
Hello, World!
Ваша программа запущена! Мы создали базовую программу Java, скомпилировали и выполнили ее.
Работа программы «Hello, World!»
Если вы привыкли писать код на Python или JavaScript, вы даже на примере простой программы увидите, что Java отличается. Любая программа на Java нуждается как минимум в двух вещах:
- Класс кода.
- Основной метод внутри класса.
Вам нужен класс, потому что Java является объектно-ориентированным языком, и весь код должен быть частью класса. Классы — это функционально связанный код. Обычно он не работает сам по себе, а служит шаблоном, из которого создается объект. Объект — это конкретный экземпляр класса, который можно использовать коде. Объекты имеют свойства и могут действовать, когда вы активируете их методы.
В вашей программе это класс Hello:
public class Hello { public static void main(String[] args) { System.out.println("Hello, World!"); } }
Первая строка кода обозначает начало класса. Классы всегда начинаются с ключа class, за которым следует их название. В данном случае имя класса — Hello, и оно совпадает с именем файла, расширение которого – .java. Затем в конце фрагмента кода есть открывающая фигурная скобка ({) и закрывающая фигурная скобка (}), внутри которых вы пишете код класса.
У класса есть модификатор доступа (он есть и у методов). В данном случае это public, а значит, наш класс полностью доступен.
Чтобы упростить чтение кода, лучше всего использовать только один класс для каждого файла. В целом никаких ограничений нет, и вы можете иметь неограниченное количество классов в одном файле. Но есть один нюанс: в рамках одного файла только один класс может быть public, и он должен иметь и такое же имя с учетом регистра.
В дополнение к классу у программы также есть метод main. Main — это начальная точка выполнения для класса, а в нашем руководстве — для всей программы. У него специфический синтаксис: public static void main(String[] args):
public class Hello { public static void main(String[] args) { System.out.println("Hello, World!"); } }
public – это модификатор доступа, который указывает, что на вызов метода нет ограничений.
static — это специальное ключевое слово, обозначающее, что метод (как в данном случае) или свойство не требуют явного создания нового объекта, чтобы вы могли его вызвать. Это слово имеет широкое применение; в частности оно может разрешить ситуации типа “курица или яйцо?”, при возникновении которых один из фрагментов кода должен иметь возможность породить первый объект программы, при этом не будучи частью самого объекта.
void — тип возвращаемого значения. Это значит, что метод не возвращает никакого значения. В этом случае код будет выводить сообщения на экран и, таким образом, напрямую выдавать вам результат выполнения. Как уже было сказано, void ничего не возвращает, но существуют и другие методы, они часто возвращают различную информацию, например буквенно-цифровые символы, целые числа или объекты.
String[] args — это параметр или ввод для main метода. Строка символов хранит буквенно-цифровую информацию. Квадратные скобки ([]) указывают, что это массив строк, а не одна строка. Имя этого массива — args. В этом случае у main() нет аргументов, но если бы они были, они бы содержались в этом массиве.
Если вы пропустите какой-либо из основных атрибутов метода, например, public, вы можете не получить синтаксическую ошибку, но код не будет работать должным образом.
Чтобы вывести текст на консоль, используете метод System.out.println():
public class Hello { public static void main(String[] args) { System.out.println("Hello, World!"); } }
Метод дает компьютеру команду, и тот выполняет действие. Метод можно узнать по круглым скобкам, в которых он записывается: (). Сам метод называется println() и принимает один аргумент для отображаемого текста. System.out предшествует методу, чтобы указать, что он является частью основных функций Java (System) для вывода (out).
В этом случае мы используем метод из подпакета out, который является частью пакета System. Чтобы лучше понять, как организованы классы в Java, представьте, что иерархия классов подобна иерархии файловой системы – с родительскими папками и соответствующими зависимыми подпапками. В Java эти папки называются пакетами. Связанные классы помещаются в один пакет или подпакет в зависимости от степени детализации иерархии.
Аргументом System.out.println() является строка: «Hellom World!». Мы знаем, что это строка, потому что строки всегда заключаются в двойные кавычки. Для строк Java нельзя использовать одинарные кавычки, в отличии от других языков.
Одной из особенностей синтаксиса Java является то, что он требует ставить точку с запятой в конце каждого оператора, например, для вывода текста: System.out.println(“Hello, world!”);.
Примечание. Если вы используете IDE или текстовый редактор с поддержкой синтаксиса Java, вам не нужно обращать внимание на отсутствующие точки с запятой, поскольку эти программы автоматически позаботятся об этом, а также о других особенностях синтаксиса.
В этом разделе мы рассмотрели программу построчно, чтобы понять, как она работает. В следующем разделе вы увидите, что происходит, когда вы компилируете и запускаете программу.
Компиляция и запуск программы «Hello, World!»
Итак, давайте посмотрим, что происходит, когда вы компилируете и запускаете свою Java-программу. Для компиляции кода мы используем javac из JDK:
javac Hello.java
javac прочитает исходный код, проверит его на наличие синтаксических ошибок, оптимизирует и создаст файл по имени Hello.class. Файлы Java с расширением .class — это машинный код, который JRE может интерпретировать и запускать.
Вы можете просмотреть файл Hello.class, выполнив команду ls из каталога проекта.
ls
Эта команда выводит список файлов в вашем текущем каталоге:
Hello.class Hello.java
После того, как код скомпилирован, запустите его с помощью исполняемого файла java из JRE:
java Hello
JRE запускает только скомпилированный код и не может выполнять код из стандартного файла. Точно так же, если вы попытаетесь прочитать скомпилированный файл .class с помощью стандартного текстового редактора, вы не сможете это сделать. Однако с помощью таких инструментов, как Java Decompiler, вы можете читать скомпилированные файлы, что может быть полезно при отладке программ, исходного кода которых у вас нет.
С помощью этой команды вы указываете исполняемому файлу JRE java обработать класс с именем Hello, который находится в файле Hello.class.
Когда Hello, World! выводится на консоль, мы можем быть уверены, что:
- у нас есть рабочая среда Java, в которой можно компилировать и выполнять код.
- Java успешно нашла код класса Hello и может получить к нему доступ.
- Поток выполнения начался с метода main(). Там был вызван метод System.out.println() со строковым аргументом Hello, World!.
- Так как другого кода нет, программа успешно завершит работу.
Вызывая java, вы запускаете тип виртуальной машины Java virtual machine (JVM).
JVM хорошо изолирована и не зависит от внешней среды, библиотек или операционной системы хостинга. JVM ведет себя почти одинаково в разных ОС, что делает Java переносимой, понятной и безопасной. В этом и отличие от других языков, например PHP, где интерпретатор PHP использует множество собственных библиотек ОС.
Поскольку для достижения такой изоляции Java запускает собственную виртуальную машину, то этот процесс потребляет много памяти. Но Java оптимизирована для эффективного управления ресурсами. Даже при потреблении ресурсов, связанных с запуском собственной виртуальной машины, Java обладает высокой производительностью для больших, сложных и долго выполняющихся программ.
Другими словами, среди доступных языков программирования можно найти и более простые и эффективные способы вывода сообщений на экран. Но при помощи Java вы сможете создавать сложные программы, совместимые с различными операционными системами.
Итоги
Поздравляем! Вы написали свою первую программу на Java.
Вы можете продолжить работу с кодом в файле Hello.java самостоятельно: к примеру, вы можете посмотреть, что произойдет, если вы измените текст или удалите точку с запятой и получите сообщение об ошибке. Обязательно компилируйте код (javac Hello.java) каждый раз, когда вы вносите изменения в файл Hello.java.