java类变量(staticfinal)在那个阶段或环节赋值
java 类变量(static final)在那个阶段或环节赋值
类加载过程
类变量初始化(static final)
使⽤static + final 修饰的字段的显⽰赋值的操作 ,到底在哪个阶段进⾏的赋值?
1. 情况:在链接阶段的准备环节赋值
2. 情况:在初始化阶段<clinit>() 中赋值
在链接阶段的准备环节赋值的情况:
1. 对于基本数据类型的字段来说,如果使⽤static final修饰,则显⽰赋值(直接赋值常量,⽽⾮调⽤⽅法)
通常是在链接阶段
的准备环节进⾏
2. 对于String来说,如使⽤字⾯量的⽅式赋值,使⽤static final 修饰的话,则显⽰赋值通常是在链接阶段的准备环节进⾏
static修饰的变量在初始化阶段<clinit>() 中赋值情况:
排除上述的在准备环节赋值的情况之外的情况。
public class InitialzationTest{
public static int a =1;//在初始化阶段<clinit>() 中赋值
public static final int b =10;//在链接阶段的准备环节赋值
public static final int f =new Random().nextInt();//在初始化阶段<clinit>() 中赋值
public static Integer c = Integer.valueOf(100);//在初始化阶段<clinit>() 中赋值
public static final Integer d = Integer.valueOf(100);//在初始化阶段<clinit>() 中赋值
public static String s2 ="helloworld2";//在初始化阶段<clinit>() 中赋值
public static final String s0 ="helloworld0";//在链接阶段的准备环节赋值
public static final String s1 =new String("helloworld1");//在初始化阶段<clinit>() 中赋值
}
结论:字段使⽤static + final 修饰,数据类型为基本数据类型或String类型,且显⽰赋值不涉及⽅法或构造器调⽤,赋值操作都是在链接阶段的准备环节进⾏。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论