• [1]朝花夕拾-JAVA类的执行顺序


        最近在温习java的基础,刷题刷到java的执行顺序,很汗颜,答案回答错了!

    题目类似如下:

    package com.phpdragon.study.base;
    
    public class ExecOrder {
        Son son = new Son();
    
        public static void main(String[] args) {
            new Grandson();
            new ExecOrder();
            //打印出的结果是?
        }
    }
    
    class Grandson extends Son {
        static {
            System.out.println("Grandson static code block");
        }
    
        {
            System.out.println("Grandson code block");
        }
    
        public Grandson() {
            System.out.println("Grandson construction method");
        }
    }
    
    class Son extends Parent {
        Ohter ohter = new Ohter();
    
        static {
            System.out.println("Son static code block");
        }
    
        {
            System.out.println("Son code block");
        }
    
        public Son() {
            System.out.println("Son construction method");
        }
    }
    
    
    class Parent {
        static {
            System.out.println("Parent static code block");
        }
    
        {
            System.out.println("Parent code block");
        }
    
        public Parent() {
            System.out.println("Parent construction method");
        }
    }
    
    class Ohter {
        public Ohter() {
            System.out.println("Ohter construction method");
        }
    }

    以上代码执行结果是:

    Parent static code block
    Son static code block
    Grandson static code block
    Parent code block
    Parent construction method
    Ohter construction method
    Son code block
    Son construction method
    Grandson code block
    Grandson construction method

    Parent code block
    Parent construction method
    Ohter construction method
    Son code block
    Son construction method

    根据结果得出:

    java的执行顺序是: 父静态代码块 > 子静态代码块 >  父代属性初始化 > 父代码块 > 父构造函数 > 子代属性初始化 > 子代码块 > 子构造函数。 

    也就是说最终的执行顺序是:

    1.类中所有属性的默认值(一举而成)

    2.父类静态属性初始化,静态块,静态方法的声明(按出现顺序执行)

    3.子类静态属性初始化,静态块,静态方法的声明 (按出现顺序执行)

    4.调用父类的构造方法,

    首先父类的非静态成员初始化,构造块,普通方法的声明(按出现顺序执行)

    然后父类构造方法。

    5.调用子类的构造方法,

    首先子类的非静态成员初始化,构造块,普通方法的声明(按出现顺序执行)

    然后子类构造方法。

    其中静态代码块只执行一次。

    以上

    ps:

    深入了解Java程序执行顺序

    java类执行顺序

  • 相关阅读:
    跟风!发一篇我常用VS开发技巧
    引用:程序员最常犯的五大非技术性错误
    Introduction to the Oracle Database 3
    Oracle Database 12c 12大新特性详解
    Streams全库复制
    Introduction to the Oracle Database 2
    Oracle FlashBack
    Oracle Database Features 2
    Oracle Database Features
    TNSName配置小结
  • 原文地址:https://www.cnblogs.com/phpdragon/p/7302539.html
Copyright © 2020-2023  润新知