一个关于static块的编译面试题
首先先看一下题目
关于以下application的说明,正确的是( )
1. class StaticStuff
2. {
3. static int x=10;
4. static { x+=5;}
5. public static void main(String args[ ])
6. {
7. System.out.println(“x=” + x);
8. }
9. static { x/=3;}
10. }
A、4行与9行不能通过编译,因为缺少方法名和返回类型
B、9行不能通过编译,因为只能有一个静态初始化器
C、编译通过,执行结果为:x=5
D、编译通过,执行结果为:x=3 这个题目答案为C
一开始感觉为什么第九行会执行呢 因为main方法都执行过了 后来经过百度前人解释才明白
总结来说也就一句话
类加载的时候,先加载静态初始化块,再加载静态方法
类只要一加载就会一次先加载静态属性和静态代码块然后再加载静态方法 所以main再里面是最后执行的
还有一个同义解释 那个容易理解看哪个就ok了
自由块(就是里面的static块)是类加载的时候就会先被先后按顺序执行的 然后再加载方法
如果还有偏颇 请大佬留言给小弟解答
