Создание объектов

Рассмотрим упрощенный пример класса, описывающего поведение объекта – студент.

class Student

{

//Объявление переменных

int groupId; //номер группы

String firstName;//имя студента

String lastName; //фамилия студента

// Прочие поля...

//Методы

void setGroup(int newId)

{

// Метод переводит студента в другую группу

groupId = newId;

}

void getInfo()

{

// Метод выводит информацию о студенте на экран

System.out.println(firstName+" "+lastName+" "groupId);

}

// Прочие методы...

}

Класс содержит описание трех переменных: номер группы groupId имя firstName и фамилия lastName студента и два метода setGroup() и getInfo() манипулирующие ими. Как видно в классе отсутствует метод main() и поэтому его невозможно исполнить. Но это и не нужно, так как классы рассчитаны на многократное использование другими классами в дальнейшем.

После того как описание класса закончено, можно создавать конкретные объекты, экземпляры описанного класса. Создание объектов производится в три этапа (подобно описанию массивов). Сначала объявляются ссылки на объекты, например:

Student stud1, stud2;

Записывается имя класса, и через пробел перечисляются переменные – ссылки на экземпляры класса. В этой записи наглядно видно, что созданный класс Student – это описание нового ссылочного типа данных. Все переменные, тип которых определен каким-либо классом, называются ссылочными переменными.

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

stud1 = new Student();

stud2 = new Student();

После операции new записывается конструктор Student(). Конструктор класса (англ., class constructor) представляет собой снабженный параметрами именованный блок инструкций, который автоматически вызывается при создании объекта класса и выполняет действия по инициализации объекта. Оператор new обращается именно к этому блоку, в данном случае, с пустым списком параметров. Конструктор – обязательный элемент любого класса. Однако, как вы можете видеть, в классе Student конструктора нет. Дело в том, что к классу, не описавшему ни одного конструктора, компилятор автоматически добавляет конструктор с пустым набором инструкций и пустым списком параметров. Это так называемый конструктор по умолчанию.

Переменная, связанная с объектом, является, по сути, именованным указателем на занимаемую этим объектом область памяти, которая доступна, пока существует хотя бы один такой указатель. Разорвать связь ссылочной переменной с экземпляром можно, переведя ее в состояние null, которое освобождает ее от связи с каким-либо объектом:

stud1 = null;

После создания экземпляров класса, можно обращаться к его элементам – переменным и методам – экземпляров. Как правило, до создания экземпляра переменные и методы класса недостижимы.

На этапе инициализации объектам можно присваивать начальные значения и вызывать методы. Поскольку имена переменных экземпляра и методов у всех объектов одинаковы, их нужно уточнять именем ссылки на объект. Для доступа к этим переменным применяется оператор точка (.). Этот оператор связывает имя объекта с именем переменной экземпляра, например:

stud1.groupId= 11;

stud1.lastName ="Петров";

stud2.lastName ="Сидорчук";

stud1.setGroup(12);

stud2.getInfo(12);

Обычно экземпляры классов создаются в методах других классов. Рассмотрим пример использования класса Student. Для этого опишем новый класс StudentDemo.

class StudentDemo{

public static void main(String[] args){

//Создадим экземпляр класса Student

Student stud1=new Student();

stud1.groupId=11;

stud1.firstName ="Сергей";

stud1.lastName ="Сидорчук";

//Вызовем метод getInfo(), выводящий информацию о

//студенте на экран

stud1. getInfo();

//Переведем студента в другую группу

stud1.setGroup(12);

// Выведем обновленную информацию

stud1. getInfo();

}}

В результате запуска метода main() класса StudentDemo на экран будет дважды выведена информация о студенте. Первый раз с номером группы – 11, второй раз уже с новым номером группы – 12.

В классе StudentDemo, можно создать сколь угодно много объектов класса Student. Можно даже создать массив таких объектов. Каждый созданный объект, будет содержать собственную копию каждой переменной экземпляра, определенной классом. Таким образом, каждый объект класса Student будет содержать собственные копии переменных экземпляра groupId, firstName и lastname. У всех объектов будет одинаковый набор атрибутов, но их значения могут быть различными и их можно менять. Изменение переменных экземпляра позволяет изменять и поведение методов экземпляра. В этом состоит одно из важных преимуществ объектного подхода.

Обратите внимание, что в примере, приведенном выше, объект был нами создан, но не удален в конце программы. Дело в том, что в Java нет прямого способа удаления объектов из памяти и, следовательно, нет специального оператора уничтожения объектов. Освобождение памяти от неиспользуемых объектов выполняется встроенным в виртуальную машину сборщиком мусора.

Сборщик мусора (англ. garbage collector) – это программа, которая разыскивает в памяти виртуальной машины объекты, свободные от ссылок на них, и удаляет их оттуда. Сборщик мусора периодически запускается виртуальной машиной без вмешательства программиста.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: