首页 > 试题广场 >

下面的代码运行的结果是?

[单选题]
下面的代码运行的结果是:
class B extends Object
{
    static
    {
        System.out.println("Load B");
    }
    public B()
    {
        System.out.println("Create B");
    }
}
class A extends B
{
    static
    {
        System.out.println("Load A");
    }
    public A()
    {
        System.out.println("Create A");
    }
}

public class Testclass
{
    public static void main(String[] args)
    {
        new A();
    }
}

  • Load B ->Create B->Load A -> Create A
  • Load B -> Load A  ->Create B  ->Create A
  • Load B -> Create B-> Create A -> Load A
  • Create B ->Create A ->Load B ->Load A
推荐
B
初始化块在构造器执行之前执行,类初始化阶段先执行最顶层父类的静态初始化块,依次向下执行,最后执行当前类的静态初始化块;创建对象时,先调用顶层父类的构造方法,依次向下执行,最后调用本类的构造方法。
编辑于 2015-02-05 15:24:41 回复(8)
执行顺序:
父类静态代码块-》子类静态代码块-》父类构造代码块-》父类构造函数-》子类构造代码块-》子类构造函数
发表于 2016-05-21 14:10:52 回复(4)
初始化过程: 
1. 初始化父类中的静态成员变量和静态代码块 ; 
2. 初始化子类中的静态成员变量和静态代码块 ; 
3.初始化父类的普通成员变量和代码块,再执行父类的构造方法;
4.初始化子类的普通成员变量和代码块,再执行子类的构造方法; 
发表于 2016-10-15 17:26:43 回复(6)
答案:B
java类中的静态代码块只在类加载到内存时执行一次
B是A的父类,所以先加载B,再加载A
然后在new A()过程中首先构造父类,再构造子类
发表于 2015-01-15 17:00:12 回复(0)
1.父类静态成员和静态初始化快,按在代码中出现的顺序依次执行。
2.子类静态成员和静态初始化块,按在代码中出现的顺序依次执行。
3. 父类的实例成员和实例初始化块,按在代码中出现的顺序依次执行。
4.执行父类的构造方法。
5.子类实例成员和实例初始化块,按在代码中出现的顺序依次执行。
6.执行子类的构造方法。
发表于 2017-09-02 09:34:41 回复(2)
B.
new了一个A对象,那么就要执行A类的构造方法来初始化对象,但是A类继承了B类,所以要先调用B类的无参构造;在A和B类中都有静态代码块,静态代码块是在加载类的时候进行执行,并且只执行一次,也就是说静态代码块在构造方法前进行执行,所以执行顺序是先执行B类的静态代码块,再执行A类的静态代码块,再执行B类的无参构造,最后执行子类的无参构造。
发表于 2015-08-19 17:03:08 回复(0)
先执行父类的static初始化块直到本类的static初始化块,static初始化块也只能执行一次,然后是普通的初始化块,最后执行构造器从父类到本类
编辑于 2015-04-13 09:14:03 回复(0)
静态优先,父类优先。
发表于 2018-04-22 11:40:42 回复(0)
B,先加载父类,构造就如同建房子,从下面建起,同理清除如同拆房子,从上面开始拆。。。
发表于 2014-12-30 16:11:59 回复(0)
java 程序的初始化一般遵循三个原则
1.静态对象优先于飞静态对象初始化,其中静态对象只初始化一次,而非静态变量可能会初始化多次
2.父类优先于子类进行的初始化
3.按照成员变量的定义顺序进行初始化
发表于 2015-10-22 20:48:07 回复(0)
B:
java类中的静态代码块只在类加载到内存时执行一次
B是A的父类,所以先加载B,再加载A
然后在new A()过程中首先构造父类,再构造子类
发表于 2015-04-16 15:44:26 回复(0)
### JVM类加载机制
- Java 中构造器、初始化块、静态初始化块的执行顺序。
*   静态初始化块 > 初始化块 > 构造器
*   父类 > 子类

综合下来顺序就是:
*   父类静态初始化块(包括静态初始化块,静态属性(成员方法),但不包括静态方法)
*   子类静态初始化块(包括静态初始化块,静态属性(成员方法),但不包括静态方法 )
*   父类初始化块,可以进一步扩展为:父类非静态代码块( 包括非静态初始化块,非静态属性 )
*   父类构造器
*   子类初始化块,可以进一步拓展为:子类非静态代码块 ( 包括非静态初始化块,非静态属性 )
*   子类构造器
编辑于 2019-10-08 13:40:52 回复(0)
选B
创建子类对象执行顺序:
父类静态代码块 --> 子类静态代码块 --> 父类的构造方法(空参) --> 子类构造方法(空参还是有参看是否传值)
发表于 2018-08-13 00:14:04 回复(0)
B
编辑于 2015-01-29 16:59:22 回复(0)
1.父类静态代码块和静态成员变量 2.子类静态代码块和静态成员变量 3.父类普通代码块和普通成员变量 4.父类构造方法 5.子类普通代码块和普通成员变量 6子类构造函数
发表于 2023-03-02 14:13:21 回复(0)
父类静态代码块->子类静态代码块->父类构造代码块->父类构造函数->子类构造代码块->子类构造函数
发表于 2022-11-05 16:55:17 回复(0)
父类静态块->子类静态块->父类构造器->子类构造器
发表于 2022-04-30 16:54:35 回复(0)
A继承B继承Object ,当new A后首先会去找A的父类也就是B类,先打印B的静态代码块,静态代码块的执行顺序由于构造函数,所以就会按照B类静态代码块,A类静态代码块,B类构造函数,A类构造函数
发表于 2022-03-30 12:25:15 回复(0)

代码执行顺序:

静态代码块 -> 非静态代码块 -> 构造函数

发表于 2020-08-13 23:45:45 回复(0)
Java中执行顺序:
父类静态变量->父类静态代码块->子类静态变量->子类静态代码块
->父类非静态变量->父类非静态代码块->父类构造函数
->子类非静态变->子类非静态代码块->子类构造函数

编辑于 2016-08-18 17:19:48 回复(1)
父类静态变量或静态初始化块 → 子类静态变量或静态初始化块 → 父类普通初始化块 → 父类构造器 → 子类普通初始化块 → 子类构造器
编辑于 2024-02-28 16:08:16 回复(0)