Нужно знать порядок, в котором конструкторы вызываются в программе - PullRequest
0 голосов
/ 31 июля 2011

Мне нужно знать порядок, в котором будут вызываться конструкторы.

Класс очков:

public class Point
{
    public int x = 0;
    public int y = 0;

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

Класс прямоугольника:

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;
    }
}

Класс, который создает объекты:

public class CreateObjectDemo {
    public static void main(String[] args) {

        //Declare and create a point object
        //and two rectangle objects.
        Point originOne = new Point(23, 94);
        Rectangle rectOne = new Rectangle(originOne, 100, 200);
        Rectangle rectTwo = new Rectangle(50, 100);
        System.out.println("Width of rectOne: " +  rectOne.width);
        System.out.println("Height of rectOne: " + rectOne.height);
        System.out.println("Area of rectOne: " + rectOne.getArea());

        rectTwo.origin = originOne;
    }
}
  1. В каком порядке называются конструкторы в классе Rectangle?

  2. Когда будет звонить public Rectangle(Point p)?

  3. Что делает заявление rectTwo.origin = originOne?

Программа взята с сайта Oracle Java Tutorial.

Ответы [ 4 ]

2 голосов
/ 31 июля 2011
  1. Вызовы конструктора:
    Точка (int, int)
    Прямоугольник (Point, int, int)
    Прямоугольник (int, int)
    Точка (int, int)

  2. Прямоугольник (точка) никогда не вызывается.

  3. Этот оператор устанавливает источник rectTwo в originOne.

2 голосов
/ 31 июля 2011
  1. Все конструкторы, вызываемые в этой программе, выполняются в следующем порядке:

    Point(int x, int y)
    Rectangle(Point p, int w, int h)
    Rectangle(int w, int h)
    Point(int x, int y) // (called by Rectangle)
    
  2. Пока нигде не называется.
  3. Это делает rectTwo "происхождение" равным источнику, представленному originOne
1 голос
/ 31 июля 2011

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

  • Параметры методов и конструкторов оцениваются перед самим методом / конструкторами
  • Программа начинается с основного метода.

Таким образом, мы имеем следующий порядок:

  1. Point originOne = new Point(23, 94); - это вызовет конструктор Point.
  2. Rectangle rectOne = new Rectangle(originOne, 100, 200); - это вызовет конструктор Rectangle с точкой и двумя int аргументами.
  3. Rectangle rectTwo = new Rectangle(50, 100); - это вызовет конструктор Rectangle с двумя int аргументами.

    1. Этот конструктор, в свою очередь, будет origin = new Point(0, 0); вызывать конструктор Point.

Больше нет явных вызовов конструктора. Но каждый из этих вызовов включает в себя неявный вызов конструктора его суперкласса (который здесь Object) в начале.

Конструктор Rectangle(Point), кажется, вообще не вызывается.

rectTwo.origin = originOne; меняет начало второго прямоугольника с (0,0) на ту же точку, которая используется rectOne, например, (23,94).

1 голос
/ 31 июля 2011

1.) Для каждого из двух экземпляров вызывается только один конструктор.Порядок на основе метода main:

public Rectangle(Point p, int w, int h)
public Rectangle(int w, int h)

2.) Никогда.

3.) Измените поле origin объекта rectTwo на originOne, чтобыPoint rectTwo.origin теперь (23,94) вместо (0,0).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...