?? java32.txt
字號:
啟動一個線程是調(diào)用start()方法,使線程所代表的虛擬處理機處于可運行狀態(tài),這意味著它可以由JVM調(diào)度并執(zhí)行。這并不意味著線程就會立即運行。run()方法可以產(chǎn)生必須退出的標志來停止一個線程。
第二十四,構造器Constructor是否可被override?
構造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading。
第二十五,是否可以繼承String類?
String類是final類故不可以繼承。
第二十六,當一個線程進入一個對象的一個synchronized方法后,其它線程是否可進入此對象的其它方法?
不能,一個對象的一個synchronized方法只能由一個線程訪問。
第二十七,try {}里有一個return語句,那么緊跟在這個try后的finally {}里的code會不會被執(zhí)行,什么時候被執(zhí)行,在return前還是后?
會執(zhí)行,在return前執(zhí)行。
第二十八,編程題: 用最有效率的方法算出2乘以8等於幾?
有C背景的程序員特別喜歡問這種問題。
2 << 3
第二十九,兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對?
不對,有相同的hash code。
第三十,當一個對象被當作參數(shù)傳遞到一個方法后,此方法可改變這個對象的屬性,并可返回變化后的結果,那么這里到底是值傳遞還是引用傳遞?
是值傳遞。Java 編程語言只由值傳遞參數(shù)。當一個對象實例作為一個參數(shù)被傳遞到方法中時,參數(shù)的值就是對該對象的引用。對象的內(nèi)容可以在被調(diào)用的方法中改變,但對象的引用是永遠不會改變的。
第三十一,swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
switch(expr1)中,expr1是一個整數(shù)表達式。因此傳遞給 switch 和 case 語句的參數(shù)應該是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。
第三十二,編程題: 寫一個Singleton出來。
Singleton模式主要作用是保證在Java應用程序中,一個類Class只有一個實例存在。
一般Singleton模式通常有幾種種形式:
第一種形式: 定義一個類,它的構造函數(shù)為private的,它有一個static的private的該類變量,在類初始化時實例話,通過一個public的getInstance方法獲取對它的引用,繼而調(diào)用其中的方法。
public class Singleton {
private Singleton(){}
//在自己內(nèi)部定義自己一個實例,是不是很奇怪?
//注意這是private 只供內(nèi)部調(diào)用
private static Singleton instance = new Singleton();
//這里提供了一個供外部訪問本class的靜態(tài)方法,可以直接訪問
public static Singleton getInstance() {
return instance;
}
}
第二種形式:
public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//這個方法比上面有所改進,不用每次都進行生成對象,只是第一次
//使用時生成實例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance; }
}
其他形式:
定義一個類,它的構造函數(shù)為private的,所有方法為static的。
一般認為第一種形式要更加安全些
第三十三 Hashtable和HashMap
Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現(xiàn)
HashMap允許將null作為一個entry的key或者value,而Hashtable不允許
還有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因為contains方法容易讓人引起誤解。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在
多個線程訪問Hashtable時,不需要自己為它的方法實現(xiàn)同步,而HashMap
就必須為之提供外同步。
Hashtable和HashMap采用的hash/rehash算法都大概一樣,所以性能不會有很大的差異。
1:abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized?
2:當一個對象被當作參數(shù)傳遞到一個方法后,此方法可改變這個對象的屬性,并可返回變化后的
結果,那么這里到底是值傳遞還是引用傳遞?
3:Set里的元素是不能重復的,那么用什么方法來區(qū)分重復與否呢? 是用==還是equals()? 它們
有何區(qū)別?
4:構造器Constructor是否可被override?
5:當一個線程進入一個對象的一個synchronized方法后,其它線程是否可進入此對象的其它方法?
6:兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對
關于參數(shù)傳遞:
其實JAVA里對參數(shù)的傳遞在國際上都是一直有爭論的。包括《Think in java》里都提到了,Bruce Eckel 也沒給出定論。我覺得這很大程度上是由于規(guī)范不嚴格造成的。因為大家都知道參數(shù)傳遞的本質(zhì)是什么,但描述方式不一樣,以致造成答案不一致。
現(xiàn)給一些參考:
第一,JAVA 里的參數(shù)傳遞只有值傳遞,沒有所謂的引用傳遞。(說白了,是因為大家的說法
不統(tǒng)一)
第二,引用一個強人的觀點 jamesfancy()邊城狂人(James Fancy) :
"1. 首先明白參數(shù)的傳遞實質(zhì)是壓棧和出棧的過程。即在調(diào)用一個方法(或說子程序)之前,先將需要傳入的參數(shù)壓棧,然后執(zhí)行代碼的指針跳轉到方法的起始位置,進行出棧操作,原來壓入棧中的參數(shù)取出置入方法中的局部變量(這里即參數(shù)變量)。
2. 對于基本類型,傳遞的參數(shù)都是對原變量值的拷貝。每一個基本類型的數(shù)據(jù)都是以字節(jié)形式保存在內(nèi)存中的(如整型是4個字節(jié),長整型是8個字節(jié)等),壓棧時會將內(nèi)存中的變量值按字節(jié)存入棧中,而原變量的值(即保存在原位置的內(nèi)容)并不改變??內(nèi)存中的數(shù)據(jù)是保存在堆中的,參數(shù)是保存在棧中的,總不可能把內(nèi)存塊搬過來是吧......所以一定是拷貝的!
3. 先搞明白引用的實質(zhì)。當一個對象創(chuàng)建后,它的內(nèi)容(N個字節(jié))被保存在內(nèi)存中。它的位置,即一個地址址,被返回,保存在一個引用變量中??所以實際上一個引用變量保存的只是某個類的地址,而引用的類型,并不會改變引用變量的大小,它只是說明一個對象的數(shù)據(jù)大小。這樣,就可以從引用變量找到對象的起始地址,再通過類型,獲取對象數(shù)據(jù)。而通過引用調(diào)用的方法,屬性這些東西,就是通過在這塊內(nèi)存地址中的位置偏移來尋址的。(當然,實際的操作會比我說的復雜得多,因為還涉及向上向下傳型等問題)
4. 引用參數(shù)的傳遞,實際上就是傳遞的引用變量的值,這和傳遞基本類型的值原理是一樣的。但由于引用變量其值的特殊性(只是一個地址,這個地址上保存的才是對象的實際數(shù)據(jù)),所以,引用變量的值傳入?yún)?shù)變量后,通過參數(shù)變量對對象的修改(在實際地址上的操作)自然就會影響到同一個對象。??這里,外面的引用變量和參數(shù)變量,本身是不同的,但是它們的值相同,都是對象的地址。"
不是打基礎,打基礎吧!Top
01069723285
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -