17.5.4 Write-Protected Fields

17.5.4 Write-Protected Fields

正常情况下,final static 域是不能被修改的,然而,System.in,System.out以及System.err它们都是 static final域,但是由于历史原因,不得不允许它们可以被修改。通过System.setIn()、System.setOut以及System.setErr()方法可以改变这些域变量的值。我们称这些域字段为 write-protected,用以把它们和原始的final域字段做区分。

编译器在处理static final域字段时不同于其他的final字段,例如,原始的final读操作对于同步来说是“免疫的”:锁或volatile读操作的barrier不会影响到读取到的final值。由于write-protected域字段的值可以被改变,所以同步事件应该会影响到他们。因此,语义指出: 这些域字段必须被视为普通的域字段,它们不能被用户代码改变,除非用户代码位于System类中。

你可能感兴趣的:(17.5.4 Write-Protected Fields)