static 〜 静的メソッド
staticはメソッドにもつけられる
静的フィールド+静的メソッド→静的メンバ
★ 静的メソッドを定義すると、静的フィールドと同様に3つの効果が現れる
1. メソッド自体は金型のクラスの方につく
・・・「クラス名.メソッド名( );」で呼び出す
2.もちろんインスタンスからも呼び出すことが出来る。
インスタンスの方にはクラスからその分身が準備される。
3.金型のクラスの方についているので、インスタンスを生み出さなくても呼び出すことが出来る
〈静的メソッドの制約〉
静的メソッドの中に記述するコードでは、
staticがついていないフィールドやメソッドは記述できない
ex. class Hero{
String name;
static int money; //静的フィールド
static void setRondomMoney( ){ //静的メソッド
Hero.money=(int)(Math.Rondom( )*1000);//int型に強制変換
System.out.println("所持金は"+static int money+"円");
//staticなフィールドを呼び出しているので、OK
System.out.println(this.name+"たちの所持金");
//nameはstaticではないフィールドを記述しているので、エラー
(thisは自分自身のインスタンスの情報であることを表す)
}
なぜ制約が出来たのか?
staticのついた静的メソッドは、金型であるクラスの方についているので、
インスタンスが存在していない状況でも呼び出すことが出来るメソッド
・・・もし自分自身のインスタンスを表すthisの記述をしてしまうと、インスタンスが存在していない状況で呼び出された時に対応できなくなる
通常のフィールドはインスタンス化された時点からしか存在しない。よって、インスタンス化される前では、記述があってもまだ仮想世界に存在してない
↕︎
staticがついているフィールドはインスタンス化される前から存在している
対応できなくなるような事態を防ぐために、Javaは
「staticがついているものしかstaticの内部には記述しないという制約」を作った