Вы находитесь на странице: 1из 2

Лекция 13. Конструкторы в Java и C#. (2 часа).

Конструкторы в Java
Инициализировать все переменные класса всякий раз, когда создается его очередной
представитель, — довольно утомительное дело даже в том случае, когда в классе имеются
функции, подобные методу init. Для этого в Java предусмотрены специальные методы,
называемые конструкторами. Конструктор — это метод класса, который инициализирует
новый объект после его создания. Имя конструктора всегда совпадает с именем класса, в
котором он расположен. У конструкторов нет типа возвращаемого результата - никакого,
даже void. Заменим метод init из предыдущего примера конструктором.
class Point {
int х, у;
Point(int х, int у) {
this.x = x;
this.y = y;
}
}
class PointCreate {
public static void main(String args[]) {
Point p = new Point(10,20);
System.out.println("x = " + p.x + " у = " + p.y);
}}

Конструкторы в C#.
Конструктор инициализирует объект при его создании, т.е. объект будет иметь
заполненную структуру уже при создании. Конструктор имеет такое же имя, что и сам
класс. По синтаксису похож на метод. В определении конструктора не указывается тип
возвращаемого значения:
1 уровень_доступа имя_класса() {
2 //тело конструктора
3 }
В качестве уровня доступа обычно используется public, так как конструктор обычно
вызывается вне класса. Все классы имеют конструкторы, независимо от того, создаёте вы
его или нет (C# автоматически создаёт конструктор по умолчанию). Данный конструктор
инициализирует все переменные-члены, имеющие тип значений, нулями, а переменные
ссылочного типа — null значениями. Давайте создадим свой собственный конструктор, на
основе предыдущего примера:
1 public Room() {
2 length = 7;
3 height = 2.5;
4 width = 4;
5 windows = false;
6 }
Если мы теперь создадим объект класса Room, то его поле length (поле объекта) будет уже
иметь значение, равное 7:
1 Room newRoom = new Room();
2 Console.WriteLine(newRoom.length);//выведет 7
В нашем примере использовался конструктор без параметров. А что если мы захотим
изменить длину нашей комнаты. Для этого придётся написать newRoom.length = 6. Чтобы
этого не делать, используются параметризированные конструкторы. Параметры
вносятся в конструктор точно также, как и в метод. Давайте создадим
параметризированный конструктор для нашего класса Room:
1 public Room(double a, double b, double c, boolean d) {
2 length = a;
3 height = b;
4 width = c;
5 windows = d;
6 }
Давайте теперь создадим новый объект, передав в конструктор параметры:
1 Room newRoom = new Room(10,3,4,true);
2 Console.WriteLine(newRoom.length); //выведет 10
При использовании оператора new объектам динамически выделяется память из пула
свободной памяти. Данный объем свободной памяти не бесконечен. Есть риск
возникновения ситуации, когда память под объект не будет выделена. Поэтому в схеме
динамического выделения памяти есть механизм очистки от неиспользуемых объектов.
Данный процесс может выполняться вручную (например в Javascript с помощью
оператора delete). В C# за это отвечает механизм сборки мусора, который не требует
участия программиста.
В языке C# можно определить метод, который будет вызываться непосредственно перед
тем, когда объект будет уничтожен (т.е. когда его настигнет сборщик мусора). Этот метод
называется деструктор. Синтаксис его следующий:
1 ~имя_класса () {
2 //тело деструктора
3 }
Деструктор вызывается только перед началом работы системы сбора мусора. Мы не
можем знать точно, когда будет вызван деструктор, но точно знаем, что он будет вызван
перед завершением работы программы. Для нашего примера деструктор будет иметь вид:
1 ~Room() {
2 Console.WriteLine("Объект был стерт");
3 }