zoukankan      html  css  js  c++  java
  • 从一道笔试题中看java的初始化顺序

    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();
        }
    }
     
     
     

    1:这段程序在控制台上输出的是null,首先在new对象时会初始化父类的成员变量和构造器,父类构造器里的方法在子类中进行了重写,所以会调用子类的这个callName()方法,但是这个时候子类的成员变量还未进行初始化所以默认值为null.

    2:没有继承的java初始化顺序

    1)首先会执行初始化static成员变量(static代码块也可以看做是static成员变量,所以执行顺序看他两在程序中出现的顺序)

    2)初始化普通的成员变量

    3)初始化构造函数

    3:有继承的java初始化顺序

    1)初始化父类的static成员变量和静态代码块

    2)初始化子类的static成员变量和静态代码块

    3)初始化父类的成员变量

    4)初始化父类的构造方法

    5)初始化子类的成员变量

    6)初始化子类的构造函数

  • 相关阅读:
    Shell 中 -n 条件判断的使用
    Linux shell 中(()) [] [[ ]] 的使用
    Linux 利用黑洞实现“取消在控制台输出日志”
    Hadoop DataNode 多目录磁盘扩展配置
    Linux 挂载硬盘
    css 对元素在文档中的排列的影响
    vue-route 基础
    javaScript 琐碎
    javaScript 事件流---冒泡 && 捕获
    页面优化---利用浏览器缓存
  • 原文地址:https://www.cnblogs.com/wyc520/p/5244299.html
Copyright © 2011-2022 走看看