Основы объектно-ориентированного программирования. Стесик О.Л. - 11 стр.

UptoLike

Составители: 

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");