zoukankan      html  css  js  c++  java
  • java类的初始化过程

    1 先初始化父类的静态成员和静态块,然后初始化子类的静态成员和静态块,然后再初始化父类,然后再初始化子类。

    2 先初始化父类

    3 单个类初始化的顺序

    先初始化成员变量和代码块,后调用构造函数

    4 如果父类的构造函数中调用了被子类重写了的方法的话,在创建子类对象的时候,会调用子类中重写的方法

    这个时候会出现的问题是,子类的成员还没有初始化,调用子类的方法返回的值并不是预想的结果。

    至于为什么这样,是因为java编译器编译的时候,父类的构造函数调用被子类重写的方法时使用的是this指针,而不是super指针,this指针是指向子类对象的。

    下面的例子会输出null

    package com.gxlee;
    
    public class Base {
        private String baseName=  "base";
        public Base() {
            callName();
        }
        public void callName(){
            System.out.println(baseName);
        }
        
        static class Sub extends Base{
            private String baseName = "sub";
            public void callName(){
                System.out.println(baseName);
            }
        }
        public static void main(String[] args) {
            Base b = new Sub();
            System.out.println(b);
        }
    }
  • 相关阅读:
    考研复试之dp重温
    面试总结
    决策树学习记录
    python机器学习随笔
    大三狗重新复习算法之递推
    第十二届CSP总结
    unity(Exploder插件)研究
    unity学习笔记2
    Unity3d学习笔记(持续更新)。。。
    4.24
  • 原文地址:https://www.cnblogs.com/hustdc/p/8894005.html
Copyright © 2011-2022 走看看