![見出し画像](https://assets.st-note.com/production/uploads/images/114341811/rectangle_large_type_2_c210a797bbf674c0e3f3acea9f4ba959.png?width=1200)
static
Javaに戻ります。
今回はコンストラクタの続きで、staticを学習します。
相変わらずYoutubeのせかチャンをみて学習中。
今の自分のレベルだと導入の説明がしにくいので、いきなりコードをみていきます。
とりあえずコードを確認
コンストラクタ復習済みの前提で臨みます。
まずは、うまくいかないほうのコードです。
![](https://assets.st-note.com/img/1692952396465-z2B8PGzPLm.png)
![](https://assets.st-note.com/img/1692952512934-Qt6We6EsUX.png?width=1200)
コードを読むイメージとしては
メインメソッド
4行目:コンストラクタでstu1のオブジェクト生成
5行目:設計図クラスの15行目(void display~)を呼び出しています。
7行目:コンストラクタでstu2のオブジェクト生成
8行目:設計図クラスの15行目(void display~)を呼び出しています。
設計図
5行目:String型の変数nameを設定
6行目:int型の変数counterを0と初期化した。
9行目~:メソッドの設定。Student4からstring nを受け取る。name=nとする。counter++なので、6行目で設定したcounter=0に+1され、「1」になる
System~では、name=nで受け取った値が入り、Xさんをインスタンス化しました。と出力される。
15行目:System~を実行するメソッドとして設定された変数display
なんとなくの出力イメージをします。
①Student4 stu1 = new Student4("菅原");
②stu1.display();
③Student4 stu2 = new Student4("村山");
④stu2.display(); }
①について
「菅原」を設計図に渡す(設計図9行目)
name=n=菅原 となる。
counter++ で
int counter = 0 だったのが1になる
System~で「菅原さんをインスタンス化しました」と出力される
②について
stu1について、設計図15行目のdisplayでのメソッドを呼び出す。
System~が出力される。
counterは上記①を経て1になっている
つまり、「1人です」と出力される。
③について
「村山」を設計図に渡す(設計図9行目)
name=n=村山 となる。
counter++ で
int counter = 0 だったのが1になる
System~で「村山さんをインスタンス化しました」と出力される
④について
stu2について、設計図15行目のdisplayでのメソッドを呼び出す。
System~が出力される。
counterは上記③を経て1になっている
つまり、「1人です」と出力される。
<出力結果>
菅原さんをインスタンス化しました
1人です
村山さんをインスタンス化しました
1人です
なぜ、村山さんの後が2人ですとならないのでしょうか。
それは、couterがオブジェクト毎に処理されているからです。
stu1とstu2というオブジェクトをつくったので、それぞれにcounterという変数領域がとられているので、counterが0→1と毎回なってしまうのです。
でもカウントアップをしていきたい、そこで使うのが「static」です。
staticを使って書き換えていく
![](https://assets.st-note.com/img/1692954875301-XIA790w3w2.png)
![](https://assets.st-note.com/img/1692954897758-wPGPj52M2P.png?width=1200)
書き換えた部分は、コメントアウトの通りです。
設計図にて、int=counter = 0 の前にstaticをいれることで、それぞれのオブジェクトから出したみたいなイメージ?で良いと思います。
前はオブジェクト毎にカウントしていたけど、カウンターは外にあって、それぞれのオブジェクトをカウントしてくれてるみたいな・・・説明がむずいです。泣
メインメソッドにて確認するよよりわかるかもしれないです。
<抜粋>
①Student4 stu1 = new Student4("菅原");
②//stu1.display( );→下記のように書き換え
③Student4.display( );
こうある訳ですが
①は問題ないですよね。そのままです。
「菅原」を設計図に渡す(設計図10行目)
name=n=菅原 となる。
counter++ で
int counter = 0 だったのが1になる
System~で「菅原さんをインスタンス化しました」と出力される
大切なのが次以降です。
②は前の書き方です。コメントアウトしてます
②と③を比較してよく見てください。
stu1をStudent4と変えているんです。
これで、オブジェクト(stu1)の中にあったカウンターを取り出した。
といったイメージでしょうか。
<出力結果>
0人です
菅原さんをインスタンス化しました
1人です
村山さんをインスタンス化しました
2人です
0人ですも含め説明するので、もう一回メインメソッドを見ます
![](https://assets.st-note.com/img/1692955637407-j2gZsXkQD9.png)
5行目:設計図の通り、static int counter = 0 の状態なので0人です。
9行目:7行目を経ることで、counterが++されているので0→1です。
13行目:11行目を経ることで、counterが++されているので1→2です。
なので、今回はカウントアップされていくことができます。
この記事が気に入ったらサポートをしてみませんか?