Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从方法内部对非静态方法进行静态引用_Java_Static_Static Methods_Non Static - Fatal编程技术网

Java 从方法内部对非静态方法进行静态引用

Java 从方法内部对非静态方法进行静态引用,java,static,static-methods,non-static,Java,Static,Static Methods,Non Static,我理解“无法对非静态方法进行静态引用”错误,但我遇到了以下问题: public class MyClass { public static void main(String[] args) { MyClass myClassInstance = new MyClass(); while (true) { myClassInstance.myMethod(); myMethod();//Ca

我理解“无法对非静态方法进行静态引用”错误,但我遇到了以下问题:

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
我不能只从
main
调用
myMethod()
,但我可以从方法本身内部调用它(在这种情况下,如果发生异常,我想再次调用
myMethod()

这是怎么回事?
myClassInstance
是否仍然存在,因为此时我仍然在
myMethod()
中?

是否最好在类级别使用
静态MyClass myClassInstance=new MyClass()
,然后每次调用
myClassInstance.myMethod()

首先,您应该了解更多关于静态和非静态方法的信息:

静态方法属于该类 非静态方法属于 类的对象。就是一个 只能调用非静态方法 在类的对象上 属于。静态方法可以 然而,这两个词在课堂上都可以称为 以及类的对象。A. 静态方法只能访问静态 成员。非静态方法可以 访问静态和非静态 因为当时 调用静态方法时,类 可能未实例化(如果是 调用类本身)。在 在其他情况下,可以使用非静态方法 仅当类已 已经实例化了。静电计 方法由的所有实例共享 这个班。这些是一些基本的 差异。我也想 指出一个经常被忽视的差异 在这方面。每当一个方法 在C++/Java/C#中调用,隐式 参数(“this”引用)为 与另一个一起传递/没有传递 参数。如果是静态方法 调用时,“this”引用不可用 作为静态方法传递的方法属于 类,因此没有“this” 参考资料

参考

这是怎么回事?
myClassInstance
是否仍然存在,因为 那一点我还在
myMethod()

myMethod
是属于
myClassInstance
的实例方法。因此,当您在
myMethod()
内部调用
myMethod()
时,它相当于
this.myMethod()

是否最好在类级别使用静态MyClass myClassInstance=new MyClass(),然后每次调用
myClassInstance.myMethod()


当我们将一个类的成员声明为静态时,这意味着无论创建了多少个类的对象,静态成员只有一个副本。静态成员由类的所有对象共享。如果没有其他初始化,则在创建第一个对象时,所有静态数据都初始化为零。欲了解更多信息,请访问。

当然不能。另一个方法是类MyClass实例的一部分,而不是类本身。您确实应该了解类和对象方法MyMethod是一种实例方法。调用是使用
myMethod()
相当于
this.myMethod()
。在myMethod()中,它是一个实例方法,
这个
存在:它是当前对象。main()是一个静态方法,在其内部没有此。所以这个电话没有意义。