2016-12-01 14 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);
私は2の代わりに3行カウントを返します。 私は今Javaを学んでいるので、私はIntelliJの上のデバッガを実行して、明らかに引数なしでラインのコンストラクタのための二重呼び出し、このコンストラクタが実行さに思わ
Line line = new Line();
に二回あっライン
this(new Line(0, 0, 0, 0));
をダブルテイクがあると私は私を破壊していますがありますそれの上に頭を下げる。誰かが私にここで何が起こっているか説明することができますか? 結局のところ、オーバーロードするコンストラクタは、あまりにも健全ではありません。

+0

これを書きましたか?間違いなく間違いのようです。これは 'this(0、0、0、0);'でなければなりません。 – shmosel

+0

はい - いくつかの古い本から学ぶときにコードを一緒に噛み合わせていますが、それは問題のようです。どうもありがとう!! – ItzikH

答えて

1
  1. ライン=新しい行(100、100、200、200)。
  2. this(new Line(0、0、0、0));
  3. この(改行(0、0、0、0));

はちょうどthis(0, 0, 0, 0);

0

this(new Line(0, 0, 0, 0));は、あなたがそのパラメータ化コンストラクタとLineクラスの新しいオブジェクトである引数を入れていることを意味する必要があります。

this(0, 0, 0, 0);はあなただけには、あなたのコードでは、あなたのthisがクラスLineを表し好むthisコンストラクタに値を入れていることを意味します。だからこれはうまくいくはずです。

関連する問題