在Java中一个类包括:构造块、构造方法、静态块、main方法、普通方法。

  通过下面的例子将看出一个类中各种方法的执行顺序:

 /**
* @author zhengbinMac
*/
public class Test2 {
static {
System.out.println("静态块");
}
public Test2() {
System.out.println("构造方法");
}
{
System.out.println("构造块");
}
public void ok() {
System.out.println("OK()");
}
public static void main(String[] args) {
System.out.println("main()");
Test2 t2 = new Test2();
System.out.println("new Test2");
t2.ok();
}
}
/*
静态块
main()
构造块
构造方法
new Test2
OK()
*/

  可以得出:首先JVM加载这个类(执行静态块)-》执行类的入口main方法-》构造块-》构造方法-》执行调用方法

  如果有父类呢?JVM首先会检查当前类的父类是否加载,若没有则加载其父类,然后再加载自己,通过下面的测试说明:

 /**
* @author zhengbinMac
*/
public class Son extends father {
{
System.out.println("Son-构造块");
}
static {
System.out.println("Son-静态块");
}
public Son() {
System.out.println("Son-构造方法");
} @Override
public void t1() {
System.out.println("Son()");
}
public static void main(String[] args) {
System.out.println("main()");
Son t = new Son();
t.t1();
}
} class father {
{
System.out.println("Father-构造块");
} static {
System.out.println("Father-静态块");
} public father() {
System.out.println("Father-构造方法");
} public void t1() {
System.out.println("Father()");
}
}
// 输出
/*
Father-静态块
Son-静态块
main()
Father-构造块
Father-构造方法
Son-构造块
Son-构造方法
Son()
*/

  其中静态块,用static关键字声明,JVM加载类时执行,仅执行一次。

  其中构造块,类中直接用{}声明,在每次创建对象时执行。

  注意,静态块会按照声明的顺序执行。如下面这两个例子:

最新文章

  1. Android中使用ExpandableListView实现好友分组
  2. Windows批处理:配置防火墙规则、开启远程桌面
  3. CentOS默认开放的本地端口范围
  4. 在CentOS 6.6下安装与配置mysql
  5. wicket基础应用(1)--使用wicket对表单中的数据进行验证
  6. [原]携程预选赛A题-聪明的猴子-GCD+DP
  7. 【MINA】缓存区ByteBuffer和IOBuffer你要了解的常用知识
  8. [问题]编译报错:clang: error: linker command failed with exit code 1及duplicate symbol xxxx in错误解决方法之一
  9. 可变字典 NSMutableDictionary
  10. 批量缩放PNG图片.
  11. C# IOCP服务器
  12. ERROR<53761> - Plugins - conn=-1 op=-1 msgId=-1 - Connection Bind through PTA failed (91). Retrying...
  13. Golang: pprof
  14. SpringMVC强大的数据绑定(2)——第六章 注解式控制器详解
  15. 基于docker 部署 canvas-lms
  16. 转:linux/unix命令行终端的光标及字符控制快捷键
  17. Android 音视频开发(五):使用 MediaExtractor 和 MediaMuxer API 解析和封装 mp4 文件
  18. 记一次vue长列表的内存性能分析和优化
  19. redirection in linux
  20. hbuilder IOS APP 打包与发布2

热门文章

  1. hdu 3118(二进制枚举)
  2. iOS开发之都兴忱小结
  3. iOS 应用内付费(IAP)开发步骤
  4. Junit单元测试学习笔记三
  5. ls命令详解
  6. Javascript performance
  7. jenkins-slave的搭建和使用
  8. Linux资源控制-CPU和内存【转】
  9. AE 栅格图分级渲染
  10. js 鼠标上移 图片放大