文档章节

JAVA代码块执行顺序分析测试

GameKing
 GameKing
发布于 2013/12/23 10:25
字数 425
阅读 589
收藏 9

  在实际的工作过程中,几乎从没用过JAVA的代码块。不过既然做了这方面的学习与测试,就索性记录下来防止忘记。同一个招式,圣斗士是不会学习第二遍的...

  首先,上代码:

public class CodeBlockTest {
	
	public CodeBlockTest(){
		//构造函数代码块
		System.out.println("this is construct!");
		
		{
			System.out.println("this is construct code block!");
		}
	}
	
	//静态代码块
	static{
		System.out.println("this is static code block!");
	}
	
	//普通代码块
	{
		System.out.println("this is code block!");
	}
	
	@SuppressWarnings("unused")
	public static void main(String[] args){
		{
			System.out.println("你会不会忽然的出现..?");
		}
		
		CodeBlockTest cbt = null;
		
		{
			System.out.println("在街角的咖啡店..?");
		}
		
		cbt = new CodeBlockTest();
	}
}



直接右键运行,测试结果如下:

this is static code block!
你会不会忽然的出现..?
在街角的咖啡店..?
this is code block!
this is construct!
this is construct code block!


从输出的结果来看,静态代码块应该是在类加载的时候就开始执行,普通代码块则在类实例化之后第一时间执行,之后是构造函数,构造函数代码块。。。

接下来引入子类:

public class SonCodeBlockTest extends CodeBlockTest{
	
	public SonCodeBlockTest(){
		System.out.println("This is son construct!");
	}
	
	static{
		System.out.println("This is son static block!");
	}
	
	@SuppressWarnings("unused")
	public static void main(String[] args){
		SonCodeBlockTest son = new SonCodeBlockTest();
	}

}



右键执行之,结果如下:

this is static code block!
This is son static block!
this is code block!
this is construct!
this is construct code block!
This is son construct!

很明显,由于类的加载顺序,执行顺序是:父类的静态代码块-->子类的静态代码块-->父类的普通代码块-->父类的构造函数-->子类的普通代码块(如果有的话)-->子类的构造函数


© 著作权归作者所有

共有 人打赏支持
GameKing
粉丝 22
博文 20
码字总数 20400
作品 1
杭州
程序员
私信 提问
两道面试题,带你透彻解析Java类加载机制

  在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题:   class Grandpa { static { System.out.println("爷爷在静态代码块"); } } class Father extends Gran...

java进阶架构师
2018/12/06
0
0
两道面试题,带你解析Java类加载机制

文章首发于【博客园-陈树义】,点击跳转到原文《两道面试题,带你解析Java类加载机制》 在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题: 请写出最后的输出字符...

陈树义
2018/06/12
0
0
从原理来理解继承关系的类初始化和实例化的顺序

就像之前的一个评论.我们学习的是思路. 很多人都知道继承关系的类的初始化和实例化的顺序,但如果忘记了怎么办? 如何找到自己的答案? 又如果遇到的问题是关于泛型的擦除问题,又该如何去分析?...

xpbug
2013/03/03
0
4
JVM系列第7讲:JVM 类加载机制

当 Java 虚拟机将 Java 源码编译为字节码之后,虚拟机便可以将字节码读取进内存,从而进行解析、运行等整个过程,这个过程我们叫:Java 虚拟机的类加载机制。JVM 虚拟机执行 class 字节码的过...

陈树义
2018/11/20
0
0
两道面试题带你解析 Java 类加载机制

在许多Java面试中,我们经常会看到关于Java类加载机制的考察,例如下面这道题: class Grandpa{ } class Father extends Grandpa{ }class Son extends Father{ }public class Initialization...

2018/06/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

富兰克林的人生信条

春节假期期间读了富兰克林自传,这位饱经风霜的老人出身贫寒,只读过两年书,但是通过刻苦自学和不懈奋斗还是取得了令人难以置信的成就,他的一生可以作为我们普通人的励志典范。 富兰克林 ...

春哥大魔王的博客
今天
1
0
不用中间变量交换 a ,b(三种方法)

1、加减法:该方法可以交换整型和浮点型数值的变量,但在处理浮点型的时候有可能出现精度的损失。 a = a + b; b = a - b; a = a - b; 2、异或法:可以完成对整型变量的交换,对于浮点型变量它...

robslove
今天
5
0
一文了解 OutOfMemory 及解决方案

1. Java 堆空间 发生频率 5颗星 造成原因 无法在 Java 堆中分配对象 吞吐量增加 应用程序无意中保存了对象引用,对象无法被 GC 回收 应用程序过度使用 finalizer。finalizer 对象不能被 GC 立...

java菜分享
今天
5
0
高效遍历Java容器

通过本文,你可以更深入的学习 Java 语言中 forEach 语法的知识,以及它和 C 语言形式的 for 循环、 Steam API 的对比。 简介 Java 程序员经常使用容器,比如 ArrayList 和 HashSet。Java 8 ...

微笑向暖wx
今天
4
0
SpringBoot整合Swagger测试api构建

什么是Swagger? Swagger是什么:THE WORLD’S MOST POPULAR API TOOLING 根据官网的介绍: Swagger Inspector:测试API和生成OpenAPI的开发工具。Swagger Inspector的建立是为了解决开发者的...

编程SHA
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部