今回の記事ではインスタンスメソッドとクラスメソッドの違いについて解説していきます。
結論はクラスをインスタンス化しないと使えないメソッドがインスタンスメソッドです。
逆にインスタンス化しなくても使えるのがクラスメソッドです。
文法的な違いは戻り値の前にstaticをつけるかつけないかの違いがあります。
クラスメソッドにはstaticをつけるので、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
クラスメソッドとインスタンスメソッドの違いについて解説してみました。
結論はインスタンス化しなくても使えるのがクラスメソッド、インスタンス化しなければ使うことができないのがインスタンスメソッドとなります。