Java 谁能像我一样给我解释一下';“我5岁时犯了错误”;对非静态方法的静态引用“;

Java 谁能像我一样给我解释一下';“我5岁时犯了错误”;对非静态方法的静态引用“;,java,static-methods,Java,Static Methods,这个错误困扰着我: cannot make a static reference to the non-static method XYZ from the type ABC 我的眼睛呆滞了。我知道以前有人问过这个问题,但我想要5年的治疗。这是毫无意义的 我正在运行一个类,在公共静态void main中有代码,然后在它之外生成一个函数 您尝试在main中调用的函数没有static关键字。添加它,编译器就不会抱怨了 public class Foo { public static voi

这个错误困扰着我:

cannot make a static reference to the non-static method XYZ from the type ABC
我的眼睛呆滞了。我知道以前有人问过这个问题,但我想要5年的治疗。这是毫无意义的


我正在运行一个类,在
公共静态void main
中有代码,然后在它之外生成一个函数

您尝试在main中调用的函数没有static关键字。添加它,编译器就不会抱怨了

public class Foo {
    public static void main(String [] args) {
        bar();
    }

    public static void bar() {
        System.out.println("compiler won't complain");
    }
}
这并不意味着这是正确的做法

静态方法和成员与类关联;非静态方法和成员与实例关联。确保你理解其中的区别。如果不这样做,那么就很难进行面向对象的编码

如果是非静态方法,则需要执行以下操作:

public class Foo {
    public static void main(String [] args) {
        Foo foo = new Foo();
        foo.bar();  // Associated with the new Foo instance named foo.
    }

    public void bar() {
        System.out.println("compiler won't complain");
    }
}

它可以归结为类成员和实例成员。有关类成员不能直接引用实例成员的更多详细信息,请阅读本文档

Java有“静态”和“实例”方法。“静态”方法在其定义中有
static
(例如您总是对
main
方法说
static
。“实例”方法在其定义中没有
static
一词


可以使用
ClassName.staticMethodName(parms)
从任何环境调用静态方法。只能使用对方法类的对象的引用来调用实例方法。即,必须使用
objectReference.instanceMethodName(parms)
,其中
objectReference
引用方法类的对象。(如果从该类的另一个实例方法内部调用,
objectReference
是隐含的。)

如果在
main
函数旁边创建的函数不是静态的,则不能从
main
方法调用它,该方法是静态的。 这是因为您没有创建包含这两个函数的类的任何实例。非静态的方法(即实例方法)本质上需要该类的实例才能被调用

假设您有以下示例:

public class Test{
    public static void main(String args[]){
    }

    public void doSomething(){
    }
}
如果要从
main
方法调用
doSomething()
方法,它必须如下所示

public static void main(String args[]){
    new Test().doSomething();
}

一个5岁的孩子会明白,你不能从ABC类型中对非静态方法XYZ进行静态引用,也不能相应地更改它们的代码。请查看实例是什么。@SotiriosDelimanolis-Ok thanksIt如果你解释了现有解释的哪些部分是正确的,那会有所帮助unclear@RichardTingle-是的,我知道。好的,谢谢你你需要至少一个
新的
,你的代码才能工作。而且,据我所知,大多数5岁的孩子都喜欢自行车:)这是更多的评论,但如果答案正确,可以接受。你是对的,它会再次出现。在学习java的时候,DuffyMo已经向你展示了一个真正的创可贴。很快你就要离开main,使用非静态方法了。非常感谢,这是单击“现在”,类和实例的概念。非常感谢,先生