Java 需要帮助才能让两个班互相帮助吗

Java 需要帮助才能让两个班互相帮助吗,java,class,Java,Class,我目前只是在玩弄不同的类来测试它们是如何协同工作的,但是我在NetBeans中收到了一条我无法解决的错误消息。这是我的密码: class first_class.java public class first_class { private second_class state; int test_tal=2; public void test (int n) { if (n>2) { System.out.println("HELLO"); }

我目前只是在玩弄不同的类来测试它们是如何协同工作的,但是我在NetBeans中收到了一条我无法解决的错误消息。这是我的密码:

class first_class.java

public class first_class {

private second_class state;

int test_tal=2;

public void test (int n) {
    if (n>2) {
        System.out.println("HELLO");
    }
    else {
        System.out.println("GOODBYE");
    }
}

public static void main(String[] args) {
    state.john();
    TestingFunStuff.test(2);

}
}
二等舱

public class second_class {

first_class state; 

public int john () {
    if (state.test_tal==2) {
        return 4;
    }
    else {
        return 5;
    }
}
}
显然,我不能在我的主类中运行方法“john”,因为“非静态变量状态不能从静态上下文引用”,而方法“test”是因为“非静态方法测试(int)不能从静态上下文引用”

这到底是什么意思


netbeans中显示的错误屏幕截图:

这意味着如果要从静态方法使用
state
,或者需要可以从中访问非静态成员的
first\u class
实例,则必须将其声明为静态成员。在后一种情况下,您需要提供一个getter方法(或者将其公开,但不公开)

另外,您没有实例化
second_class
的实例,因此在它编译后,您将得到一个
NullPointerException
:静态或非静态,需要有一个实例才能访问实例方法



我可能建议遵循Java命名约定,使用
camelCase
而不是_scores下的
,并以大写字母开头类名。

这意味着如果要从静态方法使用
state
必须声明为静态成员,或者您需要一个
first\u class
实例,从中可以访问非静态成员。在后一种情况下,您需要提供一个getter方法(或者将其公开,但不公开)

另外,您没有实例化
second_class
的实例,因此在它编译后,您将得到一个
NullPointerException
:静态或非静态,需要有一个实例才能访问实例方法



我可能建议遵循Java命名约定,使用
camelCase
而不是_scores
下的
,并以大写字母开头类名。

通过初始化,类可以有两种类型的成员:静态和动态(默认)。这控制分配成员的时间

静态在类声明时分配,因此始终可用,不能继承/重写等。动态在类实例化时分配,因此如果要访问此类成员,您必须
new
您的类


这就像C中的BSS vs heap(malloc'd)内存,如果这有帮助的话。

通过初始化,类可以有两种类型的成员:静态和动态(默认)。这控制分配成员的时间

静态在类声明时分配,因此始终可用,不能继承/重写等。动态在类实例化时分配,因此如果要访问此类成员,您必须
new
您的类


这就像C中的BSS vs heap(malloc'd)内存,如果有帮助的话。

这里消除错误消息的技巧是将繁重的工作移到main之外。假设这两行都是设置例程的一部分

state.john();
TestingFunStuff.test(2);
我们可以创建一个名为setup的函数,其中包含两行代码

public void setup() {
    state.john();
    TestingFunStuff.test(2);
}
现在,主例程可以调用setup,错误消失了

public static void main(String[] args) {
    setup();
}

但是,其他成员是正确的,因为实例化也需要一些清理。如果您对对象不熟悉,并让它们一起工作,我可以推荐Head First Java书籍。好的第一次阅读(注意第一次不是参考)并且没有那么昂贵。

这里消除错误消息的诀窍是将繁重的工作移到main之外。假设这两行都是设置例程的一部分

state.john();
TestingFunStuff.test(2);
我们可以创建一个名为setup的函数,其中包含两行代码

public void setup() {
    state.john();
    TestingFunStuff.test(2);
}
现在,主例程可以调用setup,错误消失了

public static void main(String[] args) {
    setup();
}

但是,其他成员是正确的,因为实例化也需要一些清理。如果您对对象不熟悉,并让它们一起工作,我可以推荐Head First Java书籍。很好的第一次阅读(注意第一次不是参考)并且没有那么昂贵。

我对对象非常陌生,并且能够将所有对象一起工作。谢谢,我会研究它的。我对对象非常陌生,并能让它一起工作。谢谢,我会调查一下的。汉克斯,我以为你可以像我一样创建一个对象,并使用其他类中的所有方法,但是我想我弄错了,我需要更多地了解it@John您定义/声明了一个类,但是创建一个对象需要一个“新的”(至少就我们现在所关心的而言)。你需要做一个“SecondClass state=newsecondclass();”,行中的某个地方:)好的,谢谢。用二等舱延长一等舱可以吗?比如“公共类第一类扩展第二类”?或者这会造成另一种情况吗?@johnyou可以,如果有原因的话,例如,一等舱就是二等舱。这会改变你做事的方式,但不会从根本上改变。好的,谢谢你的帮助,我会更深入地研究。我有一个atm项目,我们有一个预写的程序,有10个类,所以我试图通过创建我自己的来理解它们如何协同工作以及何时调用函数等。谢谢,我以为你可以像我一样创建一个对象,并使用其他类的所有方法,但我想我弄错了,我得多读点书it@John您定义/声明了一个类,但是创建一个对象需要一个“新的”(至少就我们现在所关心的而言)。你需要做一个“SecondClass state=newsecondclass();”,行中的某个地方:)好的,谢谢。用二等舱延长一等舱可以吗?比如“公共类第一类扩展第二类”?或者这会造成另一种情况吗?@johnyou可以,如果有原因的话,例如,一等舱就是二等舱。这会改变你做事的方式,但不会从根本上改变。好的,谢谢你的帮助,我会更深入地研究。我有一个atm项目,在那里我们有一个预写的10 cl的程序