首页 > 试题广场 >

关于下面的程序,说法正确的是:

[单选题]
关于下面的程序,说法正确的是:

1. class StaticStuff
2 {
3.     static int x = 10;
4.
5.     static { x += 5; }
6.
7. public static void main(String args[])
8. {
9.     System.out.println(“x = ” + StaticStuff .x);
10. }
11.    static
12.     {x /= 3; }
13.}

  • 第5行和12行不能编译,因为该方法没有方法名和返回值。
  • 第12 行不能编译,因为只能有一个static初始化块。
  • 代码编译并执行,输出结果x = 10.
  • 代码编译并执行,输出结果 x = 5.
  • 代码编译并执行,输出结果 x = 15.
推荐
D。考察的是代码执行的顺序。
第5、12行属于static修饰的静态代码块。所以A、B说法错误。
静态代码块以及静态变量自上而下的顺序依次随着类加载而执行,所以依据题目的变量初始化:
  • x初始为10
  • x+5赋值x,结果为15
  • x/3赋值给x,结果为5

编辑于 2019-10-30 14:20:46 回复(2)

D

执行顺序为:

  • 父类静态代码块、静态变量 ps:按声明顺序执行

  • 子类静态代码块、静态变量 ps:按声明顺序执行

  • 父类局部代码块、成员变量 ps:按声明顺序执行

  • 父类构造函数

  • 子类局部代码块、成员变量 ps:按声明顺序执行

  • 子类构造函数

编辑于 2019-11-08 23:05:54 回复(13)
先执行所以的静态代码块
在执行主方法
得出结果x=5
发表于 2019-10-29 21:04:43 回复(3)
发表于 2020-10-13 18:08:54 回复(0)
 D
正常类的加载顺序:静态变量/静态代码块 -> main方法 -> 非静态变量/代码块 -> 构造方法
静态代码块与静态变量的执行顺序同代码定义的顺序;非静态变量与代码块的执行顺序同代码执行顺序
x的初始值为10,按说明顺序,先+5后/3=5
发表于 2020-02-02 23:24:26 回复(1)
代码执行顺序:
1. 父类静态代码块、静态变量
2. 子类静态代码块、静态变量
3. 父类局部代码块、成员变量
4. 父类构造函数
5. 子类局部代码块、成员变量
6. 子类构造函数

发表于 2022-02-19 20:04:56 回复(0)
setp1:加载StaticStuff类;
step2:按照编写顺序加载静态变量, 执行 static int x = 10;
step3:执行静态代码块, static { x += 5; },x=15
step4:执行静态代码块,static{x /= 3; },x=15/3=5
step5:最后调用main(),打印输出x = 5;
发表于 2021-10-26 14:27:36 回复(0)
D
首先给全局变量赋初值 x = 10,运行static代码块,根据从上到下的顺序x+=5  -->此时x=15;
然后x/=3 -->x = 5;
所以选D
发表于 2019-10-29 17:38:35 回复(0)
类加载完了以后,先执行静态代码块
发表于 2022-03-06 20:37:47 回复(0)
先执行类的属性静态代码块,在执行方法中的静态代码块再执行输出语句
发表于 2021-12-25 08:13:05 回复(0)
静态代码块可以有多个,静态变量的声明在编译时已明确
发表于 2022-09-11 22:54:33 回复(0)
静态代码块先执行于构造函数,但是静态代码块和静态变量之间的执行顺序决定于它们在代码中出现的顺序
  • x初始为10
  • x+5赋值x,结果为15
  • x/3赋值给x,结果为5

发表于 2022-09-06 22:40:25 回复(0)
先执行所有的静态方法
发表于 2021-03-13 09:45:13 回复(0)
冒昧的问一句,真的会有人在代码中写静态代码块嘛

发表于 2020-12-01 16:39:54 回复(1)
先执行静态。这题我是想多了。
发表于 2020-11-11 07:52:16 回复(0)
类加载的生命周期
  • 静态变量
  • 静态代码块 (static { xxx })
  • 成员变量
  • 实例代码块({ xxx })
  • 构造方法
  • 发表于 2020-10-19 18:20:16 回复(0)
    执行顺序为:
    • 父类静态成员变量(一次)
    • 父类静态代码块(一次)
    • 子类静态成员变量(一次)
    • 子类静态代码块(一次)
    • 父类成员变量(多次)
    • 父类代码块(多次)
    • 父类构造函数(多次)
    • 子类成员变量(多次)
    • 子类代码块(多次)
    • 子类构造函数(多次)
      多个成员变量和代码块,按照声明顺序从上到下执行
    编辑于 2020-08-11 09:26:23 回复(0)
    最后结果为5.都是static修饰的,剩下的就是main方法和最后一个代码块谁先运行的问题,变量无论在哪个地方都比方法先加载,所以从上到下 10+5=15/3=5
    发表于 2019-10-30 17:02:47 回复(0)
    D:
    先由上到下依次执行静态代码块;
    • x=10;
    • x+=5;  ==> x=15;
    • x/=3; ==> x=5;
    即结果x=5;
    同理若两个静态代码块交换顺序,则:
    • x=10; 
    • x/=3;  ==> x=3;
    • x+=5;  ==> x=8
    发表于 2019-10-30 12:02:33 回复(0)
    D,从main方法开始执行,然后调用类的x
    发表于 2019-10-29 19:02:58 回复(0)

    静态第一优先级,父类第二优先级,代码块和属性第三优先级,构造方法第四优先级

    先执行静态的操作,根据父类和子类的操作依次执行

    1.父类的静态代码块和属性

    2.子类的静态代码块和属性

    再根据父类进行操作,根据第三第四优先级,依次执行

    3.执行父类的代码块和属性

    4.执行父类的构造方法

    最后执行

    5.子类的代码块和属性

    6.子类的构造方法

    编辑于 2024-04-16 21:56:40 回复(0)