Java中final static变量初始化的问题

2025-01-04 13:50:07
推荐回答(4个)
回答1:

static变量是在类加载的时候初始化

static final常量是对象实例化的时候初始化

public class StaticAndFinalTest {  
     
   private static Random rand = new Random(47); //47作为随机种子,为的就是产生随机数。  
     
   private final int a = rand.nextInt(20);  
     
    private static final int B = rand.nextInt(20);  
  
    public static void main(String[] args) {  
        StaticAndFinalTest sf = new StaticAndFinalTest();  
        System.out.println("sf : " + "a=" + sf.a);  
        System.out.println("sf : " + "B=" + sf.B);  
        System.out.println("------------------------------");  
        StaticAndFinalTest sf1 = new StaticAndFinalTest();  
        System.out.println("sf1 : " + "a=" + sf1.a);  
        System.out.println("sf1 : " + "B=" + sf1.B);  
    }  
  
}

运行结果:

sf : a=15 

sf : B=18 

-------------- 

sf1 : a=13 

sf1 : B=18 

可以看到,在sf和sf1对象中,a的值不是唯一的,但B的值是不会通过创建sf1对象而改变。这是因为它是static,在装载时已被初始化,而不是每次创建新对象时都初始化。

回答2:

static变量初始值一定要是常量。 static变量中文名叫静态变量。它与普通的变量比起来有如下几个区别: 1)位置:静态局部变量被编译器放在全局存储区.data,所以它虽然是局部的,但是在程序的整个生命周期中存在。

回答3:

因为常量是不可变的,设置了常量的属性或方法,系统不再会为它提供初始化服务,是给予程序猿自己来设施初始化值的。而没有设置常量的属性或者方法的话,那么系统会默认给他附初始化值

回答4:

和static变yuofyip