Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие Java.doc
Скачиваний:
17
Добавлен:
07.09.2019
Размер:
569.34 Кб
Скачать

Инициализация и очистка

Инициализация и очистка − начальное и завершающее действия, обеспечивающие правильную работу с объектами. Для инициализации объекта в каждый класс можно добавить метод, например initial(). При этом необходимо помнить об этом методе. В Java, как и в C++, функция инициализации объекта возложена на специальный метод класса − конструктор, вызываемый автоматически при создании объекта. Наряду с ним в Java добавлен сборщик мусора, автоматически освобождающий более не используемые ресурсы памяти. Остановимся на этом более подробно.

Имя конструктора класса всегда совпадает с именем класса. При этом в классе может содержаться более одного конструктора.

class Demo_constr {

int n;

Demo_constr () { // конструктор без параметров

n=0; // инициализация поля n

System.out.println("konstructor Demo_constr 1");

}

Demo_constr (int N) { // конструктор с параметрами

n=N; // инициализация поля n

System.out.println("konstructor Demo_constr 2");

}

}

public class Demo {

public static void main(String[] args) {

Demo_constr obj1=new Demo_constr (); // вызов конструктора без

// параметров

Demo_constr obj2=new Demo_constr (5); // вызов конструктора с одним

// параметром

}

} ///:~

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

Еще одно отличие конструктора от обычного метода класса состоит в том, что конструктор не имеет возвращаемого значения.

Перегрузка методов

Под перегрузкой методов будем понимать возможность использования методов имеющих одинаковые имена, но различное число и(или) тип аргументов. В Java (и C++) наличие в классе двух и более конструкторов является одним из факторов вынуждающих использовать перегрузку методов. Ниже приведен пример, демонстрирующий наличие в классе двух перегруженных конструкторов и перегрузку обычного метода:

import java.util.*;

class Demo_overload {

int n,k;

Demo_ overload () { // конструктор без параметров

n=0; k=0; // инициализация полей n и k

System.out.println("konstructor Demo_constr 1");

}

Demo_ overload(int N, int K) { // конструктор с параметрами

n=N; k=K; // инициализация полей n и k

System.out.println("konstructor Demo_constr 2");

}

void sum_Demo(int N, int K){

n+=N; k+=K;

}

void sum_Demo(Demo_overload obj){

n+=obj.n; k+=obj.k;

}

}

public class Demo {

public static void main(String[] args) {

Demo_overload obj1=new Demo_overload(); // вызов конструктора без

// параметров

Demo_constr obj2=new Demo_ overload(5,3); // вызов конструктора с

// одним параметром

obj1. sum_Demo(2,3);

obj2. sum_Demo(obj1);

}

} ///:~

Если два метода имеют однотипные аргументы, но с различным порядком следования, то такие методы так же являются перегруженными.