2016-12-01 102 views
0

我正在练习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));
恍然大悟,我打破我的头朝下。有人可以向我解释这里发生了什么? 也许重载构造函数并不健康,如果你不知道如何实现它,你的重载不必要的对象和垃圾?

+0

你写这个吗?这绝对看起来像一个错误。它应该是'this(0,0,0,0);'。 – shmosel

+0

是的 - 当我从某本旧书中学习时,我将代码结合在一起,这似乎是问题所在。非常感谢!! – ItzikH

回答

1
  1. line = new Line(100,100,200,200);
  2. this(new Line(0,0,0,0));
  3. this(new Line(0,0,0,0));

应该只是this(0, 0, 0, 0);

0

this(new Line(0, 0, 0, 0));意味着你是把一个参数,是Line类及其参数的构造函数的新对象。

this(0, 0, 0, 0);意味着你只能把值在this喜欢,在你的代码,你this表示类Line构造。所以这应该起作用,而不是你做的第一个。