首页 > 代码库 > 朝花夕拾——再看java类变量的初始化内幕
朝花夕拾——再看java类变量的初始化内幕
前面理解过java实例变量的初始化规则 朝花夕拾——看清java实例变量的初始化内幕
今天继续理清类变量的初始化顺序和细节,需要的朋友可以一起温习下。
类变量的初始化和实例变量的初始化很相似,相比实例变量初始化,少了构造器初始化的情况。大致只有:定义类变量时初始化和静态块中初始化两种情况。
规则:上述两种情况下,先对所有类变量进行申明并申请内存,在把赋值操作全部移动到静态块中进行初始化,顺序和源代码顺序一致。
首先理解下面代码
static double number = 100;
实际上JVM处理上述语句等价于
static double number; static{ number = 100; }
按照上述规则,给出完整例子
public class TestStatic { static double number = 100; static{ System.out.println("number = "+ number); count = 200; } static double count = 300; /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("number = "+ number); System.out.println("count = "+ count); } }
按照规则,首先把double类型的number和count进行申明并申请内存(内存申请不做说明),并执行等价代码块和原来代码块,上述代码等价于下面代码
public class TestStatic { //static double number = 100; static double number; static double count; static{ number = 100; } static{ System.out.println("number = "+ number); count = 200; } //static double count = 300; static{ count = 300; } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("number = "+ number); System.out.println("count = "+ count); } }
利用javap工具查看编译器源码,图下图
两种情况下的静态块赋值情况(左边为上述第二种源代码,右边为上述第一种源代码)
到此,类变量的初始化大致如上述。
朝花夕拾——再看java类变量的初始化内幕
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。