当前位置: 首页 > 知识库问答 >
问题:

为什么在Java中使用静态关键字在下面的情况下工作不同?[复制]

麻昌翰
2023-03-14

执行以下代码时,会出现异常java。将抛出lang.stackOverflowerr

类中的main()方法:

class Something {
    public static void main(String args[]) {
        System.out.println(Color.RED);
        System.out.println(Color.GREEN);
        System.out.println(new Color().BLUE);
    }
}

下面是课程Color

class Color {
    public static final Color RED = new Color();
    public static final Color GREEN = new Color();
    public final Color BLUE = new Color();
}

但是当我在公共的最终颜色BLUE=new Color();中把静态放在最终后面时,程序会正确运行,而不会抛出StackOverflow Error。为什么它不抛出异常?是不是当JVM识别出某个静态对象引用自己时,它应该停止?Java如何处理这个问题?

共有1个答案

徐佐
2023-03-14

没有静态

class Color {
  public final Color BLUE = new Color();
}

要创建Color(通过new Color())的实例,必须为BLUE字段创建Color的实例;要创建Color实例,必须为BLUE字段创建Color的实例;要创建Color的实例,必须为BLUE字段等创建Color的实例。看到问题了吗?

如果你使它静态

class Color {
  public static final Color BLUE = new Color();
}

每次创建Color的新实例时,都不会重新初始化BLUE。初始化类时会创建Color的实例,就是这样。

 类似资料:
  • 问题内容: 来自问题的原因,或者说更确切地说,object .__new__在这两种情况下的工作方式不同 作者对为什么不感兴趣,而对如何感兴趣。 我非常想了解原因,尤其是: 为什么不打印任何参数而不是 为什么没有为testclass3引发错误?(因为除了自我之外没有其他参数) 码 问题答案: 您正在使用旧的Python版本;此错误消息已更新: Python只会抱怨既不支持又不被覆盖的参数。例如,当

  • 问题内容: 我正在研究列表和元组之间的区别(在Python中)。一个明显的例子是,元组是不可变的(在初始赋值后不能更改值),而列表是可变的。 文章中的一句话让我明白了: 只能将不可变元素用作字典键,因此只能将元组而不是列表用作键。 我很难考虑要使用元组作为字典键的情况。您能否提供一个示例问题,说明这是自然,高效,优雅或显而易见的解决方案? 编辑: 感谢您的示例。到目前为止,我认为一个非常重要的应用

  • 问题内容: 我了解这代表调用方法的对象,并且静态方法未绑定到任何对象。但是在上述情况下,变量y也是静态的。 如果我们可以在类对象上调用静态方法,为什么不能允许静态方法设置类的静态变量。 此附加约束的目的是什么? 问题答案: 因为是指对象实例。静态方法的调用中没有对象实例。但是当然你可以访问你的静态字段(仅静态字段!)。只需使用 如果要确保获取的是静态字段,而不是某些具有相同名称的局部变量,请使用类

  • 主要问题: 我试图在网页上打印错误,如果连接到MySQL服务器不做。为此,我写了一个错误的库名

  • 我有一个h2作为唯一的项目在一个容器div。我在容器上使用position:relative和h2上使用position:absolute/bottom:0使它与容器底部对齐。但是,我无法使h2文本与容器div的右侧对齐。 HTML: CSS: 链接:http://www.distributionaccess.com/new/stempath/about.html 我在h2上尝试了display:

  • 本文向大家介绍在什么情况下选择webpack?在什么情况下选择rollup?相关面试题,主要包含被问及在什么情况下选择webpack?在什么情况下选择rollup?时的应答技巧和注意事项,需要的朋友参考一下 非要一句话区分的话 如果是用,如果是用其实界限并不是特别明显。在某些特殊情况下可以互用