KATOエンジニヤリング開発日誌

「アウトプット無きエンジニアにインプットもチャンスも無い」の精神で書いています

Javaのインスタンスメソッドとクラスメソッドについて学ぶ

「Javaプログラミング技法」の第7回目の授業内容まとめになります。

※前回授業の内容はこちら

www.kato-eng.info

クラスメソッド

クラスメソッドとは「new」で生成された個々のインスタンスではなく、クラスに関連付けられたメソッドのことである。

クラスメソッドの呼び出し例は下記を参照。

// StaticTest.java

class StaticTest {
    public int x;
    public static int s; // クラス変数にはstaticをつける

    public static void fanc() {
        // クラス変数「s」はクラスメソッドの中からアクセスできる
        s = 3;
        /*
        クラスメソッド内では「this」を使用できない
        this.s = 3;
        クラスメソッド内ではインスタンス変数にアクセスできない
        x = 10;
        */
    }
}
// Example.java

class Example {
    public static void main(String[] args) {
        // StaticTest型のインスタンスを生成
        StaticTest test = new StaticTest();
        // インスタンス変数へは「インスタンスを格納した変数名.インスタンス変数」でアクセスできる
        test.x = 10;

        // クラスメソッドの呼び出しは「クラス名.関数名」で呼び出す
        StaticTest.fanc();

        /*
        「インスタンスを格納した変数名.クラスメソッド」は推奨されない
        test.func()
        */
    }
}

またクラスメソッドはクラスをインスタンス化する前でも呼び出すことができる。

// StaticTest.java

class StaticTest {
    public int x;
    public static int s;

    public static void fanc() {
        // クラス変数「s」はクラスメソッドの中からアクセスできる
        s = 3;
        System.out.println(s);
    }
}
// Example.java
class Example {
    public static void main(String[] args) {
        // StaticTest型のインスタンスは生成しない
        //StaticTest test = new StaticTest();

        // インスタンスを生成せず、クラスメソッドの呼び出しを行う
        StaticTest.fanc();
    }
}

出力結果は下記のようになる。

3
  • クラスメソッドはクラスに関連付けられ、クラス全体に作用する
  • クラスメソッドはインスタンスが無くても呼び出すことができる
  • インスタンスを通してクラスメソッドを呼び出すことは推奨されない

※次回授業の内容はこちら

www.kato-eng.info