package com.learn;public class Test01 {/*** 比如我赋值叫500* 这里也要定义为静态的*/
// private static int age = 500;/*** 静态代码块你们听过没有* 听说过吧*/static {/*** 静态代码块初始化* 它是为2* 这个步骤是怎么样进行执行的* 代码是怎么进行执行的* 怎么执行* 什么顺序* */System.out.println("2静态代码块初始化");/*** 我能不能应用age* 我把它赋值700*/age = 700;}/*** 这个能不能放在下面* 这个时候是多少* 是500* 编译器自动收藏类中的所有变量的赋值动作和静态语句块static块中的语句合并产生* 代码从上往下执行* 这肯定是500不是700的* 这个也没有特别高达上* 答错也没关系* 如果我长期没搞我也会答错的* 忘记很正常的* * 500的原理是因为静态代码块和全局变量的时候* 会做一个合并执行* 具体多少* 会和你的执行顺序有关* 如果我放到上面* 那就会先执行age等于500* 然后静态static里面会把age值赋值为700* 这样的话age就为700了* * * 如果放到下面* 编译器就会从上往下执行* age一开始的默认值是为0* 当你age值设置为700的情况下* 又改为500了* 你再打印的时候值肯定就为500了* 这个其实为JAVA基础* * 它是先int age = 0;* static代码块里面把age = 700* 然后走到这一行的时候age = 500* * 有人会认为你静态代码块前面age没有初始化肯定报错* 其实JVM做了一个优化* int age = 0* 走到静态代码块的时候age的值等于700* 然后走到这一行的时候age就等于500了* * */private static int age = 500;/*** 我们把我们的构造函数也打印出来*/public Test01() {/*** 这个时候我们写一下叫做什么* 构造函数初始化* 这个你们都学过的* 这个我倒不用讲的特别细* * 我标记几个步骤* 它是为1*/System.out.println("1构造函数.....");}/*** 我们再写一个main函数出来*/public static void main(String[] args) {/*** new一下这个类* 你们可以说一下大体的结果*/Test01 t = new Test01();/*** 比如我这里new两个* 这个叫t2* 这个时候代码是怎么打印的* 2,1,1,500* static难道不会初始化两次吗* 静态只初始化一次的* */Test01 t2 = new Test01();/*** age的结果是多少* 是500还是700你们说一下* 肯定是2,1* 静态肯定是优先于构造方法* */System.out.println(t.age);}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!