• 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 }

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

  • 相关阅读:
    MySQL数据同步,出现Slave_SQL_Running:no和slave_io_running:no问题的解决方法
    【坑】解决CentOS 7.1版本以上安装好zabbix 3.4 无法重启zabbix-server的问题
    unison+inotify的Web目录同步方案
    vue-cli3.0配置图片转base64的规则
    nginx将http升级到https并且同时支持http和https两种请求、http自动转向https
    linux中使用ps -ef
    form表单input回车提交问题
    Linux创建Jenkins启动脚本以及开机启动服务
    xshell破解
    WebSocket断开原因、心跳机制防止自动断开连接
  • 原文地址:https://www.cnblogs.com/gzu-link-pyu/p/8543135.html
Copyright © 2020-2023  润新知