😀

Java staticメソッドと非staticメソッド・呼び出しで手こずった件

2021/05/11に公開

#はじめに
メソッドの呼び出しで手こずったので、忘れないようにメモしておきます。
間違いありましたら、コメント頂けますと幸いです。

ということで、staticと非staticの呼び出しについてやっていきます。

#staticメソッドについて
調べてみると、staticなメソッドというのはインスタンスを生成しなくも使用できるメソッドだということのようですが、初心者の私にはイマイチstaticと非staticのメソッドの違いがわからず、下記コードを実行しました。

public class Main {
	
	 public static void main(String[] args) {
		
		 	
		 	String firstName = "hoge";
		 	String lastName = "huga";

	        //getName関数の呼び出しと出力
	        System.out.println(getName(firstName, lastName));
	        System.out.println();

   }

   public String getName(String first_name, String last_name) {
     return last_name + first_name;
   }

すると、こんなエラーが出ました。

型 Main の非 static メソッド getName(String, String) を static 参照することはできません

解読すると、どうやら「Mainメソッド内で非staticなメソッドであるgetNameは参照できない」ということのようです。

つまり、staticなメソッド(main)から同一クラス(Main)内の非staticなメソッド(getName)へは直接アクセスできない
ということです。

では、どうすれば解決できるのかを説明致します。

#メソッドの呼び出し
Java staticメソッドと非staticメソッドについて

上記記事を参考にやらせていただいた結果、「クラスのインスタンスを生成し、インスタンスを通して実行する」というやり方で解決できました。

クラスのインスタンスを生成し、インスタンスを通して実行する

どういうことかというと、下記コードのような状態にして解決しました。

public class Main {
	
	 public static void main(String[] args) {
		
		 	
		 	String firstName = "hoge";
		 	String lastName = "huga";

	        //getName関数の呼び出しと出力
            //Mainクラスのインスタンスを生成
            Main m = new Main();
       //インスタンスmのgetNameメソッドの呼び出し
	        System.out.println(m.getName(firstName, lastName));
	        System.out.println();

   }

   public String getName(String first_name, String last_name) {
     return last_name + first_name;
   }

このようにすることで、Mainクラスのインスタンスmをmainメソッド内で生成することで、インスタンスmを通してgetNameメソッドを呼び出すことができるのです。

要するに、直接的にアクセスするのではなく、インスタンスを介して間接的にアクセスすることで、mainメソッド外の非staticなメソッドを呼び出すことを可能にするということです。

ぜひ、参考になれば嬉しいです。

#参考文献
Java staticメソッドと非staticメソッドについて

Discussion