java - 使用多个类。程序无法启动

标签 java class variables public

我一直在研究一个相当大的程序,我认为是时候拆分我的类(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)

enter image description here 这是我的问题。我这样做对吗?我的代码有什么问题导致我的程序不想运行?

添加:我也尝试将我的其他类称为 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/

相关文章:

java - 在使用 lucene 进行索引和搜索期间添加有效负载

css - LESS - 通过遍历两个变量创建 ID

java - 插入新行,并通过简单计算增加最大值(并发问题)

Java,如果可拖动对象接触其他对象

Javascript 覆盖问题类 xml

Python - 在调用类方法时从父类访问子类的变量

c++ - 指针类变量从 muncion 返回 NULL

java - 调用方法,将变量重命名为新变量

linux - sed 无法处理 bash 脚本中的变量;请求一个文件。简单例子

java - ClassNotFoundException 仅依赖于 JDK7 更新版本?