我了解“无法静态引用非静态方法”错误,但是遇到了这个问题:
public class MyClass {
public static void main(String[] args) {
MyClass myClassInstance = new MyClass();
while (true) {
myClassInstance.myMethod();
myMethod();//Cannot make a static reference to the non-static method myMethod()
}
}// END main
void myMethod() {
try {
//Stuff
}
} catch (Exception e) {
myMethod();
}
}// END myMethod
}// END MyCLass
我不能只是从myMethod()
调用main
,而是可以从方法本身内部进行调用(在这种情况下,如果发生异常,我想再次调用myMethod()
)。
这是如何工作的? myClassInstance
还在吗,因为那时我仍在myMethod()
里面?
在班级拥有static MyClass myClassInstance = new MyClass()
并每次都致电myClassInstance.myMethod()
会更好吗?
答案 0 :(得分:1)
首先,您应该了解有关静态和非静态方法的更多信息:
静态方法属于此类 并且非静态方法属于 类的对象。这是一个 非静态方法只能被调用 在一个类的对象上 属于。静态方法可以 但是在课堂上都被称为 以及该类的对象。一种 静态方法只能访问静态 成员。非静态方法可以 访问静态和非静态 成员,因为当时 静态方法被调用,该类 可能未实例化(如果是) 调用类本身)。在里面 在其他情况下,非静态方法可以 仅在班级有 已经实例化。静态的 方法由的所有实例共享 班级。这些是一些基本的 差异。我也想要 指出一个经常被忽略的差异 在这种情况下。只要有方法 在C ++ / Java / C#中调用,是隐式的 参数(“ this”参考)是 与/没有一起通过 参数。如果是静态方法 呼叫,“ this”引用不是 作为静态方法传递的属于 类,因此没有“ this” 参考。
参考:Static Vs Non-Static methods
这是如何工作的?
myClassInstance
仍然以某种方式存在,因为 那一点我还在myMethod()
里面吗?
myMethod
是属于myClassInstance
的实例方法。因此,当您在myMethod()
内部调用myMethod()
时,等效于this.myMethod()
最好在班级有
static MyClass myClassInstance = new MyClass()
然后每次都叫myClassInstance.myMethod()
吗?
当我们将一个类的成员声明为静态成员时,意味着无论该类中创建了多少个对象,静态成员只有一个副本。该类的所有对象共享一个静态成员。如果没有其他初始化,则在创建第一个对象时,所有静态数据都将初始化为零。有关更多信息,请访问Static Variables : Good or Bad?。
答案 1 :(得分:0)
让我帮助您。您只需要在主函数中创建 Upperclass 变量。通过它调用函数。
很简单。因为背后有逻辑。您无法调用甚至不存在的函数或变量。
之后,通过创建Upperclass对象将很有意义。
public class Upperclass{
int var = 0;
public static void main(String args[]){
Upperclass func= new Upperclass();
func.var = 1;
func.displayCount();
}
public void displayvariable(){
System.out.println("" + var);
}
}
如果您对我的答案有任何疑问,请发表评论。我会尽快与您联系。
谢谢
如果您需要其他帮助,我会在这里