- ベストアンサー
javaのインスタンス変数とクラス変数の意味がわからない。
かなり初心者です。全然意味がわかりません。教えてください。よろしくおねがいします。 この意味すべてわからないです。 public class TestCount{ static int counterA; int counterB; public static void main(String []args){ TestCount testA=new TestCount(); TestCount testB=new TestCount(); testA.count(); testB.count(); } public void count(){ for(int i=0;i<5;i++){ counterA++; counterB++; } System.out.println("counterA="+counterA); System.out.println("counterB="+counterB); } } 実行結果 counterA=5 counterA=5 counterB=10 counterB=5 なんでこうなるのかが知りたいです。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>この意味すべてわからないです。 順を追って説明して見ましょう。 public class TestCount{ //クラスTestCout定義 static int counterA; //static変数counterAの定義 int counterB; //普通の変数counterB定義 public static void main(String []args){ TestCount testA=new TestCount(); //インスタンスtestAの生成 TestCount型の変数testAの定義とメモリ領域の確保 TestCount testB=new TestCount(); //インスタンスtestBの生成 TestCount型の変数testBの定義とメモリ領域の確保 testA.count(); //testAのメソッドcount()の呼出し testB.count(); //testBのメソッドcount()の呼出し } public void count(){ //メソッドcount()の定義 for(int i=0;i<5;i++){ counterA++; //counterA=cunterA+1 counterB++; //counterB=cunterB+1 } System.out.println("counterA="+counterA); System.out.println("counterB="+counterB); } }
その他の回答 (3)
- fortranxp
- ベストアンサー率26% (181/684)
本当はこうなるはず。 counterA=5 counterB=5 counterA=10 counterB=5 結果を見てえっ。と 思ってしまいました。 理由はBLUEPIXYさんが述べられているとおり counterAはstatic変数なのでどこかで初期化 されない限り値が保持されるためです。
- javatea_1985
- ベストアンサー率0% (0/2)
ごめんなさい、横槍を入れさせてください。。 えと、 public void count(){ for(int i=0;i<5;i++){ counterA++; counterB++; } の部分は testA.count(); testB.count(); } によって2回転しますよね? それならcounterAとcounterBの合計は20になるはずではないのですか?? ところが実行結果は合計25になっています。。 これはどうしてなのですか? あと、counterAとcounterBの表示が交互にこないのはなぜなのですか?? 質問者の解答を差し置いての発言、失礼しました。m(__)m
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
クラス変数counterA は、クラスに共通な変数で1つしかありません。 インスタンス変数counterB は、インスタンス毎作られます。 なので、testA と testB のcounterB は、それぞれ別のものですが、 counterA は、testA と testB で共通の同じものです。 なので、counterB は、5回カウントアップされるので、5になり、 counterA は、testA testB で5回ずつカウントアップされるので、10になります。
お礼
よくわかりました。ありがとうございました。
お礼
わかりやすく教えていただきありがとうございました。