/**
* 创建一个类, 里面包含一个static final field和一个final field, 比较异同.
* (Exercise 18: (2) Create a class with a static final field and a final field
* and demonstrate the difference between the two.)
* 回答: 区别在于final是"不能改变", 而static final是"唯一, 而且不能改变"
*/
package reusing;
import java.util.Random;
class FinalAndStaticF{
private static Random rand=new Random(28);
final int i=rand.nextInt(10);
static final int J=rand.nextInt(10);
}
public class P184E18 {
public static void main(String[] args){
FinalAndStaticF fas1=new FinalAndStaticF();
System.out.println("第一次access i 和 J");
//! fas1.i++; i是final, 是不能改变的
//! fas1.J++; J是final, 是不能改变的
System.out.print("i="+fas1.i+"; ");
System.out.print("J="+fas1.J);
System.out.println();
FinalAndStaticF fas2=new FinalAndStaticF();
System.out.println("第二次access i 和 J");
System.out.print("i="+fas2.i+"; ");
System.out.print("J="+fas2.J);
System.out.println();
FinalAndStaticF fas3=new FinalAndStaticF();
System.out.println("第三次access i 和 J");
System.out.print("i="+fas3.i+"; ");
System.out.print("J="+fas3.J);
//连续三次, J都是同样一个值, 所以static final的意思是"唯一而为不可改变的".
//这也是compiler推荐使用 FinalAndStaticF.J方式访问J的原因, J是class field
//而i的三个值不一样
}
}
184页习题18
这篇博客探讨了Java中static final字段和final字段之间的差异。通过创建一个包含这两种字段的类,作者展示了final字段的值在实例化时被初始化且不可更改,而static final字段则在类加载时初始化,其值在整个程序中保持唯一且不可变。通过多个实例的输出,强调了static final字段的“唯一且不可变”的特性。
摘要由CSDN通过智能技术生成