zoukankan      html  css  js  c++  java
  • Java类的执行顺序

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

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

     1 /**
     2  * @author zhengbinMac
     3  */
     4 public class Test2 {
     5     static {
     6         System.out.println("静态块");
     7     }
     8     public Test2() {
     9         System.out.println("构造方法");
    10     }
    11     {
    12         System.out.println("构造块");
    13     }
    14     public void ok() {
    15         System.out.println("OK()");
    16     }
    17     public static void main(String[] args) {
    18         System.out.println("main()");
    19         Test2 t2 = new Test2();
    20         System.out.println("new Test2");
    21         t2.ok();
    22     }
    23 }
    24 /*
    25 静态块
    26 main()
    27 构造块
    28 构造方法
    29 new Test2
    30 OK()
    31 */

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

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

     1 /**
     2  * @author zhengbinMac
     3  */
     4 public class Son extends father {
     5     {
     6         System.out.println("Son-构造块");
     7     }
     8     static {
     9         System.out.println("Son-静态块");
    10     }
    11     public Son() {
    12         System.out.println("Son-构造方法");
    13     }
    14 
    15     @Override
    16     public void t1() {
    17         System.out.println("Son()");
    18     }
    19     public static void main(String[] args) {
    20         System.out.println("main()");
    21         Son t = new Son();
    22         t.t1();
    23     }
    24 }
    25 
    26 class father {
    27     {
    28         System.out.println("Father-构造块");
    29     }
    30 
    31     static {
    32         System.out.println("Father-静态块");
    33     }
    34 
    35     public father() {
    36         System.out.println("Father-构造方法");
    37     }
    38 
    39     public void t1() {
    40         System.out.println("Father()");
    41     }
    42 }
    // 输出
    /*
    Father-静态块
    Son-静态块
    main()
    Father-构造块
    Father-构造方法
    Son-构造块
    Son-构造方法
    Son()
    */

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

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

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

  • 相关阅读:
    android笔记5——同一个Activity中Fragment的切换
    JavaScript 刚開始学习的人应知的 24 条最佳实践
    位运算符之异或的化腐朽为奇妙
    unity常见问题之20题
    汉澳sinox不受openssl心血漏洞影响并分析修复其漏洞代码
    基于canvas和Web Audio的音频播放器
    poj2595(凸包)
    HDU 1257 最少拦截系统(dp)
    【iOS开发-33】学习手动内存管理临时抛弃ARC以及retain/assign知识——iOSproject师面试必考内容
    万能狗! 程序猿屌丝独自创业之路(一)
  • 原文地址:https://www.cnblogs.com/zhengbin/p/5671163.html
Copyright © 2011-2022 走看看