use*_*169 4 java variables class public
我一直在研究一个相当大的程序,并认为是时候拆分我的课程了.1.GUI文件用于GUI代码,1 .java文件用于GUI提供的功能背后的机制.但是这是我的问题,我已经在彼此内部创建了每个类的实例,然后程序拒绝启动,所以我显然做错了.在我的RPG课上,我有以下代码:
public Mechanics mechanics = new Mechanics();
Run Code Online (Sandbox Code Playgroud)
对于我的Mechanics班级,我有这个代码:
public RPG rpg = new RPG();
Run Code Online (Sandbox Code Playgroud)
我之所以这样做是为了尝试这个:我的很多变量都在RPG类中,我希望能够从我这里调用它们rpg并操纵它们,然后将它们发送回来.RPG这是我以前的代码测试这个功能(来自我的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);
}
}
Run Code Online (Sandbox Code Playgroud)
是的,我班上Health的公众.intRPG
在我的RPG课堂上,这是我用来测试我的Mechanics课程的代码:
mechanics.helloWorld();
Run Code Online (Sandbox Code Playgroud)
这是我的问题:代码编译,但是当我尝试运行它时,我收到此错误:
at Mechanics.<init>(Mechanics.java:15)
at RPG.<init>(RPG.java:127)
Run Code Online (Sandbox Code Playgroud)
这是我的问题.我甚至这样做了吗?我的代码是什么问题让我的程序不想运行?
补充:我已经尝试过调用我的其他类private,程序将编译,仍然拒绝启动,并向我提供相同的错误
第15行Mechanics:
public RPG rpg = new RPG();
Run Code Online (Sandbox Code Playgroud)
第127行RPG:
public Mechanics mechanics = new Mechanics();
Run Code Online (Sandbox Code Playgroud)
这是因为你Mechanics在RPG类中实例化了一个新类.然后RPG在Mechanics类中实例化一个新类.
结果是无限循环的实例化.
对于您的具体示例,我个人认为解决问题的最佳方法是将RPG实例直接传递给hello world方法.
class Mechanics {
public void helloWorld(RPG rpg) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
然后在您的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
}
}
Run Code Online (Sandbox Code Playgroud)