0. 下面程序的运行结果是什么()
class HelloA {
public HelloA() {
System.out.println("HelloA");
}
{ System.out.println("I'm A class"); }
static { System.out.println("static A"); }
}
public class HelloB extends HelloA {
public HelloB() {
System.out.println("HelloB");
}
{ System.out.println("I'm B class"); }
static { System.out.println("static B"); }
public static void main(String[] args) {
new HelloB();
}
}
答案:
static Astatic BI'm A classHelloAI'm B classHelloB
解析:说实话我觉得这题很好,考查静态语句块、构造语句块(就是只有大括号的那块)以及构造函数的执行顺序。
对象的初始化顺序:(1)类加载之后,按从上到下(从父类到子类)执行被static修饰的语句;(2)当static语句执行完之后,再执行main方法;(3)如果有语句new了自身的对象,将从上到下执行构造代码块、构造器(两者可以说绑定在一起)。
这道题解决了我从java到现在困扰的最大问题。到底什么时候输出哪个。
因为还没有看线程。甚至上课老师没怎么说这方面。。。也可能是我没认真听吧。。。而且考试读的程序也没有涉及到这些方面。知道现在才有了个具体的了解。感觉后面的线程处理的话很重要。可能是我将来学Android的第一个敲门砖。必须学好!!!
而且面试题基础方面异常比较多。这俩都是让人头疼的知识点啊。。脑袋大了。。。