見出し画像

static

Javaに戻ります。
今回はコンストラクタの続きで、staticを学習します。
相変わらずYoutubeのせかチャンをみて学習中。

今の自分のレベルだと導入の説明がしにくいので、いきなりコードをみていきます。

とりあえずコードを確認

コンストラクタ復習済みの前提で臨みます。
まずは、うまくいかないほうのコードです。

メインメソッド


設計図

コードを読むイメージとしては

メインメソッド
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を使って書き換えていく


メインメソッド


設計図

書き換えた部分は、コメントアウトの通りです。
設計図にて、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人ですも含め説明するので、もう一回メインメソッドを見ます

メインメソッド(上記と同じもの)

5行目:設計図の通り、static int counter = 0 の状態なので0人です。
9行目:7行目を経ることで、counterが++されているので0→1です。
13行目:11行目を経ることで、counterが++されているので1→2です。
なので、今回はカウントアップされていくことができます。


この記事が気に入ったらサポートをしてみませんか?