静态代码初始化

    xiaoxiao2022-07-13  171

    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); } }

     

    最新回复(0)