Java 如何从静态方法调用非静态方法
可能重复:Java 如何从静态方法调用非静态方法,java,android,static,android-4.0-ice-cream-sandwich,non-static,Java,Android,Static,Android 4.0 Ice Cream Sandwich,Non Static,可能重复: 可以从静态方法调用非静态方法吗?非静态类位于另一个类中,它必须是非静态的 public static void start() { CheckConnection checkInternet = new CheckConnection(); if (checkInternet.isNetworkAvailable()) { // Has internet Connection } else {
可以从静态方法调用非静态方法吗?非静态类位于另一个类中,它必须是非静态的
public static void start() {
CheckConnection checkInternet = new CheckConnection();
if (checkInternet.isNetworkAvailable()) {
// Has internet Connection
} else {
// No Internet Connection
}
}
代码在Eclipse(Android 4.0.4)中没有给出任何错误,但如果我运行它,我的应用程序将冻结并关闭
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
的实例,因此可以调用它
因此,使用静态方法生成的非静态方法的代码中没有问题可能是其他原因导致应用程序冻结。是的,这是可能的。问题一定出在您的
isNetworkAvailable
方法上
如果无法从静态方法调用非静态方法,Java应用程序将无法工作,因为main本身是静态的。只需创建包含要使用的非静态方法的类的对象,然后就可以调用 例如:
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
}
}
如果是这种情况,那么它应该可以工作。调试到您的
isNetworkAvailable()
方法中。如果可能,在该方法内设置一个try catch
块,并打印异常的堆栈跟踪
可以从静态方法调用非静态方法吗
对
由于您已经创建了CheckConnection
的对象,因此可以使用该对象的引用调用该方法。否则将是编译时错误
但如果我运行它,我的应用程序就会冻结并关闭
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.
从静态上下文调用非静态方法不是原因。原因可能在
isNetworkAvailable
是,这是可能的(如果不是,它将无法编译)。这并不是它冻结的原因。更有可能的是,isNetworkAvailable()
方法由于某些其他原因而冻结。或者是检查连接的原因。在调试模式下运行时查看stacktrace可以揭示问题。。它叫一切。所以你的头衔的答案是肯定的。就像所有的人都在暗示这里还有别的事情发生@安德罗塞尔瓦:这不是重复的,这个问题与标题无关。这就是全部。非常感谢!CheckConnection确实包含一些错误,现在我明白了!欢迎光临。在这方面做一些调试。