使用多个类.该计划将无法启动

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)

Sup*_*icy 5

这是因为你MechanicsRPG类中实例化了一个新类.然后RPGMechanics类中实例化一个新类.

结果是无限循环的实例化.

对于您的具体示例,我个人认为解决问题的最佳方法是将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)

  • @RichardTingle是的,当然,如果可以完全避免循环依赖,那就更好了. (2认同)