我一直在研究一个相当大的程序,我认为是时候拆分我的类(class)了。 1 个 .java 文件用于 GUI 代码,1 个 .java 文件用于 GUI 提供的功能背后的机制。但这是我的问题,我已经在彼此内部创建了每个类的实例,然后程序拒绝启动,所以我显然做错了什么。在我的 RPG
类中,我有以下代码行:
public Mechanics mechanics = new Mechanics();
对于我的 Mechanics
类(class),我有以下代码:
public RPG rpg = new RPG();
我这样做的原因是为了尝试这个:
我的很多变量都在 RPG
类中,我希望能够从我的 rpg
调用它们并操作它们,然后将它们发送回 RPG
下面是我用来测试这个函数的代码(来 self 的 Mechanics
类):
class Mechanics{
public RPG rpg = new RPG();
public Mechanics(){
}
public void helloWorld(){
System.out.println("Hello World!");
System.out.println("Health before:"+rpg.Health);
rpg.Health = rpg.Health - 5;
System.out.println("Health after:"+rpg.Health);
}
}
是的,Health
是我的 RPG
类中的公共(public) int
。
在我的 RPG
类(class)中,这是我用来测试我的 Mechanics
类(class)的代码:
mechanics.helloWorld();
这是我的问题:代码可以编译,但是当我尝试运行它时,出现此错误:
at Mechanics.<init>(Mechanics.java:15)
at RPG.<init>(RPG.java:127)
这是我的问题。我这样做对吗?我的代码有什么问题导致我的程序不想运行?
添加:我也尝试将我的其他类称为 private
,程序将编译,但仍然拒绝启动,并向我提供相同的错误
Mechanics
第 15 行:
public RPG rpg = new RPG();
RPG
第 127 行:
public Mechanics mechanics = new Mechanics();
最佳答案
这是因为您在 RPG
类中实例化了一个新的 Mechanics
类。然后在 Mechanics
类中实例化一个新的 RPG
类。
结果是实例化的无限循环。
对于您的具体示例,我个人认为解决此问题的最佳方法是将 RPG 实例直接传递到 hello world 方法中。
class Mechanics {
public void helloWorld(RPG rpg) {
...
}
}
然后在您的 RPG 类中看起来像这样:
class RPG {
// passing a mechanics object in via the constructor would be better than hard-coding it here
public Mechanics mechanics = new Mechanics();
public int Health = 100;
...
public void someMethod() {
mechanics.helloWorld(this); // pass in the rpg instance
}
}
关于java - 使用多个类。程序无法启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16667659/