А теперь, когда разъяснены самые основы объектно-ориентированного характера Java, рассмотрим несколько практических примеров программ, написанных на этом языке. Начнем с компиляции и запуска короткого примера программы, обсуждаемого в этом разделе. Оказывается, что эта задача не так проста, как может показаться на первый взгляд.
/*
Это простая программа на Java.
Присвоить исходному файлу имя "Example.java"
*/
class Example {
// Эта программа начинается с вызова метода main().
public static void main(String args[]) {
System.out.println("Простая программа на Java.");
}
}
На заметку! Здесь и далее используется стандартный комплект разработчика Java SE 8 Developer’s Kit (JDK 8), предоставляемый компанией Oracle. Если же для написания программ на Java применяется интегрированная среда разработки (ИСР), то для компиляции и выполнения программ может потребоваться другая процедура. В таком случае обращайтесь за справкой кдо- кументации на применяемую ИСР
Ввод кода программы
Для большинства языков программирования имя файла, который содержит исходный код программы, не имеет значения. Но ejava дело обстоит иначе. Прежде всего следует твердо усвоить, что исходному файлу очень важно присвоить имя. В данном примере исходному файлу должно быть присвоено Example.java
. И вот почему.
В Java исходный файл официально называется единицей компиляции. Он, среди прочего, представляет собой текстовый файл, содержащий определения одного или нескольких классов. (Будем пока что пользоваться исходными файлами, содержащими только один класс.) Компилятор Java требует, чтобы исходный файл имел расширение .java
.
Как следует из исходного кода рассматриваемого здесь примера программы, определенный в ней класс также называется Example. И это не случайно. В Java весь код должен размещаться в классе. По принятому соглашению имя главного класса должно совпадать с именем файла, содержащего исходный код программы. Кроме того, написание имени исходного файла должно точно соответствовать имени главного класса, включая строчные и прописные буквы. Дело в том, что в коде Java учитывается регистр символов. На первый взгляд, соглашение о строгом соответствии имен файлов и классов может показаться произвольным. Но на самом деле оно упрощает сопровождение и организацию программ.
Компиляция программы
Чтобы скомпилировать программу Example, запустите компилятор (javac
), указав имя исходного файла в командной строке следующим образом:
C:\>javac Example.java
Компилятор javac создаст файл Example.class
, содержащий версию байткода. Как пояснялось ранее, байт-код Java является промежуточным представлением программы, содержащим инструкции, которые будет выполнять виртуальная машина JVM. Следовательно, компилятор javac выдает результат, который не является непосредственно исполняемым кодом.
Чтобы выполнить программу, следует воспользоваться загрузчиком приложений Java, который называется java
. Ему нужно передать имя класса Example
в качестве аргумента командной строки, как показано ниже.
C:\>java Example
Выполнение данной программы приведет к выводу на экран следующего результата:
Простая программа на Java.
В процессе компиляции исходного кода каждый отдельный класс помещается в собственный выходной файл, называемый по имени класса и получающий расширение .class
. Поэтому исходным файлам программ на Java целесообразно присваивать имена, совпадающие с именами классов, которые содержатся в файлах с расширением .class
. При запуске загрузчика приложений java
описанным выше способом в командной строке на самом деле указывается имя класса, который нужно выполнить. Загрузчик приложений автоматически будет искать файл с указанным именем и расширением .class
. И если он найдет такой файл, то выполнит код, содержащийся в указанном классе.
Подробный анализ первого примера программы
Хотя сама программа Example.java
небольшая, с ней связано несколько важных особенностей, характерных для всех программ на Java. Проанализируем подробно каждую часть этой программы. Начинается эта программа со следующих строк:
/*
Это простая программа на Java.
Присвоить исходному файлу имя "Example.java"
*/
Эти строки кода содержат комментарий. Подобно большинству других языков программирования, Java позволяет вставлять примечания к коду программы в ее исходный файл. Компилятор игнорирует содержимое комментариев. Эти комментарии описывают или поясняют действия программы для тех, кто просматривает ее исходный код. В данном случае комментарий описывает программу и напоминает, что исходному файлу должно быть присвоено имя Example.java
. Разумеется, в реальных прикладных программах комментарии служат главным образом для пояснения работы отдельных частей программы или действий, выполняемых отдельными языковыми средствами.
В Java поддерживаются три вида комментариев. Комментарий, приведенный в начале программы, называется многострочным,. Этот вид комментариев должен начинаться с символов /*
и оканчиваться символами */
. Весь текст, расположенный между этими двумя парами символов, игнорируется компилятором. Как следует из его названия, многострочный комментарий может содержать несколько строк.
Перейдем к следующей строке кода анализируемой здесь программы. Ниже показано, как она выглядит:
class Example {
В этой строке кода ключевое слово class служит для объявления вновь определяемого класса, a Example — в качестве идентификатора, обозначающего имя класса. Все определение класса, в том числе его членов, должно располагаться между открывающей ({
) и закрывающей (}
) фигурными скобками. Мы не станем пока что останавливаться на особенностях реализации класса. Отметим только, что в среде Java все действия программы выполняются в пределах класса. В этом и состоит одна из причин, по которым все программы на java являются (по крайней мере, частично) объектно-ориентированными.
Следующая строка кода данной программы содержит однострочный комментарий:
// Эта программа начинается с вызова метода main()
Это второй вид комментариев, поддерживаемых в Java. Он называется однострочным комментарием и начинается с символов //
, а завершается символом конца строки. Как правило, программисты пользуются многострочными комментариями для вставки длинных примечаний, а однострочными — для коротких, построчных описаний. Третий вид комментариев, называемый документирующим, будет рассмотрен далее в разделе “Комментарии”.
Перейдем к следующей строке кода анализируемой здесь программы. Ниже показано, как она выглядит:
public static void main(String args[ ]) {
Эта строка кода начинается с объявления метода main()
. Как следует из предшествующего ей комментария, выполнение программы начинается именно с этой строки кода. Выполнение всех прикладных программ на java начинается с вызова метода main()
. Мы не станем пока что разъяснять подробно назначение каждого элемента этой строки, потому что для этого требуется ясное представление о подходе к инкапсуляции, принятом в java. Но поскольку эта строка кода присутствует в большинстве примеров в моем блоге, то проанализируем ее вкратце.
Ключевое слово public
является модификатором доступа, который дает программисту возможность управлять видимостью членов класса. Когда члену класса предшествует ключевое слово public
, этот член доступен из кода за пределами класса, где он определен. (Совершенно противоположное обозначает ключевое слово private
— оно не разрешает доступ к члену класса из кода за пределами данного класса.) В данном случае метод main()
должен быть определен как public
, поскольку при запуске программы он должен вызываться из кода за пределами его класса. Ключевое слово static
позволяет вызывать метод main()
без получения экземпляра класса. Это необходимо потому, что метод main()
вызывается виртуальной машиной JVM перед созданием любых объектов. А ключевое слово void
просто сообщает компилятору, что метод main()
не возвращает никаких значений. Как будет показано далее, методы могут также возвращать конкретные значения. Если это краткое пояснение покажется вам не совсем понятным, не отчаивайтесь, поскольку упомянутые здесь понятия и языковые средства Java будут подробно рассматриваться в последующих моих статьях.
Как указывалось выше, метод main()
вызывается при запуске прикладных программ на java. Следует, однако, иметь в виду, что в Java учитывается регистр символов. Следовательно, имя Main
не равнозначно имени main
. Следует также иметь в виду, что компилятор Java скомпилирует классы, в которых отсутствует метод
main()
, но загрузчик приложений (java) не сможет выполнить код таких классов. Так, если вместо имени main
ввести имя Main
, компилятор все равно скомпилирует программу, но загрузчик приложений java выдаст сообщение об ошибке, поскольку ему не удалось обнаружить метод main()
.
Для передачи любой информации, требующейся методу, служат переменные, указываемые в скобках вслед за именем метода. Эти переменные называются параметрами. Если параметры не требуются методу, то указываются пустые скобки. У метода main()
имеется единственный, хотя и довольно сложный параметр. Так, в выражении String args [ ]
объявляется параметр args
, обозначающий массив экземпляров класса String
. (Массивы — это коллекции похожих объектов.) Вобъектахтипа String
хранятся символьные строки. В данном случае параметр args принимает любые аргументы командной строки, присутствующие во время выполнения программы. В данной программе эта информация, вводимая из командной строки, не используется, но в других, рассматриваемых далее примерах программ она будет применяться.
Последним элементом в рассматриваемой здесь строке кода оказывается символ открывающей фигурной скобки ({
). Он обозначает начало тела метода main()
. Весь код, составляющий тело метода, должен располагаться между открывающей и закрывающей фигурными скобками в определении этого метода.
Еще один важный момент: метод main()
служит всего лишь началом программы. Сложная программа может включать в себя десятки классов, но только один из них должен содержать метод main()
, чтобы программу можно было запустить на выполнение. Но в некоторых случаях метод main()
вообще не требуется, например, при создании аплетов — прикладных программ на java, внедряемых в веббраузеры. Метод main()
в аплетах не требуется потому, что для их запуска на выполнение применяются другие средства.
Перейдем к следующей строке кода анализируемой здесь программы. Ниже показано, как она выглядит. Следует также иметь в виду, что эта строка кода находится в теле методаmain()
.
System.out.println("Простая программа на Java.");
В этой строке кода на экран выводится текстовая строка "Простая программа на Java." с последующим переходом на новую строку. На самом деле вывод текста на экран выполняется встроенным методом println()
. В данном случае метод println()
отображает переданную ему текстовую строку. Как будет показано далее, с помощью этого метода можно выводить и другие типы данных. Анализируемая здесь строка кода начинается с обозначения стандартного потока вывода System
. out. Это слишком сложная языковая конструкция, чтобы ее можно было просто объяснить на данной стадии изучения Java, но вкратце System
обозначает предопределенный класс, предоставляющий доступ к системе, а out — поток вывода, связанный с консолью.
Нетрудно догадаться, что в реальных программах на Java консольный вывод- ввод применяется редко. Многие современные вычислительные среды по своему характеру являются оконными и графическими, поэтому консольный ввод-вывод зачастую применяется в простых служебных и демонстрационных программах. В дальнейшем будут рассмотрены другие способы ввода-вывода данных в java, а до тех пор будут применяться методы консольного ввода-вывода.
Обратите внимание на то,что оператор, в котором вызывается метод println()
, завершается точкой с запятой. В языке Java все операторы обычно должны оканчиваться этим символом. Причина отсутствия точки с запятой в конце остальных строк кода программы состоит в том, что формально они не являются операторами. Первый символ }
завершает метод main()
, а последний символ }
— определение класса Example
.
В следующей статье мы расширим свои представления о Java, создав еще одну программу. Уточним понятие переменной и типа данных Java.