zoukankan      html  css  js  c++  java
  • 一道题反映Java的类初始化过程

    Java的类初始化过程:

    1. 父类的static成员变量,static语句块。

    2. 子类的static成员变量,static语句块。

    3. 父类的普通成员变量,构造函数。

    4. 子类的普通成员变量,构造函数。

    注意:如果下面一句话没看懂,没关系,看下面的一个例子就明白了~

    如果子类覆盖了父类的成员函数,该成员函数又在上面过程3中的构造函数中被调用,则此时调用的是子类的那个成员函数,如果成员函数中还含有子类中没有被初始化的普通成员变量,则若是int类型,默认初始化为0,若为对象类型,默认初始化为null.

    Java实例如下:

    abstract class Base {
        public int age = getNumber(100);
        static int sage = getNumber(50);
        static {
            System.out.println("base static block");
        }
        public Base() {
            System.out.println(age);
            System.out.println("base start");
            draw();
            System.out.println("base end");
        }
        static int getNumber(int base) {
            System.out.println("base.getNumber int" + base);
            return base;
        }
        public void draw() {
            System.out.println("base.draw");
        }
    }
    
    public class InitializeOrder extends Base {
        public int age = getNumber(1001);
        private int _radius = getNumber(10);
        static int sage = getNumber(250);
        static {
            System.out.println("subclass static block");
        }
        public InitializeOrder(int radius) {
            _radius = radius;
            System.out.println(age);
            System.out.println("initializeOrder initialized");
        }
        public void draw() {
            System.out.println("initializeOrder.draw" + _radius);
        }
        
        public static void main(String[] args) {
            new InitializeOrder(100);
        }
    }

    输出结果:

    base.getNumber int50
    base static block
    base.getNumber int250
    subclass static block
    base.getNumber int100
    100
    base start
    initializeOrder.draw0
    base end
    base.getNumber int1001
    base.getNumber int10
    1001
    initializeOrder initialized

    尤其注意上面输出中的加红色的部分!

  • 相关阅读:
    while循环和递归
    ASP.NET Core Swagger 显示接口注释
    ABP依赖注入
    EF Core 笔记
    .NET Core 管道过滤器扩展
    ABP权限认证
    552 you must authentication
    C# 多线程写文件,时常写不成功
    .Net 的一些插件
    多线程下HttpContext.Current 的问题
  • 原文地址:https://www.cnblogs.com/lasclocker/p/4920958.html
Copyright © 2011-2022 走看看