2012-10-19 248 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之內。

相關問題