11、"=="和equals方法究竟有什麼區別?
(1)==可用於基本類型和引用類型:當用於基本類型時候,是比較值是否相同;當用於引用類型的時候,是比較對象是否相同。
(2)對於String a = “a”; Integer b = 1;這種類型的特有對象創建方式,==的時候值是相同的。
(3)基本類型沒有equals方法,equals只比較值(對象中的內容)是否相同(相同返回true)。
(4)一個類如果沒有定義equals方法,它將默認繼承Object中的equals方法,返回值與==方法相同
12、靜態變量和實例變量的區別?
(1)別名不同:成員變量也稱爲實例變量,靜態變量也稱爲類變量(用static修飾)。
(2)生存週期不同:成員變量隨着對象創建而存在,隨着對象被回收而消失;靜態變量隨着類的加載而存在,隨着類的消失而消失。
(3)調用方式不同:成員變量只能被對象所調用;靜態變量可以被對象調用,也可以被類名調用。
(4)數據儲存位置不同:成員變量數據存儲在堆內存的對象中,所以也叫做對象的特有數據;靜態變量數據存儲在方法區(共享數據區)的靜態區中,所以也叫對象的共享數據。
13、是否可以從一個static方法內部發出對非static方法的調用?
不可以。因爲非static方法是要與對象關聯在一起的,必須創建一個對象後,纔可以在該對象上進行方法調用,而static方法調用時不需要創建對象,可以直接調用。也就是說,當一個static方法被調用時,可能還沒有創建任何實例對象,如果從一個static方法中發出對非static方法的調用,那個非static方法是關聯到哪個對象上的呢?這個邏輯無法成立,所以,一個static方法內部發出對非static方法的調用。
14、Integer與int的區別
(1) Java 提供兩種不同的類型:引用類型和原始類型(或內置類型)。int是java的原始數據類型,Integer是java爲int提供的封裝類。
(2)int的默認值爲0,而Integer的默認值爲null
int是java提供的8種原始數據類型之一。Java爲每個原始類型提供了封裝類,Integer是java爲int提供的封裝類。int的默認值爲0,而Integer的默認值爲null,即Integer可以區分出未賦值和值爲0的區別,int則無法表達出未賦值的情況,例如,要想表達出沒有參加考試和考試成績爲0的區別,則只能使用Integer。在JSP開發中,Integer的默認爲null,所以用el表達式在文本框中顯示時,值爲空白字符串,而int默認的默認值爲0,所以用el表達式在文本框中顯示時,結果爲0,所以,int不適合作爲web層的表單數據的類型。
在Hibernate中,如果將OID定義爲Integer類型,那麼Hibernate就可以根據其值是否爲null而判斷一個對象是否是臨時的,如果將OID定義爲了int類型,還需要在hbm映射文件中設置其unsaved-value屬性爲0。
另外,Integer提供了多個與整數相關的操作方法,例如,將一個字符串轉換成整數,Integer中還定義了表示整數的最大值和最小值的常量。
15、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
Math類中提供了三個與取整有關的方法:ceil、floor、round,這些方法的作用與它們的英文名稱的含義相對應,例如,ceil的英文意義是天花板,該方法就表示向上取整,所以,Math.ceil(11.3)的結果爲12,Math.ceil(-11.3)的結果是-11;floor的英文意義是地板,該方法就表示向下取整,所以,Math.floor(11.6)的結果爲11,Math.floor(-11.6)的結果是-12;最難掌握的是round方法,它表示“四捨五入”,算法爲Math.floor(x+0.5),即將原來的數字加上0.5後再向下取整,所以,Math.round(11.5)的結果爲12,Math.round(-11.5)的結果爲-11。
16、下面的代碼有什麼不妥之處?
1. if(username.equals(“zxx”){}
username可能爲NULL,會報空指針錯誤;改爲"zxx".equals(username)
2. int x = 1;
return x==1?true:false; 這個改成return x==1;就可以!
17、請說出作用域public,private,protected,以及不寫時的區別
作用域 |
當前類 |
同一包(package) |
子孫類 |
其他包(package) |
public |
√ |
√ |
√ |
√ |
protected |
√ |
√ |
√ |
× |
default |
√ |
√ |
× |
× |
private |
√ |
× |
× |
× |
public:不同包、同一包、類內都可用
protected: 不同包的子類、同一包、類內都可用
不寫時(default):同一包內、類內
private:類內
18、Overload和Override的區別。Overloaded的方法是否可以改變返回值的類型?
兩同一不同:同一類中,方法名相同,參數列表不同(參數類型,參數個數,參數的順序)
(一同兩小一大):方法名、參數列表、返回值類型相同
當參數列表完全一樣,Overloaded的方法不能改變返回值的類型
當參數列表不一樣,Overloaded的方法可以改變返回值的類型
注:方法覆寫時應遵循的原則(一同兩小一大):
(一同):方法簽名必須相同;
(兩小):子類方法的返回值類型比父類方法的返回值類型更小或相等
子類方法聲明拋出的異常應比父類方法申明拋出的異常更小或相等;
(一大):子類方法的訪問權限應比父類方法更大或相等;
19、構造器Constructor是否可被override?
構造器Constructor不能被繼承,因此不能重寫Override,但可以被重載Overload。
首先搞清楚繼承和重載兩個概念:
Java繼承是使用已存在的類的定義作爲基礎建立新類的技術,新類的定義可以增加新的數據或新的功能,也可以用父類的功能,但不能選擇性地繼承父類。
方法重載是讓類以統一的方式處理不同類型數據的一種手段。多個同名函數同時存在,具有不同的參數個數/類型。重載Overloading是一個類中多態性的一種表現。Java的方法重載,就是在類中可以創建多個方法,它們具有相同的名字,但具有不同的參數和不同的定義。調用方法時通過傳遞給它們的不同參數個數和參數類型來決定具體使用哪個方法, 這就是多態性。
繼承的對象是類,重載的對象是方法。所以,java是可以重載構造器方法的。
20、接口是否可繼承接口?抽象類是否可實現(implements)接口?抽象類是否可繼承具體類(concrete class)?抽象類中是否可以有靜態的main方法?
接口可以繼承接口。抽象類可以實現(implements)接口,抽象類可以繼承具體類。抽象類中可以有靜態的main方法。
備註:只要明白了接口和抽象類的本質和作用,這些問題都很好回答,你想想,如果你是java語言的設計者,你是否會提供這樣的支持,如果不提供的話,有什麼理由嗎?如果你沒有道理不提供,那答案就是肯定的了。
只有記住抽象類與普通類的唯一區別:就是不能創建實例對象和允許有abstract方法。