gpt4 book ai didi

java - 为什么 Java 常量除以零不会产生编译时错误?

转载 作者:搜寻专家 更新时间:2023-10-30 21:10:23 24 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
Is 1/0 a legal Java expression?

为什么这段代码可以编译?

class Compiles {
public final static int A = 7/0;
public final static int B = 10*3;

public static void main(String[] args) {}
}

如果我查看已编译的类文件,我可以看到 B 的计算结果为 30,而 A 仍然是 7/0。

据我了解 JSL,除以零的表达式不是常量。

引用:JLS 15.28

我上面的语句是由于这一行:

A compile-time constant expression is an expression denoting a value of primitive type

因此除以零不会计算为原始值。

我真的不明白为什么编译器仍然允许这样做?需要说明的是,我上面的代码在运行时崩溃并出现“java.lang.ExceptionInInitializerError”

在我看来,编译器将任何最终静态变量威胁为常量,并在编译时对其进行评估。这意味着编译器已经尝试对 A 求值,但由于它是除以零,所以它只是让它通过。没有编译时错误。但这看起来非常非常奇怪......编译器知道它是除以零并且它会导致运行时崩溃,但它不会标记编译错误!

谁能告诉我为什么?

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com