Моя первая программа (продолжение).
Итак, посмотрим на программу.
Первая строка
import java.lang.*;
включает в зону видимости все классы пакета java.lang.
Пакеты мы будем пока что понимать как некоторый набор объявленных классов
(на самом деле гораздо больше).
Вторая строка
public class hello {
начало объявления класса hello. Ключевое слово public объявляет
что класс можно будет использовать вне текущего пакета.
Третья строка
public static void main (String args[]) {
начало объявления метода main.
public означает что метод может быть использован извне класса.
static означает что метод main-метод класса, т.е. его можно
вызывать без создания экземпляра класса.
void означает что метод не возвращает значения.
String args[] - аргументы метода, безразмерный массив объектов класса
String.
Четвертая строка
System.out.println ("Hello, world!");
вызов метода println из статического объекта out класса System,
который мы включили в зону видимости строкой import java.lang.*; .
Если из JDK изъять описание соответствующих классов:
public class System {
...
static PrintStream out;
...
}
public class PrintStream {
...
public void println (String s);
...
}
В "Hello, world!" есть некоторая условность Java. Этим описанием
созлается и инициализируется объект класса String. В нашем случае
этот объект сразу передается методу println.
Что делает javac? Компилятор просматривает файл и создает байт-код
для каждого описанного в тексте класса (да-да, фактически, программа
на Java-это набор описаний классов).
Что делает java? Интерпретатор смотрит в файл, находит класс с именем
файла и запускает этот класс (если класса с соответствующим именем не
найдено возникает ошибка времени исполнения). Запуск класса заключается
в исполнении метода main с сигнатурой public static void main (String[]).
Сигнатура однозначно определяет метод (между прочим, в Java может быть
несколько методов с одинаковыми именами и разными сигнатурами). Сигнатура
опрелеляет аттрибуты, тип возвращаемого значения, число параметров и их
типы. Единственное,что можно изменить в нашем объявлении метода main,
это-args, на что-либо другое, поскольку имена аргументов не входят в
сигнатуру. Если метод public static void main(String[]) не описан в
классе,то при попытке запустить класс,возникает ошибка времен исполнения.
Обратите внимание на то что JVM не создает автоматически объект класса
hello (это как раз возможно потому что метод main объявлен статическим).