zoukankan      html  css  js  c++  java
  • [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类执行顺序

  • 相关阅读:
    Centos 下安装php
    php 基础 PHP保留两位小数的几种方法
    php基础 php 全局变量
    php 基础 语句include和require的区别是什么?为避免多次包含同一文件,可用(?)语句代替它们?
    php 基础 获取远程连接
    php 基础 php获取前一天,前一个月,前一年的时间
    redis 基础 Redis 数据类型
    [Poj2349]Arctic Network(二分,最小生成树)
    [USACO07DEC]Sightseeing Cows(负环,0/1分数规划)
    [Tyvj2032]升降梯上(最短路)
  • 原文地址:https://www.cnblogs.com/phpdragon/p/7302539.html
Copyright © 2011-2022 走看看