1. 程式人生 > >Java易混淆知識點

Java易混淆知識點

1.    陣列有沒有length()這個方法? String有沒有length()這個方法?


2.     String s = new String("xyz");建立了幾個String Object?


3.     abstract class和interface有什麼區別?


4.     ==和equals的區別?


5.    Set裡的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==還是equals()? 它們有何區別?


6.  介面與抽象類的區別


7. 介面是否可繼承介面? 抽象類是否可實現(implements)介面? 抽象類是否可繼承實體類(concrete class)?

8.   

 java中有幾種型別的流?JDK為每種型別的流提供了一些抽象類以供繼承,請說出他們分別是哪些類?




9. 基本資料型別間的轉換



10.  String是最基本的資料型別嗎?


11.  int 和 Integer 有什麼區別





12.  String 和StringBuffer的區別


13.  JSP的內建物件和JSP的標記



19.  靜態方法與靜態變數的使用



20.  Static Nested Class 和 Inner Class的不同。 



21.  Collection 和 Collections的區別。 



22.  JSP中動態INCLUDE與靜態INCLUDE的區別?

23.  靜態變數和例項變數的區別?



24.  finally子句的執行時間




25.  談談final, finally, finalize的區別。 



26.  try {}裡有一個return語句,那麼緊跟在這個try後的finally {}裡的code會不會被執行,什麼時候被執行,在return前還是後?    



27.  JAVA語言如何進行異常處理,關鍵字:throws,throw,try,catch,finally分別代表什麼意義?在try塊中可以丟擲異常嗎?

1.    陣列有沒有length()這個方法? String有沒有length()這個方法?

        答:陣列沒有length()這個方法,有length的屬性。 

        String有length()這個方法。



2.     String s = new String("xyz");建立了幾個String Object?

        答:兩個物件,一個是“xyx”,一個是指向“xyx”的引用物件s。

3.     abstract class和interface有什麼區別?

        答:宣告方法的存在而不去實現它的類被叫做抽象類(abstract class),它用於要建立一個體現某些基本行為的類,併為該類宣告方法,但不能在該類中實現該類的情況。不能建立abstract 類的例項。然而可以建立一個變數,其型別是一個抽象類,並讓它指向具體子類的一個例項。不能有抽象建構函式或抽象靜態方法。Abstract 類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽象類。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法。

        介面(interface)是抽象類的變體。在介面中,所有方法都是抽象的。多繼承性可通過實現這樣的介面而獲得。介面中的所有方法都是抽象的,沒有一個有程式體。介面只可以定義static final成員變數。介面的實現與子類相似,除了該實現類不能從介面定義中繼承行為。當類實現特殊介面時,它定義(即將程式體給予)所有這種介面的方法。然後,它可以在實現了該介面的類的任何物件上呼叫介面的方法。由於有抽象類,它允許使用介面名作為引用變數的型別。通常的動態聯編將生效。引用可以轉換到介面型別或從介面型別轉換,instanceof 運算子可以用來決定某物件的類是否實現了介面.

4.     ==和equals的區別?

        答:==用於判斷兩個引用變數是否指向同一個物件例項.

        equals用於判斷兩個值是否相等.

5.    Set裡的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==還是equals()? 它們有何區別?

        答:Set裡的元素是不能重複的,那麼用iterator()方法來區分重複與否。equals()是判讀兩個Set是否相等。

        equals()和==方法決定引用值是否指向同一物件equals()在類中被覆蓋,為的是當兩個分離的物件的內容和型別相配的話,返回真值。

6.  介面與抽象類的區別

        答: 抽象類中的非抽象方法可以不被子類覆蓋,但是介面中的所有方法必須被子類實現

         抽象類和子類之間是一種父子關係,如A是B;但介面和實現類之間沒有明顯的父子關係,而是一種功能性的關係。如A具有B的功能。

7. 介面是否可繼承介面? 抽象類是否可實現(implements)介面? 抽象類是否可繼承實體類(concrete class)?

        答:介面可以繼承介面。抽象類可以實現(implements)介面,抽象類是否可繼承實體類,但前提是實體類必須有明確的建構函式。

8. java中有幾種型別的流?JDK為每種型別的流提供了一些抽象類以供繼承,請說出他們分別是哪些類?

        答: 位元組流,字元流。位元組流繼承於InputStream \ OutputStream,字元流繼承於InputStreamReader \ OutputStreamWriter。在java.io包中還有許多其他的流,主要是為了提高效能和使用方便。

9. 基本資料型別間的轉換

        答: byte->short->int->long->float->double

         char->int

         詳細見<<java核心技術第一卷V6>>

10.  String是最基本的資料型別嗎?

        答:基本資料型別包括byte、int、char、long、float、double、boolean和short。

        java.lang.String類是final型別的,因此不可以繼承這個類、不能修改這個類。為了提高效率節省空間,我們應該用StringBuffer類。

11.  int 和 Integer 有什麼區別

        答:Java 提供兩種不同的型別:引用型別和原始型別(或內建型別)。int是java的原始資料型別,Integer是java為int提供的封裝類。Java為每個原始型別提供了封裝類。

原始型別封裝類

booleanBoolean

charCharacter

byteByte

shortShort

intInteger

longLong

floatFloat

doubleDouble

引用型別和原始型別的行為完全不同,並且它們具有不同的語義。引用型別和原始型別具有不同的特徵和用法,它們包括:大小和速度問題,這種型別以哪種型別的資料結構儲存,當引用型別和原始型別用作某個類的例項資料時所指定的預設值。物件引用例項變數的預設值為 null,而原始型別例項變數的預設值與它們的型別有關。

12.  String 和StringBuffer的區別

        答:JAVA平臺提供了兩個類:String和StringBuffer,它們可以儲存和操作字串,即包含多個字元的字元資料。這個String類提供了數值不可改變的字串。而這個StringBuffer類提供的字串進行修改。當你知道字元資料要改變的時候你就可以使用StringBuffer。典型地,你可以使用StringBuffers來動態構造字元資料。

13.  JSP的內建物件和JSP的標記

        答:9種內建物件

        request,response,pageContext,session,application,out,config,page,exception

19.  靜態方法與靜態變數的使用

        靜態方法可以通過類名直接訪問,靜態變數在同一類的不同的例項之間共享。

20.  Static Nested Class 和 Inner Class的不同。 

        Static Nested Class是被宣告為靜態(static)的內部類,它可以不依賴於外部類例項被例項化。而通常的內部類需要在外部類例項化後才能例項化。

21.  Collection 和 Collections的區別。 

        Collection是集合類的上級介面,繼承與他的介面主要有Set 和List.。Collections是針對集合類的一個幫助類,他提供一系列靜態方法實現對各種集合的搜尋、排序、執行緒安全化等操作。

22.  JSP中動態INCLUDE與靜態INCLUDE的區別?

        動態INCLUDE用jsp:include動作實現 <jsp:include page="included.jsp" flush="true" />它總是會檢查所含檔案中的變化,適合用於包含動態頁面,並且可以帶引數。

        靜態INCLUDE用include偽碼實現,定不會檢查所含檔案的變化,適用於包含靜態頁面<%@ include file="included.htm" %> 

23.  靜態變數和例項變數的區別?

        static i = 10; //常量

        class A a;  a.i =10;//可變

24.  finally子句的執行時間

        都會執行,除非在前面出現system.exit(0)

25.  談談final, finally, finalize的區別。 

        final 用於宣告屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。

        finally是異常處理語句結構的一部分,表示總是執行。

        finalize是Object類的一個方法,在垃圾收集器執行的時候會呼叫被回收物件的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉檔案等。

26.  try {}裡有一個return語句,那麼緊跟在這個try後的finally {}裡的code會不會被執行,什麼時候被執行,在return前還是後?    

        會執行,在return前執行。

27.  JAVA語言如何進行異常處理,關鍵字:throws,throw,try,catch,finally分別代表什麼意義?在try塊中可以丟擲異常嗎?

        Java通過面向物件的方法進行異常處理,把各種不同的異常進行分類,並提供了良好的介面。在Java中,每個異常都是一個物件,它是Throwable類或其它子類的例項。當一個方法出現異常後便丟擲一個異常物件,該物件中包含有異常資訊,呼叫這個物件的方法可以捕獲到這個異常並進行處理。Java的異常處理是通過5個關鍵詞來實現的:try、catch、throw、throws和finally。一般情況下是用try來執行一段程式,如果出現異常,系統會丟擲(throws)一個異常,這時候你可以通過它的型別來捕捉(catch)它,或最後(finally)由預設處理器來處理。

        用try來指定一塊預防所有"異常"的程式。緊跟在try程式後面,應包含一個catch子句來指定你想要捕捉的"異常"的型別。

        throw語句用來明確地丟擲一個"異常"。

        throws用來標明一個成員函式可能丟擲的各種"異常"。

        Finally為確保一段程式碼不管發生什麼"異常"都被執行一段程式碼。

        可以在一個成員函式呼叫的外面寫一個try語句,在這個成員函式內部寫另一個try語句保護其他程式碼。每當遇到一個try語句,"異常"的框架就放到堆疊上面,直到所有的try語句都完成。如果下一級的try語句沒有對某種"異常"進行處理,堆疊就會展開,直到遇到有處理這種"異常"的try語句。