如何从静态方法调用非静态方法

时间:2012-10-19 11:42:18

标签: java android static android-4.0-ice-cream-sandwich non-static

  

可能重复:
  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(Android 4.0.4)中没有给出任何错误,但如果我运行它,我的应用程序会冻结并关闭。

5 个答案:

答案 0 :(得分: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的实例,因此您可以调用它。

因此,使用静态方法非静态方法的代码中没有问题可能是应用程序冻结的其他因素。

答案 1 :(得分:1)

是的,这是可能的。问题必须在于isNetworkAvailable方法。

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

答案 2 :(得分: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
      }
   }

如果这是情景,那么它应该有用。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

  

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

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

  

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

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