`
dwangel
  • 浏览: 261874 次
社区版块
存档分类
最新评论

Java 的静态初始化块的调用顺序 先父类后子类

阅读更多
最近面试,被问到一道题,父类和子类都有静态初始化块代码,
其中包含输出语句,先执行哪个。

因为从代码维护的角度,我一般只是在初始化静态容器数据时,使用static块,
所以并不是很清楚,直观的认为是先父类,后子类。

面试官说,父类的不会被执行。

心下存怀疑

回来写代码一试,果然如我所想。

可能面试官是在用spring容器时,又想用 static初始化块。
但是Spring中类的生存周期和bean的周期有很大间隔,可能漏看了……
代码如下
public class Aclass {
    protected static Map<String, String> data;
    static {
        data = new HashMap<String, String>();
        data.put("adfdasf","sdfadsf");
        System.out.println("aclass");
    }
}

public class BClass extends Aclass {
    static Map<String, String> map;
    static {
        map = new HashMap<String, String>();
        map.put("sdf","hhaha");
        System.out.println("bclass");
    }

    public static void main(String[] args) {
        BClass b = new BClass();
    }
}

输出结果是
aclass
bclass
分享到:
评论

相关推荐

    java面试题静态加载顺序构造方法

    Java中的继承与静态static等的执行先后顺序的面试题 java面试题静态加载顺序构造方法 ...2、调用类的构造方法时先调用父类的构造方法,在调用子类的构造方法 3、类初始化时,先初始化类的属性成员,在执行构造方法。

    【04-面向对象(上)】

     但执行一个子类时,最先执行其最顶层父类的静态初始化, •初始化块是属于实例 的。只要创建一次对象,初始化块就执行一次。 下面贴出代码: Dog DogTest Person PersonTest ReturnThis ...

    Java开发技术大全(500个源代码).

    errorInit.java 演示变量初始化错误的程序 integerExample.java 演示各种整型变量的使用 isPrime.java 判断素数 leapYearByIf.java 用if语句判断闰年 leapYearByLogical.java 用逻辑表达式判断闰年 lowToUpper...

    JAVA基础知识精华总结 收藏

    方法前,先进行对此超类进行非静态对象的初始化。 (4) 主类非静态成员的初始化。 (5) 调用主类的构造方法。 3、 关于构造方法 (1) 类可以没有构造方法,但如果有多个构造方法,就应该要有默认的构造方法,否则在...

    java程序设计阅读程序写结果题22道

    ③用来修饰初始化语句块,这样的语句块常称为静态初始化语句块。static 在这里表示这个方法为类方法,不属于任何对象实例,而是类所有,描述对象的共有动作,可以用类名直接调用。在调用了tripleValue函数之后,函数...

    Java 基础核心总结 +经典算法大全.rar

    类的初始化 成员初始化 构造器初始化初始化顺序 数组初始化 对象的销毁 对象作用域 this 和 super 访问控制权限继承 多态组合代理 向上转型static final 接口和抽象类接口 抽象类异常 认 识 Exception 什么是 ...

    java 程序设计 期中考试.doc

    8.静态初始化器是在其所属的类加载内存时由系统自动调用执行. ( √ ) 9.在Java中对象可以赋值,只要使用赋值号(等号)即可,相当于生成了一个各属性与赋值对象相同的新对象. ( × ) 10.只能利用Thread类的...

    java 异常总结

    当执行一个类的静态初始化程序的过程中,发生了异常时抛出。静态初始化程序是指直接包含于类中的static语句段。 java.lang.IllegalAccessError 违法访问错误。当一个应用试图访问、修改某个类的域(Field)或者调用...

    疯狂JAVA讲义

    5.9.3 静态初始化块 162 5.10 本章小结 165 本章练习 165 第6章 面向对象(下) 166 6.1 基本数据类型的包装类 167 6.2 处理对象 170 6.2.1 打印对象和toString方法 170 6.2.2 ==和equals比较运算符 172 6.3...

    《java面向对象程序设计-继承和多态》教案.doc

    圆点符号用于访问对象的成员,构造函数在创建对象时初始化对象 包可用package 来申明 ,可用import 来导入包 目标 理解继承及其特点 运用JAVA程序实现继承 理解多态及其特点设计 运用JAVA程序实现多态 掌握访问修饰...

    java初学者必看

    7.4.6 初始化块 7.5 包 7.5.1 包的概念 7.5.2 类的导入 7.5.3 包名与目录 7.5.4 静态导入 7.5.5 Java包介绍 7.6 类设计技巧 7.7 实例:完善MasterCard类 7.7.1 构造方法 7.7.2 setter方法 7.7.3 getter...

    java面试800题

    (3)按顺序分别调用类成员变量和实例成员变量的初始化表达式; (4)调用本身构造函数。" Q0053 "Public class Servlet extends HttpServlet{ int i; doget(){ i++; out.print(i); } } 每次访问时i是否变化?...

    java 面试题 总结

    子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。...

    突破程序员基本功的16课.part2

    5.8.3 静态初始化块启动新线程执行初始化 5.8.4 注意多线程执行环境 5.9 小结 第6课 流程控制的陷阱 6.1 switch语句陷阱 6.1.1 default分支永远会执行吗 6.1.2 break的重要性 6.1.3 switch表达式的类型 6.2...

    JAVA面试题最全集

    修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声明为final的。将变量或方法声明为final,可以保证它们在使用中不被...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    实例化后的每个对象均占有自己的一块内存区域,实例 化时,每个对象分配有一个"引用"(reference)保存到一个实例变量中。"引用" 实际上是一个指针,此指针指向对象所占有的内存区域。 因此,对象名(变量)实际上...

    实验03 Java面向对象编程1.doc

    ○2在Student类建立构造方法初始化各域的值,并统计学生人数count; ○3创建分别获得各域(学号,姓名,性别和年龄)的public方法,以及分别设置各域(学号,姓名,性别和年龄)值的public方法(即get、set方法);...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    10.3.7 使用super调用父类中的方法和属性 278 10.4 多态(Polymorphism)以及其他 279 10.4.1 多态——运行方知结果 280 10.4.2 重载也不简单 280 10.4.3 使用多态构建车队 283 10.5 在多态的环境中拨开迷雾 ...

Global site tag (gtag.js) - Google Analytics