Java 无法从静态上下文引用非静态方法

Java 无法从静态上下文引用非静态方法,java,Java,Java新手,试图找出如何解决这个问题 boolean myBool = G(A,n,m,0); 由于某种原因,它不像这条线。为什么不让我调用这个简单的函数呢?main()和G()都是类C()的一部分。非静态方法属于类的特定实例,而静态方法属于类本身。在作为静态方法的main内部,如果没有特定的对象来运行非静态方法,则无法引用这些方法。例如: boolean myBool = new C().G(A,n,m,0); 但是,如果类没有有趣的状态,或者它的状态不影响方法G,则应该

Java新手,试图找出如何解决这个问题

        boolean myBool = G(A,n,m,0);

由于某种原因,它不像这条线。为什么不让我调用这个简单的函数呢?main()和G()都是类C()的一部分。

非静态方法属于类的特定实例,而静态方法属于类本身。在作为静态方法的
main
内部,如果没有特定的对象来运行非静态方法,则无法引用这些方法。例如:

boolean myBool = new C().G(A,n,m,0);

但是,如果类没有有趣的状态,或者它的状态不影响方法
G
,则应该将
G
定义为
static
,这可能是因为在
G()
方法的定义中没有包含
static

Main()
是一种静态方法,由于
static
在非静态对象之前运行,因此静态对象只能调用/使用
static
对象

请注意,您的
Main()
不需要创建
C
对象。它是程序的入口点,如果你必须先创建一个对象才能运行你的程序,这是没有意义的——你从哪里创建这个对象


如果要进行非静态调用,请创建相应类的对象。

我不理解这种链接是一种更复杂的情况。这个例子很简单,不同。阅读关于静态和普通类变量之间的差异,你就会明白。我怀疑这行中起作用的是变量。我收回这一点,它现在起作用了。这很奇怪,为什么我必须创建另一个C()类的对象?我应该能够从“内部”调用G(),因为我已经在main中了no?@aify true,但是如果变量之间存在差异,那么函数就会产生差异。我如何知道是否应该将函数定义为静态函数?这两种方法都有效。我将G改为static,它按预期工作。我还尝试删除static并使用new C(),这也很有效。一般经验法则-如果类具有属于实例的数据成员(即,该类为statefull),并且该方法与该状态相关,则该类不应是静态的。否则,将其设置为静态可能是可以接受的。静态的含义是什么?不改变?它属于类,而不是该类的对象。它更像是。。。如果我对这个类的所有对象都有相同的东西,那么它应该是静态的。所有人都睡觉。如果我正在编写一个Human类,并且我有一个
布尔humansSleep
,它应该是静态的,并设置为true。当创建人类对象时,他们可能会有一些非静态的东西,比如头发颜色和高度,因为这些统计数据对所有人来说都不一样。