Java 变量初始化时机
2016-03-31 15:07
651 查看
内容参考《疯狂Java程序员的基本修养》李刚 著
非静态初始化块中对实例变量指定初始值
构造器中对实例变量指定初始值
代码示例:
输出结果:
注:初始化的执行顺序为:构造器最后执行,而定义时和初始化块按顺序先后执行。
验证如下:
1.1、定义时初始化在前:
输出结果:
1.2、初始化块在前:
输出结果:
静态初始化块中对类变量指定初始值
代码示例:
输出结果:
注:加载类时先为所有类变量分配内存空间,再按源代码中的定义类变量和静态初始化块的排列顺序执行初始化。
代码验证:
输出结果:
一、实例变量初始化时机
定义实例变量时指定初始值非静态初始化块中对实例变量指定初始值
构造器中对实例变量指定初始值
代码示例:
package com.tide.controller; /** * Created by wengliemiao on 16/3/26. */ public class T2{ private int a = 1; public T2() { System.out.println("执行构造器"); a = 2; } { System.out.println("执行非静态初始化块"); a = 3; } public static void main(String[] args) { T2 t = new T2(); System.out.println("a = " + t.a); } }
输出结果:
注:初始化的执行顺序为:构造器最后执行,而定义时和初始化块按顺序先后执行。
验证如下:
1.1、定义时初始化在前:
package com.tide.controller; /** * Created by wengliemiao on 16/3/26. */ public class T2{ private int a = 1; { System.out.println("执行非静态初始化块"); a = 3; } public static void main(String[] args) { T2 t = new T2(); System.out.println("a = " + t.a); } }
输出结果:
1.2、初始化块在前:
package com.tide.controller; /** * Created by wengliemiao on 16/3/26. */ public class T2{ { System.out.println("执行非静态初始化块"); a = 3; } private int a = 1; public static void main(String[] args) { T2 t = new T2(); System.out.println("a = " + t.a); } }
输出结果:
二、类变量初始化时机
定义类变量时指定初始值静态初始化块中对类变量指定初始值
代码示例:
package com.tide.controller; /** * Created by wengliemiao on 16/3/26. */ public class T2{ static { System.out.println("静态初始化块"); a = 2; } public static int a = 1; public static void main(String[] args) { System.out.println("a = " + T2.a); } }
输出结果:
注:加载类时先为所有类变量分配内存空间,再按源代码中的定义类变量和静态初始化块的排列顺序执行初始化。
代码验证:
package com.tide.controller; /** * Created by wengliemiao on 16/3/26. */ public class T2{ public static int a = 1; static { System.out.println("静态初始化块"); a = 2; } public static void main(String[] args) { System.out.println("a = " + T2.a); } }
输出结果:
相关文章推荐
- spring定时任务轮询(spring Task)
- Java - JVM
- java应用程序实现jetty 集成jersey 和spring
- Java实现链表结构的详细代码
- Java虚拟机 运行时数据区
- Spring3.1新特性(转)
- java实现链表结构详细代码
- Struts实例
- Java内存区域-JVM
- javaweb --- jsp页面遍历list<map>类型的数据
- 如何利用反射机制另一个类中的private属性 | Java基础
- JNI/NDK开发指南(三)——JNI数据类型及与Java数据类型的映射关系
- java导出excel
- java基础高级2 MySQL 高级
- javacript 优化2
- Java学习·this关键字在构造函数间调用
- Java - Exception
- Eclipse设置:背景与字体大小和xml文件中字体大小调整
- ubuntu 安装 opencv2.4.9 java环境
- Jedis存储Java对象--Java序列化为byte数组方式