静态代码初始化
2019-05-23 18:11
1786 查看
[code]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); } }
相关文章推荐
- java静态代码快详解和初始化顺序
- java类/对象的初始化顺序及静态代码的使用
- Java中的代码块(普通代码块、静态代码块、同步代码块、构造代码块)与final变量的初始化
- 静态数据的初始化(Think in java P95页代码解析)
- 【转】多线程陷阱(所有静态初始化块中的代码不一定是类初始化操作)
- JAVA面向对象知识点总结(3)—静态static、主函数详解、静态代码快、对象初始化过程
- 多线程陷阱(所有静态初始化块中的代码不一定是类初始化操作)
- C++ 静态成员的类内初始化详解及实例代码
- 静态代码初始化详解
- css初始化代码方案
- [BuildRelease]C++代码静态分析工具splint
- php文章内容分页并生成相应的htm静态页面代码
- c 代码定义的位置与初始化关系
- linux pc-lint强大的静态代码检查工具
- 静态代码分析工具列表分析---代码分析工具列表(30款工具)
- Java中初始化对象的顺序,静态代码块的用法以及Static的用法详解
- Cocos2d-x 3.1.1 学习日志2--error:仅仅有静态常量整型数据成员才干够在类中初始化
- C++代码静态分析工具-Prefast
- 静态代码块 构造函数 静态代码块块执行顺序
- 类的加载顺序以及静态成员初始化顺序