首页 > 试题广场 >

指出下面程序的运行结果: class A{ &

[单选题]
指出下面程序的运行结果:
class A{
static{

System.out.print("1");

}

public A(){

System.out.print("2");

}

}

class B extends A{

static{

System.out.print("a");

}

public B(){

System.out.print("b");

}

}

public class Hello{

public static void main(String[] ars){

A ab = new B();

ab = new B();

}

}


  • 1a2b2b
  • 2b1a2b
  • 1abb
  • 2b1a

Java程序的初始化顺序是怎样的?

  • 在Java语言中,当实例化对象时,对象所在类的成员变量首先要进行初始化,只有所有类成员完成初始化之后,才会调用对象所在类的构造函数创建对象;

  • 一般遵循三个原则

    • 静态对象/变量优于非静态对象/变量的初始化,其中静态变量/对象只会初始化一次,非静态变量/对象可能会初始化多次;

    • 父类优先于子类进行初始化;

    • 按照成员变量的定义顺序进行初始化,即使成员变量位于方法内部,他们依然在任何方法调用之前进行初始化,包括构造方法;

初始化顺序总结:

父类静态变量-->父类静态代码块-->子类静态变量-->子类静态代码块-->父类非静态变量-->父类非静态代码块-->父类构造方法-->子类非静态变量-->子类非静态代码块-->子类构造函数



发表于 2020-03-16 00:02:54 回复(1)
我用eclipse运行的结果是A
发表于 2019-09-15 22:03:17 回复(0)

初始化顺序总结:

父类静态变量(父类静态代码块)-->子类静态变量(子类静态代码块)-->父类成员变量(父类成员代码块)-->父类构造方法-->子类成员变量(子类成员代码块)-->子类构造函数


发表于 2021-03-03 14:50:26 回复(0)
A 正确答案是A
发表于 2019-09-14 14:51:56 回复(0)
两个结果什么鬼?
发表于 2019-08-27 10:45:19 回复(1)