我正在练习java,并试图了解这是一个错误还是故意: 我试图了解浅拷贝和硬拷贝+静态类成员+重载之间的区别构造函数在构造函数中使用this
+我做了这个代码在网状的东西在一起,有些事情对不上号:Java构造函数重载错误?
package com.example.java;
import java.awt.*;
public class Test {
Line line;
public Test() {
line = new Line(100, 100, 200, 200);
line.draw();
}
public static void main(String[] args) {
Test shapes = new Test();
Line line = new Line();
System.out.println("totalLines in app: " + line.count);
}
}
class Line {
private Point p1, p2;
static int count = 0;
Line(){
this(new Line(0, 0, 0, 0));
}
Line(int x1, int y1, int x2, int y2) {
p1 = new Point(x1, y1);
p2 = new Point(x2, y2);
count++;
}
Line(Line l1) {
p1 = l1.p1;
p2 = l1.p2;
count++;
}
void draw() {
System.out.println("Line p1= " + p1 + "\t,p2= " + p2);
}
}
问题是:当我打电话计数行号的下一行
System.out.println("totalLines in app: " + line.count);
我得到3行数而不是2 因为我现在在学习java ,我运行的IntelliJ调试器,显然没有对
Line line = new Line();
双重呼吁行构造不带参数此构造似乎运行两次有上线
this(new Line(0, 0, 0, 0));
恍然大悟,我打破我的头朝下。有人可以向我解释这里发生了什么? 也许重载构造函数并不健康,如果你不知道如何实现它,你的重载不必要的对象和垃圾?
你写这个吗?这绝对看起来像一个错误。它应该是'this(0,0,0,0);'。 – shmosel
是的 - 当我从某本旧书中学习时,我将代码结合在一起,这似乎是问题所在。非常感谢!! – ItzikH