Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие Java .pdf
Скачиваний:
118
Добавлен:
16.03.2015
Размер:
1.32 Mб
Скачать

к полю name (а не к параметру метода name!!!) мы обязаны предпослать идентификатору name префикс «this.», чтобы явно указать на то, что нас интересует именно поле. Подобное умышленное перекрытие одних идентификаторов другими можно считать вполне приемлемой практикой – правда преимущественно при использовании в контексте конструкторов и методов доступа.

1.16.8 Перегруженные методы

Объявление каждого метода включает сигнатуру – сочетание наименования метода и списка типов его параметров. Методы класса должны различаться сигнатурами – они могут обладать одним и тем же именем, но количество и/или типы их параметров в таком случае совпадать не могут. Методы класса, имеющие одно и то же имя, называют перегруженными (overloaded) (такое имя получает несколько возможных толкований). При анализе вызова метода компилятор анализирует количество и типы аргументов и находит тот перегруженный метод, сигнатура которого в наибольшей мере отвечает ситуации. В примере 23 приведены тексты двух перегруженных методов orbitsAround() класса Body, один из которых возвращает значение true в том случае, когда текущее небесное тело вращается вокруг тела, указанного посредством ссылки на объект, а второй выполняет то же самое, только в качестве параметра принимает номер объекта.

Пример 23. Перегруженные методы

public boolean orbitsAround(Body other) { return (orbits == other);

}

public boolean orbitsAround(long id) {

return (orbits != null && orbits.idNum == id);

}

57

Вобъявлении обоих методов указано по одному параметру, но их типы различны. Если при вызове orbitsAround() в качестве аргумента вводится выражение ссылки на объект класса Body, управление предаётся первому из методов – в нём содержимое параметра other сравнивается со значением поля orbits текущего объекта. Если же в конструкции вызова задаётся значение типа long, в действие вступает второй одноимённый метод, сопоставляющий значение поля idNum текущего объекта с содержимым параметра id. Если компилятор не в состоянии найти сигнатуры метода, соответствующей конструкции вызова, он генерирует сообщение об ошибке.

Всостав сигнатур не входит тип возвращаемого значения и список объявляемых исключений, поэтому вы не сможете пере-

грузить методы, руководствуясь различиями только в этих компонентах объявления.

1.16.9 Метод main

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

В объявлении метода main должны присутствовать модификаторы public и static, а также служебное слово void, а в списке параметров – единственный параметр типа String[] (ссылка на массив ссылок на объекты типа String). Метод main() объявляется публичным затем, чтобы обратиться к нему мог каждый субъект (в данном случае, виртуальная машина Java) и статическим, чтобы его можно было вызвать без создания объекта класса. Метод main() имеет «возвращаемый тип» void, т.е. он не возвращает

58

никаких значений. В примере 24 приведён метод main(), который выводит на экран значения переданных ему аргументов.

Пример 24. Получение аргументов из командной строки class Echo {

public static void main(String[] args) { for (int i = 0; i < args.length; i++)

System.out.print(args[i] + " "); System.out.println();

}

}

Строковые аргументы, передаваемые методу main(), играют роль параметров командной строки, которые могут быть введены пользователем при старте программы. Например, из командной строки приложение Echo может быть запущено следующем образом:

java Echo Здесь был Вася

В данном случае слово java обозначает наименование программы-интерпретатора байт-кода, Echo соответствует имени класса, подлежащего выполнению, а остальные слова – это аргументы программы. Команда java находит откомпилированный код класса Echo, загружает его в виртуальную машину Java и вызывает метод Echo.main(), передавая ему полученные извне параметры командной строки, которые сохраняются в массиве args объектов типа String. Результат работы программы выглядит так:

Здесь был Вася

Приложение как совокупность классов может содержать несколько методов main() – таковые допустимо объявлять

влюбом классе, входящем в приложение, но в каждом конкретном случае запуска приложения используется только один метод main() – он принадлежит классу, наименование которого указано

вкомандной строке (как, например, Echo).

59

1.16.10 Методы native

Если в процессе реализации Java-проекта возникает необходимость в применении существующего кода, написанного на другом языке программирования, или использовании низкоуровневых функций для непосредственного обращения к компьютерной аппаратуре, существует возможность прибегнуть к так называемым native-методам, которые могут быть вызваны из среды приложения Java, но создаются на одном из «родных» (native) для платформы языков – как правило, С или С++. Native-методы объявляются посредством модификатора native. Тело метода реализуется на другом языке и поэтому в объявлении заменяется символом точки с запятой. Ниже в качестве примера приведено объявление метода, который обращается к операционной системе за информацией об идентификационном номере процессора хост-компьютера:

public native int getCPUID();

Единственное отличие native-методов состоит в том, что они реализуются на другом языке программирования. В остальном, они подобны обычным методам, т.е. могут быть переопределены, перегружены и снабжены любыми модификаторами – final, static, synchronized, public, protected или private, кроме abstract или strictfp.

При обращении к методам native свойства переносимости и безопасности, присущие коду Java, будут утрачены. Практически невозможно использовать native-методы в Java-коде, который предназначен для загрузки из Internet или выполнения на удалённых компьютерах сети (примером являются апплеты).

Native-методы реализуются с помощью библиотек API, предлагаемых разработчиками виртуальных машин Java для тех или иных платформ. Одна из стандартных библиотек API, предназначенных для программистов, использующих язык С, носит название JNI – от Java Native Interface. Существуют библиотеки и для других языков. Описание подобных библиотек выходит за рамки данного пособия.

60

Соседние файлы в предмете Программирование на Java