【问题标题】:how to use instance variables in a static method如何在静态方法中使用实例变量
【发布时间】:2013-10-09 05:00:14
【问题描述】:

我在使用 Java 时遇到了问题。
我真的是 Java 新手,所以不要怪我奇怪的代码和东西。

我正在制作一个小东西,它会随机生成数字并使用它们来创建有关由该信息概述的随机生成树的信息。
问题是,我需要制作一个静态 void 来打印树的统计信息。

但是我所有的变量——“treeheight”、“treetrunkwidth”等——不能是静态的,或者每个变量信息都恢复为 0 或 null。这很烦人,因为如果我让打印树统计信息的空白不是静态的,那么它就不会显示出来,但是如果我把它设为静态,它就不会让树的信息随机生成和随意更改。

我该怎么办??

-AndeX

【问题讨论】:

  • 首先你应该发布你的代码......然后我们会看看我们能做什么......
  • 您希望一些信息与 Object 相关联,然后实例化该对象并使用。
  • 你需要展示一些代码。但这可能归结为在某个地方拥有new thingymabob()
  • 你不能,因为它不应该。 static 应该只能访问局部变量和声明为静态的所有内容。
  • 为什么这需要是静态的?每个 thingymabob 都有一组统计数据,而不是班级的一组统计数据。要打印这些,请制作void printMe() 或更好的覆盖String toString(),每个对象都有。然后每个thingymabob 都可以用一个字符串来描述自己。

标签: java


【解决方案1】:

就这么简单

1:静态成员可以通过类引用访问

ClassName.staticVar

2 : 非静态成员可以通过实例引用访问

new CLassName()

现在如果您可以发布您的代码,我们可以给出准确的建议

【讨论】:

  • 我认为 Andex 想通过不使用“new”来调用实例变量。
  • 这没有意义。实例变量正是对象的“实例”。你不能那样做。
【解决方案2】:

我认为您正在寻找的是Java Singleton Class。我推荐你look here for more information

这意味着您将永远只有一个类Thingymabob 的实例,并且您可以像往常一样通过getters and setters 访问它的属性。

这就是constructorgetInstance 的样子:

private Thingymabob() {
    // Exists only to defeat instantiation.
}

public static Thingymabob getInstance() {
    if(instance == null) {
        instance = new Thingymabob();
    }
    return instance;
}

然后您可以像这样在所有其他类中访问它:

Thingymabob thingy = Thingymabob.getInstance();

【讨论】:

    【解决方案3】:

    您可以在 Thingymabob 中创建

    public static void main(String[] argsIgnored) {
        Thingymabob anInstance = new Thingymabob();
        anInstance.doStuffToSetItUp()...
        System.out.println("treeheight = " + anInstance.getTreeheight ());
        System.out.println("treetrunkwidth = " + anInstance.getTreetrunkwidth ());
        etc...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多