1.下列程序的运行结果是?java
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 A static B I'm A class HelloA I'm B class HelloB
解析:考查静态语句块、构造语句块(就是只有大括号的那块)以及构造函数的执行顺序。函数
对象的初始化顺序:(1)类加载以后,按从上到下(从父类到子类)执行被static修饰的语句;(2)当static语句执行完以后,再执行main方法;(3)若是有语句new了自身的对象,将从上到下执行构造代码块、构造器(二者能够说绑定在一块儿)。spa
2.下列程序的运行结果是?code
public class Example { String str = new String("good"); char[] ch = { 'a', 'b', 'c' }; public static void main(String args[]) { Example ex = new Example(); ex.change(ex.str, ex.ch); System.out.print(ex.str + " and "); System.out.print(ex.ch); } public void change(String str, char ch[]) { str = "test ok"; ch[0] = 'g'; } }
A、 good and abc B、 good and gbc C、 test ok and abc D、 test ok and gbc
答案:B对象
解析:你们可能觉得Java中String和数组都是对象因此确定是对象引用,而后就会选D,其实这是个很大的误区:由于在java里没有引用传递,只有值传递,这个值指的是实参的地址的拷贝,获得这个拷贝地址后,你能够经过它修改这个地址的内容(引用不变),由于此时这个内容的地址和原地址是同一地址,继承
可是你不能改变这个地址自己使其从新引用其它的对象,也就是值传递。class
3.java集合继承关系test
4.java IO继承关系构造函数