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繼承關係構造函數