Java

【インスタンス化しない!?】静的メンバー

メンバ

メンバとは?

メンバ=フィールド+メソッド

・メンバとは、クラスのフィールドとメソッドをまとめた言い方になります。

メンバの特徴

・フィールドが格納される領域は個々のインスタンスごとに用意される
・インスタンスを生成しないと利用はできない

静的メンバ

静的メンバとは?

静的メンバ=静的フィールド+静的メソッド

静的メンバとは、クラスの静的フィールドと静的メソッドをまとめた言い方になります。

静的メンバの特徴

・静的フィールドの箱はインスタンスではなくクラスに対して1つだけ用意される。
→そのためインスタンスしなくてメンバが利用できる
・全インスタンスに、静的メンバの分身が準備される
→どのインスタンスからいじっても同じ静的メンバをいじっていることになる。

宣言方法

staticキーワードを追加する

  // 例
    static int a;
プログラム
class Hero {
    static int money;

    Hero(int money) {
        this.money = money;
    }
}

class main {
    public static void main(String[] args) {

        Hero h1 = new Hero(1);
        Hero h2 = new Hero(2);
        Hero h3 = new Hero(3);

        System.out.println("this is h1 " + h1.money);// 3
        System.out.println("this is h2 " + h2.money);// 3
        System.out.println("this is h3 " + h3.money);// 3
        System.out.println("this is Hero " + Hero.money);// 3
    }
}
静的フィールド

・h1.moneyやh2.moneyという静的フィールドに値を代入すれば本物の静的フィールドのHero.moneyにその値が代入される

・インスタンスを1つも生成しなくても静的フィールドを利用できるようになる
→Hero.moneyは、インスタンスではなくてクラス上に作られるようになるためである。

静的メソッド

・インスタンスを生成しなくても利用できる
→public static void main(String[] args){~~~}はstaticがないと実行できなくなっている

・メソッド自体がクラスに属するようになる 静的メソッドは、その実態が各インスタンスではなくクラスに属し、クラス名.メソッド名();で呼び出せるようになる

・インスタンスにメソッドの分身が準備される インスタンス変数名.メソッド名;で呼び出せる

・静的メソッド中でアクセスできるのは、静的メンバだけ 静的メソッドの中に記述するコードでは、staticがついていないフィールドやメソッドは利用できない