
- •Java - объектно-ориентированный язык
- •Виртуальная Java-машина.
- •Алфавит языка Java
- •Типы данных
- •Числа высокой точности
- •Переменные в Java
- •Объявление переменной
- •Область действия и время жизни переменной
- •Операции в Java
- •Арифметические операции
- •Логические операции
- •Побитовые операции
- •Операции сдвига
- •Тернарный оператор ?:
- •Оператор запятая
- •Одномерные массивы
- •Многомерные массивы
- •Функции
- •Класс Поля и методы
- •Модификаторы доступа
- •Инициализация и очистка
- •Перегрузка методов
- •Ключевое слово this
- •Вызов конструктора из конструктора
- •Использование объектов в качестве параметров
- •Ключевое слово static
- •Спецификатор final
- •Вложенные и внутренние классы
- •Сборщик «мусора»
- •Как работает сборщик мусора
- •Наследование
- •Основы наследования
- •Использование ключевого слова super
- •Использование super для вызова конструктора суперкласса
- •Использование super для доступа к скрытым членам суперкласса
- •Конструкторы при наследовании
- •Динамическая диспетчеризация методов
- •Абстрактные классы
- •Использование final с наследованием
- •Использование final для отказа от переопределения
- •Использование final для отмены наследования
- •Класс Object
- •Пакеты и интерфейсы Пакеты
- •Оператор package
- •Оператор import
- •Уровни доступа.
- •Интерфейсы
- •Оператор implements
- •Частичные реализации
- •“Множественное” наследование в Java
- •Конфликты имен при комбинировании интерфейсов
- •Расширение интерфейса
- •Группировка констант
- •Инициализирование полей в интерфейсах
- •Вложенные интерфейсы
- •Стандартный ввод/вывод
- •Чтение из стандартного ввода
- •Замена System.Out на PrintWriter
- •Первое приложение Java
- •Исключительные ситуации. Обработка исключений
- •Типы исключений
Инициализация и очистка
Инициализация и очистка − начальное и завершающее действия, обеспечивающие правильную работу с объектами. Для инициализации объекта в каждый класс можно добавить метод, например 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);
}
} ///:~
Если два метода имеют однотипные аргументы, но с различным порядком следования, то такие методы так же являются перегруженными.