2017-05-17 3 views
0

私は、このコードの一部が何の働きをしているか知ることに問題があります。このコードのCount使用法と混同します。

ここにある:

public class fia1 { 
    public static void main(String [] args) { 
    Band b0 = new Band(); 
    b0.name = "Beastie"; 
    b0.age = 25; 
    Band b1 = new Band(); 
    b1.name = "Orchestra"; 
    b1.age = 100; 
    System.out.println(b0.count); 

    Band b2 = new Band(); 
    b2.name = "Polka"; 
    b2.age = 5; 

    System.out.println("Names: " + b0.name + " " + b1.name + " 
    " + b2.name); 
    System.out.println(Band.count); 
    b1 = b2; 
    b1.age = 10; 
    b0.age = b2.age + b0.age; 

    System.out.println("Ages = " + b0.age + " " + b1.age + " " 
    + b2.age); 
    } 
     } 

    class Band { 
    String name; 
    int age; 
    static int count = 1; 
    Band() { 
    count = count * 2; 
    } 
    } 

それでは、このプリントは次のとおりです。

4 
Names: Beastie, Orchestra, Polka 
8 
Ages: 35, 10, 10 

すると、私は私が私の最初のカウントから4を得る方法として混乱しています。また私はそれを知っている

static int count = 1; 

私は誤解しているところです。これは、Javaが変数をどのようにカウントするのでしょうか? 1、2はBeastie、3はOrchestra、4はPolkaです。私は本当にこれがどのように機能しているのか分かりません。ご協力いただきありがとうございます!

+0

コンストラクタで2を掛けて、カウントを出力するまでにコンストラクタ呼び出しを2回行ったことを確認してください。 –

答えて

0

それはstatic int count = 1;として宣言されますと、あなたの変数countは、静的なので、クラスのそれぞれの新しい建設は、カウントを持っているすべてのオブジェクトにcount上の任意のアクションを実行します。別の言い方をすると、b1を呼び出すと、count = count * 2;コマンドがcountのすべてのインスタンスに影響を与えるため、b0のカウント変数も2倍になります。

したがって、ときに最初b0band()を構築し、それはband()b1と原因の第2のインスタンスは、カウントのすべてのインスタンスがそう自体* 2に等しくなるようにcountを取り、1×2 = 2に等しいことを設定し、 b1のカウント= 2 1 * 2に等しく、b0でカウントが2に等しい* 2 = 4

2

あなたは新しいBand作成するたびに意味static int count = 1;static変数を使用しています変数はすべて2倍になりますBandscount = count * 2;以降)

何が起こるかを説明したコメントで以下

を参照してくださいコード:

public static void main(String [] args) 
{ 
    Band b0 = new Band(); //Count becomes 1*2 = 2. 
    b0.name = "Beastie"; 
    b0.age = 25; 

    Band b1 = new Band(); //Count becomes 2*2 = 4. 
    b1.name = "Orchestra"; 
    b1.age = 100; 
    System.out.println(b0.count); //Prints 4. 

    Band b2 = new Band(); //Count becomes 4*2 = 8. 
    b2.name = "Polka"; 
    b2.age = 5; 

    System.out.println("Names: " + b0.name + " " + b1.name + " " + b2.name); 
    System.out.println(Band.count); //Prints 8. 
    b1 = b2; 
    b1.age = 10; 
    b0.age = b2.age + b0.age; 

    System.out.println("Ages = " + b0.age + " " + b1.age + " " + b2.age); 
} 
+0

ああ!いいねありがとう!今私はそれを得る。もう一つの簡単な質問ですが、この部分は何ですか? "クラスバンド{ 文字列名; int型の年齢; 静的INTカウント= 1; バンド(){ カウント=カウント* 2; }}" コンストラクタ? – Neod

+0

'Band Band {...}'セクションのすべてがクラスですが、 'Band(){...}'セクションのすべてはBandクラスのコンストラクタです。 – dat3450

1

countフィールドあなたBandクラスではBandクラスのシェアのすべてのオブジェクトにそれを意味し、静的フィールドやクラス変数です。コンストラクタが呼び出されるたびにcountが更新されます。クラス変数の詳細については、Java documentation

関連する問題