java - 可以在编译时评估表达式吗?

标签 java static final

public class Test1 {
    static final int i;
    static{
        if(3<2){
        i = 0;
        }
    }   
}
public class Test2 {
    static final int i;
    static{
        if(3>2){
        i = 0;
        }
    }   
}

Test1 编译失败, 类 Test2 编译成功。

任何人都可以告诉我编译器如何能够在 if 条件下评估表达式吗?

最佳答案

static final int i;

需要在静态初始化器中初始化,因为它是最终的。

static{
        if(3<2){
        i = 0;
        }
    }

由于 3<2 字面值或常量,编译器能够检测到代码的无效部分并且不会初始化 i。

添加一个 else 案例并在那里做一些 i 初始化。

关于java - 可以在编译时评估表达式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13786424/

相关文章:

java - 有什么办法可以保存 `static members` 的状态吗?

java - 具有内部类和最终变量的线程化 Java 服务器

java - final变量是否需要在声明后立即赋值

java - 无法使用 Spring Cacheable 在 Aerospike Cache 中添加记录

c - 理解静态 int 执行

java - 当在字符串中发现某些数学逻辑时验证括号是否存在

php - 调用后端是否会创建该后端的新实例?

java - 向不可扩展类 java 添加新功能

java - 如何在java中使用switch case使字符相等?

java - 如果它们位于同一个包中,如何将数据从一个类传递到另一个类