3

重複の可能性:
Java の静的メソッドで非静的メソッドを呼び出す

静的メソッドから非静的メソッドを呼び出すことは可能ですか? 非静的は別のクラスにあり、非静的である必要があります。

    public static void start() {
        CheckConnection checkInternet = new CheckConnection();
        if (checkInternet.isNetworkAvailable()) {
            // Has internet Connection
            } else {
            // No Internet Connection
        }
 }

このコードは Eclipse (Android 4.0.4) ではエラーになりませんが、実行するとアプリケーションがフリーズして閉じます。

4

5 に答える 5

5
The only way to call a non-static method from a static method is you should have
an instance of the class containing the non-static method.

あなたの質問のように:

 CheckConnection checkInternet = new CheckConnection();
    if (checkInternet.isNetworkAvailable()) {
        // Has internet Connection
        } else {
        // No Internet Connection

のインスタンスがあるCheckConnectionので、それを呼び出すことができます。

したがって、静的メソッドからの非静的メソッドを使用したコードに問題はありません。アプリケーションのフリーズは、他の何かが原因である可能性があります。

于 2012-10-19T11:45:43.000 に答える
1

メソッドにデバッグします isNetworkAvailable()。可能であれば、try catchそのメソッド内にブロックを配置し、例外のスタックトレースを出力します。

于 2012-10-19T11:47:14.487 に答える
1

静的メソッドから非静的メソッドを呼び出すことは可能ですか?

はい。

のオブジェクトを作成したので、CheckConnectionその参照を使用してメソッドを呼び出すことができます。そうしないと、コンパイル時エラーになります。

しかし、それを実行すると、アプリケーションがフリーズして閉じます。

静的コンテキストから非静的メソッドを呼び出すことは理由ではありません。理由は内にある可能性がありますisNetworkAvailable

于 2012-10-19T11:47:18.527 に答える
1

はい、可能です。問題はあなたのisNetworkAvailable方法にあるに違いありません。

main 自体が静的であるため、静的メソッドから非静的メソッドを呼び出すことが不可能な場合、Java アプリケーションは機能しません。

于 2012-10-19T11:46:01.403 に答える
1

使用したい非静的メソッドを含むクラスのオブジェクトを作成するだけで、呼び出すことができます。

例えば ​​:

public class Test {
  public static void main(String[] args) {
        System.out.println("This is a static method");
        TestClass class1 = new TestClass();
        class1.nonStatic();
     }
 }

class TestClass{
    public void nonStatic(){
        System.out.println("This is a non-static method");
    }
}

あなたの問題では

public class A{
   public static void start() {
        CheckConnection checkInternet = new CheckConnection();
        if (checkInternet.isNetworkAvailable()) {
            // Has internet Connection
            } else {
            // No Internet Connection
        }
   }
}



public class CheckConnection {
    public boolean isNetworkAvailable()
      {
        //some code
      }
   }

これがシナリオであれば、うまくいくはずです。

于 2012-10-19T11:46:11.403 に答える