zoukankan      html  css  js  c++  java
  • JAVA代码的执行顺序二

    小编的上一篇博客:JAVA代码的执行顺序一简单的讨论了一下,此篇博客深入讨论一下JAVA类初始化的顺序

    考虑继承关系,静态成员字段/对象,普通的成员字段/对象:子类与父类的执行顺序是: 
    1、先执行父类的静态代码块(父1) /静态成员字段/对象 [静态对象,静态代码块顺序执行]
    2、子类的静态代码块(子1)  /静态成员字段/对象

    3、父类构造代码块(父2) /包括成员字段或对象 [普通的对象,代码块顺序执行]
    4、父类构造方法(父3) 
    5、子类构造代码块(子2) /包括成员字段或对象 [普通的对象,代码块顺序执行]
    6、子类构造方法(子3)

    初始化对象成功

    1.有继承关系的类,先在执行父类中执行,在到子类中执行;

    2.static修饰(特别注意的是static修饰的成员对象,静态代码块),顺序执行;

    3.非static修饰(特别注意的是成员对象,代码块/如{int a=0;}),顺序执行;

    我们先来看一份简单的代码:

    注意:代码中的static成员对象,static代码块;普通的成员对象,代码块;有继承关系

     1 package com.gzu.pyu.thinking.in.java;
     2 
     3 public class JavaExecutionOrder3 {
     4     
     5     public static void main(String args[]){
     6         System.out.println("Start Java Execution Order:");
     7         B b = new B();
     8     }
     9 }
    10 
    11 class A{
    12     C c =new C();
    13     {
    14         System.out.println("TestA's Code block");
    15     }
    16     
    17     static {
    18         System.out.println("TestA's Static code block");
    19     }
    20     
    21     public A(){
    22         System.out.println("TestA's Constructor");
    23     }
    24 }
    25 
    26 class B extends A{
    27     //注意:静态成员对象,和非静态成员对象的初始化顺序和实际
    28     static C c =new C();
    29     D d = new D();
    30     
    31     static {
    32         System.out.println("TestB's Static code block");
    33     }
    34     
    35     {
    36         System.out.println("TestB's Code block");
    37     }
    38     
    39     public B(){
    40         System.out.println("TestB's Constructor");
    41     }
    42 }
    43 
    44 class C {
    45     static {
    46         System.out.println("TestC's Static code block");
    47     }
    48     
    49     {
    50         System.out.println("TestC's Code block");
    51     }
    52     
    53     public C(){
    54         System.out.println("TestC's Constructor");
    55     }
    56 }
    57 
    58 class D{
    59     static {
    60         System.out.println("TestD's Static code block");
    61     }
    62     
    63     {
    64         System.out.println("TestD's Code block");
    65     }
    66     
    67     public D(){
    68         System.out.println("TestD's Constructor");
    69     }
    70 }

      以上代码的执行结果如下:

  • 相关阅读:
    WIN32窗口框架代码,完善了菜单和子窗口,纯API,可自由扩展,C语言也可以写桌面程序
    自制WINDOWS窗口框架(修改完善后实现了输入和显示功能),C+WIN-API,再也不用面对黑框框学C语言了
    定义一个判断素数的函数
    定义一元二次方程求根函数
    定义一个二维数组反置函数
    让C语言告别简陋的黑框框,WIN32窗口显示九九乘法表(纯C代码)
    C语言练习题40——将一个数组逆序输出
    c语言练习39——向数列中插入一个数
    c语言练习38——求3*3矩阵对角线之和
    js之好看的鼠标点击-光标特效
  • 原文地址:https://www.cnblogs.com/gzu-link-pyu/p/8543135.html
Copyright © 2011-2022 走看看