Составители:
Рубрика:
20
Здорово, мужики!
Exception in thread “main”
java.lang.NullPointerException
At HelloDemoB.main(HelloDemoB.java:18)
Виртуальная машина, не выполнив невозможную операцию, оста-
новила выполнение программы, сообщив тип исключения и указав
место невыполненной инструкции в тексте программы. Исключитель-
ная ситуация, вызванная обращением к ссылке в состоянии null, опи-
сывается классом java.lang.NullPointerException.
2.6 Уничтожение объектов
Почти во всех примерах, приведенных выше, объекты только соз-
давались и никогда не уничтожались. Дело в том, что Java считает
«ручное» освобождение памяти ненадежным. В Java нет прямого спо-
соба удаления объектов из памяти. Освобождение памяти от неисполь-
зуемых объектов выполняется встроенным в виртуальную машину
сборщиком мусора. Сборщик мусора – это программа, которая
разы-
скивает в памяти виртуальной машины объекты, свободные от ссылок
на них, и удаляет их оттуда. Сборщик мусора периодически запускает-
ся виртуальной машиной без вмешательства программиста. Програм-
мист не должен заботиться об уничтожении созданных объектов, и
более того, у него нет возможности это сделать. В Java нет оператора
уничтожения объектов. Можно простимулировать
сборщика мусора к
внеплановому освобождению памяти, разорвав все связи переменных с
ненужными объектами и вызвав программу сборки мусора (метод gc()
класса java.lang.System).
2.7 Статические элементы – элементы класса
Итак, основное назначение классов Java – служить прообразами
объектов. НО! Чтобы создать объект, необходимо запустить програм-
му, следовательно, хотя бы один метод класса-программы должен
быть доступен до создания всяких объектов. Один такой метод Вы уже
знаете, это метод main(String args[]) с обязательными атрибутами
public static void. Виртуальная машина Java для исполнения класса-
21
программы считывает код класса в память и разыскивает в нем метод
с таким названием и с такими атрибутами. Так вот, на этом этапе –
считывания кода класса интерпретатором – считываются только мето-
ды и переменные, отмеченные модификатором static – статические
элементы класса. Статические элементы принадлежат классу, а не эк-
земпляру класса. Статические переменные не тиражируются
вместе с
объектами, они существуют в единственном числе каждая. Изменение
статической переменной в одном экземпляре класса мгновенно приве-
дет к ее изменению во всех экземплярах. Статические методы имеют
доступ только к статическим переменным класса, обращение из стати-
ческого метода к нестатической переменной класса – ошибка!
2.8 Инициализация класса и объекта
Как было сказано, статические компоненты класса доступны сразу
после загрузки класса виртуальной машиной. Блок операторов с мо-
дификатором static, размещенный на уровне описания класса, также
будет выполнен на этом этапе. На том же уровне можно разместить
блок динамической инициализации – он будет выполнен при создании
объекта класса прежде конструктора.
public class Init{
public static String sfield="STATIC";
static {
System.out.println("Блок статической инициа
-
лизации класса Init");
System.out.println("СП sfield="+ sfield);
}
public String dfield="DYNAMIC";
{
System.out.println("Блок динамической инициа-
лизации класса Init");
System.out.println("ДП dfield="+ dfield);
}
public Init(){
System.out.println("Конструктор класса
INIT");
Страницы
- « первая
- ‹ предыдущая
- …
- 9
- 10
- 11
- 12
- 13
- …
- следующая ›
- последняя »