static final域和final域的区别

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是运行时常量,因为是运行产生的随机数来初始化它们的。

而编译时常量一般是基本数据类型,且常量定义时要赋初值。



你可能感兴趣的:(static final域和final域的区别)