Spec-Zone .ru
спецификации, руководства, описания, API
След: Изучение Языка Java
Урок: Классы и Объекты
Раздел: Объекты
Создание Объектов
Домашняя страница > Изучение Языка Java > Классы и Объекты

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

Как Вы знаете, class обеспечивает проект объектов; Вы создаете объект из class. Каждый из следующих операторов, взятых от CreateObjectDemo программа создает объект и присваивает его переменной:

Point originOne = new Point(23, 94);
Rectangle rectOne = new Rectangle(originOne, 100, 200);
Rectangle rectTwo = new Rectangle(50, 100);

Первая строка создает объект Point class, и вторые и третьи строки каждый создает объект Rectangle class.

У каждого из этих операторов есть три части (обсужденный подробно ниже):

  1. Объявление: кодовый набор полужирным является всеми объявлениями переменной, которые связывают имя переменной с объектным типом.
  2. Инстанцирование: ключевое слово new является оператором Java, который создает объект.
  3. Инициализация: оператор new сопровождается звонком в конструктора, который инициализирует новый объект.

Объявление, что Переменная Обращается к Объекту

Ранее, Вы узнали, что, чтобы объявить переменную, Вы пишете:

type name;

Это уведомляет компилятор, что Вы будете использовать имя, чтобы обратиться к данным, тип которых является типом. С примитивной переменной это объявление также резервирует надлежащий объем памяти для переменной.

Можно также объявить ссылочную переменную на ее собственной строке. Например:

Point originOne;

Если Вы объявляете originOne как это, его значение будет неопределенным, пока объект не будет фактически создан и присваивается этому. Просто объявление ссылочной переменной не создает объект. Для этого Вы должны использовать new оператор, как описано в следующем разделе. Следует присвоить объект originOne прежде, чем Вы будете использовать это в своем коде. Иначе, Вы получите ошибку компилятора.

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

originOne является нулем.

Инстанцирование Класса

Оператор new инстанцирует class, выделяя память для нового объекта и возвращая ссылку на ту память. Оператор new также вызывает объектного конструктора.


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

Оператор new требует единственного, постфиксного параметра: звонок в конструктора. Имя конструктора обеспечивает имя class, чтобы инстанцировать.

Оператор new возвращает ссылку на объект, который она создала. Эта ссылка обычно присваивается переменной соответствующего типа, как:

Point originOne = new Point(23, 94);

Ссылка, возвращенная оператором new, не должна быть присвоена переменной. Это может также использоваться непосредственно в выражении. Например:

int height = new Rectangle().height;

Этот оператор будет обсужден в следующем разделе.

Инициализация Объекта

Вот является код для Point class:

public class Point {
    public int x = 0;
    public int y = 0;
    //constructor
    public Point(int a, int b) {
        x = a;
        y = b;
    }
}

Этот class содержит единственного конструктора. Можно распознать конструктора, потому что его объявление использует то же самое имя в качестве class, и у этого нет никакого типа возврата. Конструктор в Point class берет два целочисленных параметра, как объявлено кодом (int a, int b). Следующий оператор обеспечивает 23 и 94 как значения для тех параметров:

Point originOne = new Point(23, 94);

Результат выполнения этого оператора может быть иллюстрирован в следующем числе:

originOne теперь указывает на Точечный объект.

Вот является код для Rectangle class, который содержит четырех конструкторов:

public class Rectangle {
    public int width = 0;
    public int height = 0;
    public Point origin;

    // four constructors
    public Rectangle() {
        origin = new Point(0, 0);
    }
    public Rectangle(Point p) {
        origin = p;
    }
    public Rectangle(int w, int h) {
        origin = new Point(0, 0);
        width = w;
        height = h;
    }
    public Rectangle(Point p, int w, int h) {
        origin = p;
        width = w;
        height = h;
    }

    // a method for moving the rectangle
    public void move(int x, int y) {
        origin.x = x;
        origin.y = y;
    }

    // a method for computing the area 
    // of the rectangle
    public int getArea() {
        return width * height;
    }
}

Каждый конструктор позволяет Вам обеспечивать начальные значения для размера прямоугольника и width, используя и типы примитивов и ссылочные типы. Если у class есть многократные конструкторы, у них должны быть различные подписи. Компилятор Java дифференцирует конструкторов, основанных на числе и типе параметров. Когда компилятор Java встречается со следующим кодом, он знает, чтобы вызвать конструктора в Rectangle class, который требует параметра Point, сопровождаемого двумя целочисленными параметрами:

 
Rectangle rectOne = new Rectangle(originOne, 100, 200);

Это вызывает один из Rectangle's конструкторы, который инициализирует origin к originOne. Кроме того, наборы конструктора width к 100 и height к 200. Теперь есть две ссылки на тот же самый Point object — у объекта могут быть многократные ссылки на него, как показано в следующем числе:

Теперь переменная источника прямоугольника также указывает на Точку.

Следующая строка кода вызывает Rectangle конструктор, который требует двух целочисленных параметров, которые обеспечивают начальные значения для width и height. Если Вы осмотрите код в пределах конструктора, то Вы будете видеть, что он создает новый объект Point, x которого и значения y инициализируются к 0:

Rectangle rectTwo = new Rectangle(50, 100);

Конструктор Rectangle, используемый в следующем операторе, не берет параметров, таким образом, он вызвал конструктора без параметров:

Rectangle rect = new Rectangle();

У всех классов есть по крайней мере один конструктор. Если class явно не объявляет никого, компилятор Java автоматически предоставляет конструктору без параметров, названному конструктором по умолчанию. Этот конструктор по умолчанию вызывает конструктора родителя class без параметров, или Object конструктор, если у class нет никакого другого родителя. Если у родителя нет никакого конструктора (Object действительно имеет один), компилятор отклонит программу.


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Объекты
Следующая страница: Используя Объекты