2012-10-19 75 views
3

可能重复:
calling non-static method in static method in Java如何从一个静态方法调用非静态方法

是否可以调用从静态方法非静态方法?非静态位于另一个类中,它必须是非静态的。

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

的代码不给任何错误在Eclipse(安卓4.0.4),但如果我运行我的应用程序冻结和关闭。

+5

是的,这是可能的(如果不是,它不会编译)。这不是它冻结的原因。 由于某些其他原因,更多可能出现'isNetworkAvailable()'方法冻结。 – assylias

+0

post stacktrace – njzk2

+0

或CheckConnection的c'tor。在调试模式下运行时查看堆栈跟踪可能会发现问题。 – breezee

回答

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实例,这样就可以调用它。

所以在你的代码中没有问题从静态方法的非静态方法可能是一些其他的东西负责应用程序冻结。

+0

非常感谢! CheckConnection确实包含一些错误,现在我明白了! – ObAt

+0

您的欢迎。在那做一些调试。 –

1

是的,这是可能的。问题必须出现在您的方法isNetworkAvailable中。

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

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 
     } 
    } 

如果是这种情况,那么它应该工作。

1

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

1

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

是的。

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

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

从静态上下文中调用非静态方法不是原因。可能是理由在isNetworkAvailable之内。