является ли эта Point board = new Point[10] новым экземпляром Point?

#java #instance

#java #экземпляр

Вопрос:

У меня есть это упражнение, и они спрашивают меня, сколько экземпляров Point создано, и они отвечают 14, но я считаю 13, потому что я не считаю доску экземпляром. Так и есть ? и почему ? потому что для меня мы создаем новую доску с 10 местами размера точки, но мы не создаем ее экземпляр, потому что нам нужны x и y, чтобы сделать нет?

 public class Point {
    
    private double x, y;

    public Point(double x, double y) {
        this.x = x;
        this.y = y;
    }

    public Point addition(Point p) {
        return new Point(x   p.x, y   p.y);
    }

    public String toString() {
        return "Point [x="   x   " , y="   y   "]";
    }
}

public class Test {
    
    public static void main(String[] args) {
        Point p = new Point(1, 1);
        Point[] board = new Point[10];
        
        for (int i = 0; i < 6; i  )
            tab[i] = p.addition(new Point(i, 1));
            
        System.out.println(p);
        Point p2 = p;
        p2 = p.addition(tab[0]);
        System.out.println(p   " "   p2);
    }
}
 

Комментарии:

1. Пожалуйста, отправьте код с разумным интервалом (иначе нет System . out . p r i n t l n )

Ответ №1:

Да, ваша логика верна. Создание board (массива Point ) не предполагает создания каких-либо Point экземпляров. Это просто массив.

Но в Point коде создано 14 экземпляров:

  1. Создание в строке 3 ( new Point (1 ,1) )
  2. Шесть из них создаются в цикле for и еще шесть внутри addition вызова метода.
  3. Один в строке 9 (внутри addition метода).

Я думаю, вы пропустили последнее 🙂

Комментарии:

1. хо, да, спасибо!! потому что я верю, что это было то же самое, что и p.дополнение (tab[0]) и первое добавление в цикле для, но я плохо прочитал код … и даже это было то же самое дополнение, я забыл, что это было бы то же значение, но не та же точка

Ответ №2:

Пожалуйста, смотрите приведенный ниже код, он создается 14 раз. Я добавил один статический метод и статический объект для подсчета количества объектов. Кроме того, вы можете поместить точку отладки внутри конструктора и проверить себя, как она вызывается.

 public class Point
{

    private double x, y;
    private static int objectCount;//Counter to keep track of objects

    public  static int getObjectCount()
    {
        return objectCount;
    }
    public Point(double x, double y)
    {
        this.x = x;
        this.y = y;
        objectCount  ;
    }

    public Point addition(Point p)
    {
        return new Point (x   p.x, y   p.y );
    }

    public String toString()
    {
        return "Point [x="   x   " , y="   y   "]";
    }
}

 

Тестовый класс изменен для печати этого количества на разных этапах

 public class Test
{
    public static void main(String[] args)
    {
        Point p = new Point(1, 1);
        System.out.println("No of Objects created after new Point(1, 1) = "   Point.getObjectCount());
        Point[] board = new Point[10];
        for (int i = 0; i < 6; i  )
            board[i] = p.addition(new Point(i, 1));
        System.out.println("No of Objects created after  for loop  = "   Point.getObjectCount());
        System.out.println(p);
        Point p2 = p;
        p2 = p.addition(board[0]);
        System.out.println("No of Objects created after  p.addition(board[0]) = "   Point.getObjectCount());
        System.out.println(p   " "   p2);
    }
}

 

O / P — это

 No of Objects created after new Point(1, 1) = 1
No of Objects created after  for loop  = 13
Point [x=1.0 , y=1.0]
No of Objects created after  p.addition(board[0]) = 14
Point [x=1.0 , y=1.0] Point [x=2.0 , y=3.0]

 

Комментарии:

1. Спасибо!! Я подумаю о том, чтобы так считать в следующий раз 😉 , если у нас будет более 1 конструктора, который мы поместим objectCount ; во все из них ?!

2. Да, вы должны поместить это во все конструкторы

3. хорошо, спасибо, подробнее я не понимаю, почему p2 = Point [2.0, 3.0], а не Point [1.0, 2.0], потому что p2 = p = Point [1.0, 1.0] и board [0] = Point [0.0, 1.0] нет?

4. p2 = p.addition(board[0]); это создаст новый объект Point в соответствии с вашим определением функции сложения в классе Point . Во время создания вы увеличиваете точки X и Y с помощью переданного аргумента . Поместите оператор print между ними или используйте IDE для его отладки , это развеет ваши сомнения . Спасибо.