Java代码块执行顺序
2015-09-08 12:44
169 查看
Java中静态代码块、构造代码块、构造方法代码块、父子类代码块之间执行顺序及代码示例
1、静态代码块
运行结果:
运行结果:
3、main主方法代码
运行结果:
4、子类和父类的代码块
运行结果:
5、总结:
代码块的执行顺序:静态代码块->main方法的代码->构造代码块->构造方法->顺序执行代码(或同步代码块)
继承类代码块的执行顺序:父类静态代码块->子类静态代码块->main方法的代码->父类构造代码块->父类构造方法->子类构造代码块->子类构造方法->顺序执行代码(包括普通代码块、同步代码块)
1、静态代码块
public class HelloA { public HelloA() { System.out.println("constructor A..."); } //这是构造代码块,而且在new对象时,构造代码块优先构造方法执行 { System.out.println("I'm A class"); } //使用static关键字声明的代码块称为静态代码块,静态块的主要目的是用来为静态属性初始化 //静态块优先于主方法的执行,静态块优先于构造方法的执行,而且只执行一次! //静态代码块 static { System.out.println("static A"); } public static void main(String[] args) { } }
运行结果:
static A2、构造代码块、构造方法
public class HelloA { public HelloA() { System.out.println("constructor A..."); } //这是构造代码块,而且在new对象时,构造代码块优先构造方法执行 { System.out.println("I'm A class"); } //使用static关键字声明的代码块称为静态代码块,静态块的主要目的是用来为静态属性初始化 //静态块优先于主方法的执行,静态块优先于构造方法的执行,而且只执行一次! //静态代码块 static { System.out.println("static A"); } public static void main(String[] args) { HelloA helloA = new HelloA(); } }
运行结果:
3、main主方法代码
public class HelloA { public HelloA() { System.out.println("constructor A..."); } //这是构造代码块,而且在new对象时,构造代码块优先构造方法执行 { System.out.println("I'm A class"); } //使用static关键字声明的代码块称为静态代码块,静态块的主要目的是用来为静态属性初始化 //静态块优先于主方法的执行,静态块优先于构造方法的执行,而且只执行一次! //静态代码块 static { System.out.println("static A"); } public static void main(String[] args) { System.out.println("main start"); HelloA helloA = new HelloA(); System.out.println("main end"); } }
运行结果:
static A main start I'm A class constructor A... main end
4、子类和父类的代码块
public class HelloB extends HelloA { private static String str = "1"; public HelloB() { System.out.println("constructor B..."); } //这是构造代码块,而且在new对象时,构造代码块优先构造方法执行 { System.out.println("I'm B class"); } //使用static关键字声明的代码块称为静态代码块,静态块的主要目的是用来为静态属性初始化 //静态块优先于主方法的执行,静态块优先于构造方法的执行,而且只执行一次! //静态代码块 static { System.out.println("static B"); } /** * 代码块的执行顺序:静态代码块->main方法的代码->构造代码块->构造方法->顺序执行代码(或同步代码块) * 继承类代码块的执行顺序:父类静态代码块->子类静态代码块->main方法的代码->父类构造代码块->父类构造方法->子类构造代码块->子类构造方法->顺序执行代码(包括普通代码块、同步代码块) * @param args */ @SuppressWarnings("unused") public static void main(String[] args) { System.out.println("main method start"); HelloB helloB = new HelloB(); System.out.println("main method end"); //同步代码块 synchronized(str){ System.out.println("同步代码块:" + str); } //普通代码块 { int x = 10; System.out.println("普通代码块x=" + x); } } }
运行结果:
static A static B main method start I'm A class constructor A... I'm B class constructor B... main method end 同步代码块:1 普通代码块x=10
5、总结:
代码块的执行顺序:静态代码块->main方法的代码->构造代码块->构造方法->顺序执行代码(或同步代码块)
继承类代码块的执行顺序:父类静态代码块->子类静态代码块->main方法的代码->父类构造代码块->父类构造方法->子类构造代码块->子类构造方法->顺序执行代码(包括普通代码块、同步代码块)
相关文章推荐
- swagger springMVC,配置
- MyEclipse快捷键大全
- java基础:位运算用法测试代码
- java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I
- 编写学习的java几种常用数组的排序方法,给大家分享一下
- java注意事项演示 地图产生表 演示样本 来自thinking in java 4 20代码的章
- WEB请求过程的深入学习(深入分析JavaWeb技术内幕,第一章读后总结和深入学习)
- java调用存储过程
- 操作系统通过JDK载入JVM
- 【java基础】]IO流
- 【java基础】]IO流
- Java 异常类层次结构
- 深入理解Java的接口和抽象类
- 调用百度地图 5.0手机报错java.lang.UnsatisfiedLinkError: No implementation found for int
- Java中使用Base64编码实例
- JavaSE---IO流(其他流)
- 从Spring官网快速定位Spring Framework的位置
- JAVA jdk 环境变量配置
- 使用XStream注解实现Java对象与XML互相转换的代码示例
- 专访黄勇:Java