Java中final static变量初始化的问题
答案:4 悬赏:40 手机版
解决时间 2021-03-15 07:24
- 提问者网友:骨子里的高雅
- 2021-03-14 23:38
Java中final static变量初始化的问题
最佳答案
- 五星知识达人网友:零点过十分
- 2021-03-15 01:11
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,在装载时已被初始化,而不是每次创建新对象时都初始化。
追问你证明的单独使用final和static的区别,我问的时static final和static的区别 - -!
而且我的问题是 同样是被static final修饰,为什么基本数据类型被访问时不会触发所属类的初始化,而引用类型会触发;追答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,在装载时已被初始化,而不是每次创建新对象时都初始化。
追问你证明的单独使用final和static的区别,我问的时static final和static的区别 - -!
而且我的问题是 同样是被static final修饰,为什么基本数据类型被访问时不会触发所属类的初始化,而引用类型会触发;追答static加上去也是这样的
全部回答
- 1楼网友:三千妖杀
- 2021-03-15 03:28
和static变yuofyip
- 2楼网友:煞尾
- 2021-03-15 02:41
因为常量是不可变的,设置了常量的属性或方法,系统不再会为它提供初始化服务,是给予程序猿自己来设施初始化值的。而没有设置常量的属性或者方法的话,那么系统会默认给他附初始化值
- 3楼网友:等灯
- 2021-03-15 01:54
static变量初始值一定要是常量。 static变量中文名叫静态变量。它与普通的变量比起来有如下几个区别: 1)位置:静态局部变量被编译器放在全局存储区.data,所以它虽然是局部的,但是在程序的整个生命周期中存在。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯