java学习个人笔记---类成员变量初始化顺序
2015-08-15 17:16
495 查看
类成员变量初始化顺序:
1、定义实例变量时指定初始值;
2、非静态初始化块中对实例变量指定初始值;
3、构造函数对实例变量指定初始值
这3种方式(以下简称1,2,3)初始化的顺序是怎样的呢?
下面根据程序实例分析一下:
由此可见其中1和2要比3更早执行,那么1与2哪个更早执行呢?
下面我测试一下:
这里要注意了:1与2 的执行顺序与他们在源程序中的排列顺序有关,是按顺序执行的
这里分析一下a=3而为什么不等于2
实际上会被分成两块执行:
int a:创建Java对象时分配内存
a=3:提取到Java类构造器中执行(这里注释掉,其实还是会被系统调用进去),最终的结果a=3
1、定义实例变量时指定初始值;
2、非静态初始化块中对实例变量指定初始值;
3、构造函数对实例变量指定初始值
这3种方式(以下简称1,2,3)初始化的顺序是怎样的呢?
下面根据程序实例分析一下:
public class Javatest_ClassMemberInitOrder { int b; //构造函数对实例变量指定初始值 public Javatest_ClassMemberInitOrder(int b){ System.out.println("执行构造函数"); this.b=b; this.a=b; } //非静态初始化块中对实例变量指定初始值 { System.out.println("执行非静态初始化块"); a=2; } //定义实例变量时指定初始值 int a=3; public static void main(String[] args){ Javatest_ClassMemberInitOrder myclass=new Javatest_ClassMemberInitOrder(5); System.out.println("b="+myclass.b); System.out.println("a="+myclass.a); } }
由此可见其中1和2要比3更早执行,那么1与2哪个更早执行呢?
下面我测试一下:
这里要注意了:1与2 的执行顺序与他们在源程序中的排列顺序有关,是按顺序执行的
这里分析一下a=3而为什么不等于2
实际上会被分成两块执行:
int a:创建Java对象时分配内存
a=3:提取到Java类构造器中执行(这里注释掉,其实还是会被系统调用进去),最终的结果a=3
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树
- [原创]java局域网聊天系统