Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GoslingJava2.doc
Скачиваний:
139
Добавлен:
23.02.2016
Размер:
2.39 Mб
Скачать

2.10.2. Восстановление объектов в методе

Метод finalize может “воскресить” объект, снова делая его используемым— скажем, включая его в статический список объектов. Подобные действия не рекомендуются, но Java не сможет ничего сделать, чтобы предотвратить их.

Тем не менее Java вызывает finalize ровно один раз для каждого объекта, даже если данный объект уничтожается сборщиком мусора повторно из-за того, что он был восстановлен в предыдущем вызове finalize. Если подобное восстановление объектов оказывается важным для концепции вашей программы, то происходить оно будет всего один раз— маловероятно, чтобы вы добивались от программы именно такого поведения.

Если вы действительно считаете, что вам необходимо восстанавливать объекты, попробуйте тщательно пересмотреть свою программу— возможно, вы обнаружите в ней какие-то недочеты. Если же и после этого вы уверены, что без восстановления объектов никак не обойтись, то правильным решением будет дублирование или создание нового объекта, а не восстановление. Метод finalize может создать ссылку на новый объект, состояние которого совпадает с состоянием уничтожаемого объекта. Так как дублированный объект создается заново, при необходимости в будущем может быть вызван его метод finalize, который поместит еще одну копию объекта в какой-нибудь другой список— это обеспечит выживание если не самого объекта, то его точной копии.

2.11. Метод main

Детали запуска Java-приложений могут отличаться для разных систем, но всегда необходимо указать имя класса, который управляет работой приложения. При запуске программы на Java система находит и запускает метод main этого класса. Метод main должен быть объявлен как public, static и void (то есть не возвращающий никакого значения), и ему должен передаваться один аргумент типа String[]. Приведем пример метода main, выводящего значения своих параметров:

class Echo {

public static void main(String[] args) {

for (int i = 0; i < args.length; i++)

System.out.print(args[i] = “ ”);

System.out.println();

}

}

В массиве строк содержатся “аргументы программы”. Чаще всего они вводятся пользователем при запуске приложения. Например, в системе с использованием командной строки— такой, как UNIX или DOS Shell,— приложение Echo может быть вызвано следующим образом:

java Echo in here

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

in here

Имя класса не включается в число строк, передаваемых main. Оно известно заранее, поскольку это имя класса приложения.

Приложение может содержать несколько методов main, поскольку каждый из его классов может иметь такой метод. Тем не менее в каждой программе используется всего один метод main, указываемый при запуске,— в приведенном выше примере это был метод класса Echo. Присутствие нескольких методов main имеет положительный эффект— каждый класс может иметь метод main, предназначенный для проверки его собственного кода, что дает превосходную возможность для модульного тестирования класса. Мы рекомендуем пользоваться подобной техникой в ваших программах. /Метод main присутствует во многих примерах, приведенных в этой книге. Ограниченный объем не позволяет нам приводить метод main для каждого примера, но обычно мы используем этот метод при разработке собственных классов для нетривиальных приложений и библиотек./

Упражнение 2.14

Измените метод Vehicle.main так, чтобы он создавал объекты-машины для владельцев, чьи имена указаны в командной строке, и выводил информацию о новых объектах.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]