#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 экземпляров:
- Создание в строке 3 (
new Point (1 ,1)
) - Шесть из них создаются в цикле for и еще шесть внутри
addition
вызова метода. - Один в строке 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 для его отладки , это развеет ваши сомнения . Спасибо.