JAVA精髓(基礎篇)

w_qqqqq發表於2018-09-07

Java基礎 


1、Java基本資料型別 

答:基本型別,或者叫做內建型別,是JAVA中不同於類的特殊型別。
Java中的簡單型別從概念上分為四種:實數、整數、字元、布林值。但是有一點需要說明的是,Java裡面只有八種原始型別,其列表如下:
實數:double、float
整數:byte、short、int、long
字元:char
布林值:boolean
Integer VS int
public final class Integer extends Number implements Comparable
Integer類在物件中包裝了一個基本型別int的值。Integer型別的物件包含一個int型別的欄位。
此外,該類提供了多個方法,能在int型別和String型別之間互相轉換,還提供了處理int型別時非常有用的其他一些常量和方法。

2、原始資料型別和封裝類的區別 

答:封裝型別就是java物件導向引入的資料型別,裡面定義了一些常用的方法,是用new分配到堆記憶體上的。引入封裝型別的主要目的是因為類能夠提供必要的方法,用於實現基本資料型別的數值與可列印字串之間的轉換,以及一些其他的實用程式方法。Java為每個原始型別提供了封裝類。
3、String、StringBuffer、StringBuilder區別 


4、執行時異常和非執行時異常區別
 
答:a.執行時異常是不需要捕獲的,程式設計師可以不去處理,當異常出現時,虛擬機器會處理。常見的執行時異常有空指標異常。 
我們常見的5中執行時異常: 
[java] view plain copy
ClassCastException(類轉換異常)   
IndexOutOfBoundsException(陣列越界)   
NullPointerException(空指標)   
ArrayStoreException(資料儲存異常,運算元組時型別不一致)   
還有IO操作的BufferOverflowException異常 ,具體可以參見java的API:http://docs.oracle.com/javase/7/docs/api/ 

b.非執行時異常就必須得捕獲了,否則編譯不過去,java編譯器要求程式設計師必須對這種異常進行catch,Java認為Checked異常都是可以被處理(修復)的異常,所以Java程式必須顯式處理Checked異常。 

常見的非執行異常有io異常和sql異常。 
[java] view plain copy
IOException、FileNotFoundExcetion 和SQLException  

finally是異常處理工作的一部分,表示總是執行。一般finally寫的程式碼語句就是流的關閉。也就是做了一項清理,工作清理工作對於我們來說是必不可少的,因為如果一些消耗資源的操作,比如IO,JDBC。
如果我們用完以後沒有及時正確的關閉,那後果會很嚴重,這意味著記憶體洩露。(有人說過,對於資源的及時正確的清理是程式設計師的基本素質之一) 

5、簡述一下物件導向的特徵,並舉例說明你對物件導向的理解 
6、正規表示式的用法 

http://www.cnblogs.com/xhj123/p/6032683.html

7、Java 語言如何進行異常處理,關鍵字:throws、throw、try、catch、finally分別代表什麼意義?finally程式碼是在return之後還是之前執行? 

throws是獲取異常
throw是丟擲異常
try是將會發生異常的語句括起來,從而進行異常的處理,
catch是如果有異常就會執行他裡面的語句,
而finally不論是否有異常都會進行執行的語句。

finally語句在try和catch語句中的return執行後、返回前執行;
若finally語句中沒有return,則其執行結果不影響try和catch中已確定的返回值;
若finally語句中有return,則其執行後的結果會直接返回。

8、abstract class和interface有什麼區別?介面可以繼承介面嗎?介面可以繼承抽象類嗎,為什麼? 

介面可以繼承介面。抽象類可以實現(implements)介面,抽象類是可以繼承具體類。抽象類中可以有靜態的main方法。
記住抽象類與普通類的唯一區別就是不能建立例項物件和允許有abstract方法
介面不能繼承抽象類,抽象類裡面是可以存在非抽象方法的,但是介面裡面只能存在抽象方法。假設介面繼承抽象類,那麼該介面也會繼承抽象類裡面的非抽象方法,這就與介面的定義矛盾了

9、構造器(constructor)是否可被重寫(override)? 

構造器Constructor不能被繼承,因此不能重寫Override,但可以被過載Overload。

10、是否可以繼承String類? 

答案: 不可以,因為String類有final修飾符,而final修飾的類是不能被繼承的,實現細節不允許改變

11、Java 中的final關鍵字有哪些用法? 

final關鍵字是我們經常使用的關鍵字之一,它的用法有很多,但是並不是每一種用法都值得我們去廣泛使用。它的主要用法有以下四種:

用來修飾資料,包括成員變數和區域性變數,該變數只能被賦值一次且它的值無法被改變。對於成員變數來講,我們必須在宣告時或者構造方法中對它賦值;
用來修飾方法引數,表示在變數的生存期中它的值不能被改變;
修飾方法,表示該方法無法被重寫;
修飾類,表示該類無法被繼承。
上面的四種方法中,第三種和第四種方法需要謹慎使用,因為在大多數情況下,如果是僅僅為了一點設計上的考慮,我們並不需要使用final來修飾方法和類

12、try{}裡有一個return語句,那麼緊跟在這個try後的finally{}裡的程式碼會不會被執行,什麼時候被執行,在return前還是後? 
題7
13、闡述final、finally、finalize的區別。 

final用於宣告屬性,方法和類,分別表示屬性不可交變,方法不可覆蓋,類不可繼承。
finally是異常處理語句結構的一部分,表示總是執行。
finalize是Object類的一個方法,在垃圾收集器執行的時候會呼叫被回收物件的此方法,供垃圾收集時的其他資源回收,例如關閉檔案等

14、如何通過反射建立物件? 

根據以上程式碼:.使用反射機制建立物件的步驟如下:
1、先宣告你要建立的物件的類全稱;使用Class類的靜態方法forName(String.className)載入這個類的位元組碼(注意,載入位元組碼不等於例項化物件) ,返回 一個Class物件,這個物件代表的是一個位元組碼檔案。
2、呼叫這個類物件(位元組碼)的方法newInstance()方法(注意:這裡的這個newInstance方法預設呼叫預設的構造方法即呼叫無參的構造方法, 一旦構造方法有引數時,此方法行不通,需要使用構造方法的物件的相關方法來 例項化)例項化類Person,返回的是Object型別
3、強制轉換成Person型別即你所需型別
而獲得Class物件的方法還有:
Class c = Class.forName("java.lang.String");這條語句得到一個 String 類的類物件。還有另一種方法,如下面的語句:Class c = int.class; 或者 Class c = Integer.TYPE;它們可獲得基本型別的類資訊。其中後一種方法中訪問的是基本型別的封裝類 (如 Integer) 中預先定義好的 TYPE 欄位

15、Java 8的新特性 


16、Java陣列和連結串列的兩種結構的操作效率 
陣列靜態分配記憶體,連結串列動態分配記憶體; 
陣列在記憶體中連續,連結串列不連續; 
陣列元素在棧區,連結串列元素在堆區; 
陣列利用下標定位,時間複雜度為O(1),連結串列定位元素時間複雜度O(n); 
陣列插入或刪除元素的時間複雜度O(n),連結串列的時間複雜度O(1)。
17、Java的引用型別有哪幾種 

18、default關鍵字的作用是修飾介面中的方法,使得其有方法體,子類實現該介面,可以不用實現該方法。

19、某些java類為什麼要實現Serializable介面
什麼是Serializable介面?
一個物件序列化的介面,一個類只有實現了Serializable介面,它的物件才能被序列化
什麼是序列化?
將物件的狀態資訊轉換為可以儲存或傳輸的形式的過程,在序列化期間,物件將其當前狀態寫入到臨時儲存區或永續性儲存區,之後,便可以通過從儲存區中讀取或反序列化物件的狀態資訊,來重新建立該物件
什麼情況下需要序列化?
當我們需要把物件的狀態資訊通過網路進行傳輸,或者需要將物件的狀態資訊持久化,以便將來使用時都需要把物件進行序列化
Serializable主要用來支援兩種主要的特性:
1、Java的RMI(remote method invocation),RMI允許像在本機上一樣操作遠端機器上的物件,當傳送訊息給遠端物件時,就需要用到序列化機制來傳送引數和接受返回值
2、Java的JavaBean,Bean的狀態資訊通常是在設計時配置的,Bean的狀態資訊必須被儲存下來,以便當程式執行時能恢復這些狀態資訊,這也需要序Serializable機制

20、不通過建構函式也能建立物件嗎?
答案:yes 
解析:Java建立物件的幾種方式(重要): 
(1) 用new語句建立物件,這是最常見的建立物件的方法。 
(2) 運用反射手段,呼叫java.lang.Class或者java.lang.reflect.Constructor類的newInstance()例項方法。 
(3) 呼叫物件的clone()方法。 
(4) 運用反序列化手段,呼叫java.io.ObjectInputStream物件的 readObject()方法。
(1)和(2)都會明確的顯式的呼叫建構函式 ;(3)是在記憶體上對已有物件的影印,所以不會呼叫建構函式 ;(4)是從檔案中還原類的物件,也不會呼叫建構函式。
21、LIST深度拷貝使用反序列化,IO流來處理

22、
override(重寫)
   1、方法名、引數、返回值相同。
   2、子類方法不能縮小父類方法的訪問許可權。
   3、子類方法不能丟擲比父類方法更多的異常(但子類方法可以不丟擲異常)。
   4、存在於父類和子類之間。
   5、方法被定義為final不能被重寫。
 overload(過載)
  1、引數型別、個數、順序至少有一個不相同。 
  2、不能過載只有返回值不同的方法名。
  3、存在於父類和子類、同類中
 

相關文章