java面试扫盲:对象初始化顺序(真的未必能答对)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java面试扫盲:对象初始化顺序(真的未必能答对)相关的知识,希望对你有一定的参考价值。

记录下面试里面遇到的一些java盲区,一方面扫描自己的知识盲区,一方面也可以给后面面试的朋友一些警示,以免面试的时候出现不知道的尴尬情况。

提出问题:父类静态属性,父类属性,父类构造方法,子类静态属性, 子类属性,子类构造方法的初始化顺序?

  1. 提出猜想:父类静态属性=> 父类属性=> 父类构造方法= > 子类静态属性=> 子类属性=> 子类构造方法?
  2. 方法论:实践是检验真理的唯一标准。

初步设计类的结构uml。


 
技术分享
 

直接上源代码

/**
 * 轮子类
 */
public class Wheel {
    public Wheel(String name){
        System.out.println(name);
    }
}
//汽车
public class Car {

    static Wheel backWheel = new Wheel("static: Car => backWheel");
    Wheel forwordWheel = new Wheel("Car => forwordWheel");

    Car(){
        System.out.println("Car");
    }
}
//奔驰汽车
public class BenzCar extends Car{

    static Wheel backWheel = new Wheel("static: BenzCar = > backWheel");
    Wheel forwordWheel = new Wheel("forwordWheel = >");

    BenzCar(){
        System.out.println("BenzCar");
    }

}
//测试类
public class Main {

    public static void main(String[] args) {
        System.out.println("====================>");
        BenzCar benzCar = new BenzCar();
        System.out.println("====================>");
    }
}

输出结果:有点出乎意料。

====================>
static: Car => backWheel
static: BenzCar = > backWheel
Car => forwordWheel
Car
forwordWheel = >
BenzCar
====================>
java学习群669823128

结论:猜想错误,父类静态属性=> 子类静态属性 => 父类属性 => 父类构造方法 => 子类属性 => 子类构造方法。 而且有一个细节,static 变量初始化并非一开始就初始化的。而是实例化的时候。static属性才开始初始化的。










以上是关于java面试扫盲:对象初始化顺序(真的未必能答对)的主要内容,如果未能解决你的问题,请参考以下文章

这10道棘手的Java面试题,你能答对几个?

程序员面试:全部答错拿offer VS 全都答对没offer

阿里java面试题,你能答对多少?

Java 面试题目最全集合1000+ 大放送,能答对70%就去BATJTMD试试~

10道棘手的Java面试题,看看你能答对几个?

NodeJS有难度的面试题,你能答对几个?