【Java】インスタンスメソッドとクラスメソッドの違いを解説

結論

クラスをインスタンス化しないと使えないメソッドがインスタンスメソッドです。逆にインスタンス化しなくても使えるのがクラスメソッドです。文法的な違いは戻り値の前にstaticをつけるかつけないかの違いがあります。クラスメソッドにはstaticをつけるので、staticメソッドとも呼ばれます。実際のコードを見て確認してみます。

 



実際のコードで確認する

以下のようなClassMethodクラスを作成します。ClassMethodクラスはインスタンス変数とクラス変数をそれぞれ一つずつ持っています。これらのフィールドも同じように、クラス変数はインスタンス化しなくてもアクセスすることができます。またClassMethodクラスはクラスメソッドであるprint1()とインスタンスメソッドであるprint2()を持っています。

public class ClassMethod {
	String str1 = "This is not static field";

	static String str2 = "This is static field";

	static void print1() {
		System.out.println(str2);
	}

	void print2() {
		System.out.println(str1);
	}
}

下記の画像はEclipseにて作成したコードのスクショです。クラスメソッドであるprint1()はClassMethodがインスタンス化されてない状態でも、利用できます。しかしインスタンスメソッドであるprint2()はインスタンス化されていないので赤い線がでています。このままでは実行することはできません。

 



インスタンスメソッドを使うためにはクラスをインスタンス化しなければ使うことができません。コードをかくと以下のような感じになります。

public class Main {

	public static void main(String[] args) {
		// staticのついたクラスメソッドはインスタンス化しなくてもクラス名.メソッド名で実行することが可能。
		ClassMethod.print1();

		// インスタンスメソッドはインスタンス化してからでないと実行することができない。
		ClassMethod cm = new ClassMethod();
		cm.print2();
	}

}

上記のコードを実行すると以下の通りになります。

This is static field
This is not static field

まとめ

クラスメソッドとインスタンスメソッドの違いについて解説してみました。結論はインスタンス化しなくても使えるのがクラスメソッド、インスタンス化しなければ使うことができないのがインスタンスメソッドとなります。

コメント

タイトルとURLをコピーしました