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方法上。

如果无法从静态方法调用非静态方法,Java 应用程序将无法工作,因为 main 本身就是静态的。

于 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 回答
1

调试您的 isNetworkAvailable()方法。如果可能的话try catch,在该方法中有一个块并打印异常的堆栈跟踪。

于 2012-10-19T11:47:14.487 回答
1

是否可以从静态方法调用非静态方法?

是的。

由于您已经创建了 的对象CheckConnection,因此您可以使用它的引用调用该方法。否则它将是一个编译时错误。

但如果我运行它,我的应用程序会冻结并关闭。

从静态上下文调用非静态方法不是原因。可能原因就在里面isNetworkAvailable

于 2012-10-19T11:47:18.527 回答