【问题标题】:Java - Creating an object within a method call [duplicate]Java - 在方法调用中创建对象[重复]
【发布时间】:2016-03-21 18:32:33
【问题描述】:

我很确定我以前做过这个,所以我不确定为什么它现在会导致错误。这是我得到的错误:

$ javac Zombie.java
Zombie.java:51: error: non-static variable this cannot be referenced from a static context
            array.add(new Point(p.d0-1, p.d1));
                      ^

它指向我定义一个新对象的位置,所以在静态上下文中我是否不允许在方法调用中执行此操作?我需要定义一个变量并将其传入吗?因为那会花费更多的时间并且会更加混乱......

对于适当的上下文:

  • 数组是 ArrayList 类型
  • Point 是我定义的一个类。构造函数被正确调用。
  • p 是 Point 的一个实例。它有两个字段:d0 和 d1(维度 0 和维度 1,以减少与 X 和 Y 的混淆)。

【问题讨论】:

  • Point 是嵌套类吗?如果是这样,请将单词 static 添加到其声明中。
  • 我怀疑这一行代码的上下文比我们在这里看到的要多。 一般而言没有理由不能声明对象的实例。
  • 在此处发布您的代码

标签: java object static javac


【解决方案1】:

如果嵌套类在非嵌套类中的静态上下文中使用,则需要声明公共和静态嵌套类。我这样做了,不再出现此错误。

【讨论】:

  • 您应该花时间了解非静态内部类需要其封闭类型的实例。这是因为内部类具有对封闭类型的实例字段和方法的隐式访问。静态内部类不能隐式访问那些实例字段和成员,因此不需要实例。
猜你喜欢
  • 1970-01-01
  • 2021-01-16
  • 1970-01-01
  • 2021-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-28
相关资源
最近更新 更多