Java思想中有下面一些代码和文字:
注意,根据惯例,既是static又是final的域(即编译期常量)将用大写表示,并使用下划线分隔各个单词
...
private static Random rand =new Random(47);
static final int INT_5 = rand.nextInt(20);
...
请注意,带有恒定初始值(即,编译期常量)的final static基本类型全用大写字母命名,并且字与字之间用下划线隔开(这就像C常量一样,C常量是这一命名传统的发源地)
我们不能因为某数据是final的就认为在编译时可以知道它的值。在运行时使用随机生成的数值来初始化i4和INT_5就说明了这一点。
他这些说法不前后矛盾吗?先说有static final修饰的就是编译期常量,后说带有恒定初始值就是编译期常量,如果这两种说法都是满足的,确实“static final int INT_5 = rand.nextInt(20);”的常量名可以写成"INT_5",然后他又说“我们不能因为某数据是final的就认为在编译时可以知道它的值”,这怎么理解?求大佬赐教 🙏