LoginSignup
3

More than 1 year has passed since last update.

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

Posted at

はじめに

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

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

staticメソッドについて

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

Main.java
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メソッドについて

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

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

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

Main.java
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メソッドについて

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3