Московский государственный университет имени М.В.Ломоносова
Опубликован: 01.11.2004 | Доступ: свободный | Студентов: 11276 / 456 | Оценка: 4.12 / 4.01 | Длительность: 19:20:00
ISBN: 978-5-9556-0077-9
Специальности: Программист
Лекция 14:

Java: члены класса, статические переменные и методы

< Лекция 13 || Лекция 14: 1234 || Лекция 15 >

Конструкторы

Конструктором называется метод, вызываемый для инициализации объекта при его создании.

Имя конструктора всегда совпадает с именем класса. Конструктор не может использовать оператор return и для него не указывается никакого типа возвращаемого значения. При объявлении конструктора можно указать модификаторы доступа public, protected или private.

Наличие явно описанного конструктора в классе не является обязательным. В этом случае при создании объекта используется конструктор по умолчанию. Такой конструктор не получает параметров и вызывает непосредственно конструктор суперкласса: super().

При этом, если суперкласс не имеет конструктора без списка параметров, то происходит ошибка компиляции.

Конструкторы не наследуются подклассами.

Тело конструктора заключается в фигурные скобки.

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

Конструктор может иметь следующее формальное описание:

ИмяКласса (СписокПараметров)  {  
              ВызовКонструкторов  
              БлокОператоров  
              }

Вызов конструкторов выполняется операторами this и super с указанием в скобках списка параметров.

Например:

public class C extends A {
  public C() {this(1,20);  }  
     // Вызов конструктора данного класса
  public C(int i, int j) { }
}

Вызов конструкторов подчиняется следующим правилам:

  • при создании объекта любого заданного класса будет неявно выполнена цепочка вызовов всех конструкторов его суперклассов;
  • первым будет выполнено тело конструктора для Object ;
  • каждый последующий конструктор в цепочке будет выполняться только после выполнения конструктора своего непосредственного суперкласса;
  • при создании объекта будут инициализированы все переменные экземпляра.

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

При создании объекта последовательно выполняются следующие действия: вызывается конструктор, создается новый объект указанного типа, и все переменные экземпляра инициализируются своими значениями по умолчанию, затем формируется ссылка на созданный и инициализированный объект. Эта ссылка и является значением выражения, создающего объект.

Объект может быть создан вызовом метода newInstance. В этом случае используется конструктор без списка параметров.

Статические переменные

Для каждого класса создается только один экземпляр статической переменной (переменой класса).

При описании статических переменных должны быть выполнены следующие правила:

  • статические переменные должны быть объявлены вне всякого метода;
  • статические переменные могут быть инициализированы при их объявлении или блоком кода, отмеченного ключевым словом static, и также расположенным вне метода.

Инициализация статических переменных выполняется при загрузке класса. Инициализация переменных выполняется в порядке их следования в объявлении класса.

Например:

public class C {
  public C() {  }
   static int b=3;
   static int c;
   static  { b++; c = 10; }  
     // Инициализация статической переменной
}

При инициализации статических переменных можно вызывать статические методы.

< Лекция 13 || Лекция 14: 1234 || Лекция 15 >
Александр Демьяненко
Александр Демьяненко

Можно ли сдавать один и тот же тест несколько раз?
Или же один и тот же тест можно сдать лишь однажды?

Максим Стогний
Максим Стогний

Добрый день!

Скажите, пожалуйста, если в терминологии объектно-ориентированного программирования функции также называются методами или методами - членами класса, в примере объявления указателя на метод использовали в формальном описании оба названия:

тип_метода (имя_класса::*имя_метода_указателя)
    (список параметров);
тип_функции (*имя_ функции_указателя)
    (список параметров);

при этом можно было  тип_функции во втором описании заменить на тип_метода? Т.е.:

тип_метода (*имя_ метода_указателя)
    (список параметров);