首先,一个难题:以下代码打印什么?
public class RecursiveStatic {
public static void main(String[] args) {
System.out.println(scale(5));
}
private static final long X = scale(10);
private static long scale(long value) {
return X * value;
}
}
Run Code Online (Sandbox Code Playgroud)
回答:
0
下面的剧透.
如果您打印X的规模(长),并重新定义X = scale(10) + 3,印刷品会X = 0那么X = 3.这意味着X暂时设置为0以后设置为3.这是违反final!
static修饰符与final修饰符结合使用,也用于定义常量.最终修饰符表示此字段的值不能更改.
来源:https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html [强调添加]
我的问题:这是一个错误吗?被final定义不清?
这是我感兴趣的代码.
X分配了两个不同的值:0和3.我认为这违反了 …