Java类代码块执行顺序
2016-04-21 16:24
435 查看
<pre name="code" class="java">public class A { //静态变量 static int a = 0; //非静态代码块 { System.out.println("A.scope ");//非静态代码块 a = 10 ; } //静态代码块 static { <span style="white-space:pre"> </span>System.out.println("A.static code block"); <span style="white-space:pre"> </span>a = 20; } //构造函数 public A() { System.out.println("A.Constructor"); } public static void main(String arg[]) { System.out.println(A.a); <span style="white-space:pre"> </span>System.out.println(A.a); <span style="white-space:pre"> </span>A a1 = new A(); <span style="white-space:pre"> </span>A a2 = new A(); <span style="white-space:pre"> </span>System.out.println(a1.a); <span style="white-space:pre"> </span>System.out.println(a2.a); <span style="white-space:pre"> </span>System.out.println(A.a); } }
输出结果如下:
A.static code block
20
20
A.scope
A.Constructor
A.scope
A.Constructor
10
10
10
我们得到,java中静态代码块首先被执行,且只被执行一次,当实例化一个对象之后,将会首先执行非静态代码块,接着执行构造函数。
当一个类从被JVM装载开始,各种代码的执行顺序大致如下:
被JVM装载——执行父类的相关代码——如果有静态初始化,先执行静态初始化,且只执行一次,以后即使有该类实例化,也不会再执行——如果有静态代码块,以与静态初始化一样的方式执行——如果有new语句带来的实例化,先为成员变量分配空间,并绑定参数列表,隐式或显式执行super(),即父类的构造方法,——执行非静态代码块——执行本类的构造函数——执行其他代码
相关文章推荐
- 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简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树