package staticfinaldemo;
import java.util.Random;
public class StaticFinalDemo {
private static Random random = new Random(20);
private static final int i1 = random.nextInt(10);
private final int i2 = random.nextInt(10);
private String id;
public StaticFinalDemo(String id){
this.id = id;
}
public String toString(){
return id + ": i1 = " + i1 + " i2 = " + i2;
}
public static void main(String[] args){
System.out.println("创建第一个StaticFinalDemo:");
StaticFinalDemo staticFinalDemo = new StaticFinalDemo("no1");
System.out.println(staticFinalDemo);
System.out.println("创建第二个StaticFinalDemo:");
StaticFinalDemo staticFinalDemo2 = new StaticFinalDemo("no2");
System.out.println(staticFinalDemo);
System.out.println(staticFinalDemo2);
}
}
运行结果:
创建第一个StaticFinalDemo:
no1: i1 = 3 i2 = 6
创建第二个StaticFinalDemo:
no1: i1 = 3 i2 = 6
no2: i1 = 3 i2 = 1
由此可知:
定义为final,说明它是一个常量;
定义为static,说明它是一个属于类的常量(使用final修饰),为该类所有对象共享,且在类装载时初始化,而不是每次创建新对象时都初始化。
i1和i2是运行时常量,因为是运行产生的随机数来初始化它们的。
而编译时常量一般是基本数据类型,且常量定义时要赋初值。