1. 程式人生 > >java中一些小知識和面試問題

java中一些小知識和面試問題

() set 返回值 初始 cep 裝箱 聲明 數據 允許

抽象類的總結幾點:

· 抽象類與普通類相比最大的不同只是在於抽象類之中存在有抽象方法,所以在抽象類之中依
然可以定義屬性、構造方法等

· 抽象類聲明時不允許使用 final,抽象類必須要求有子類,而 final 定義的類是不能夠有子類的。

· 抽象類之中即使沒有抽象方法,那麽也不能夠被直接實例

JAVA 中的主方法可以說創造了一個長的之最,其組成有許多的關鍵字,下面來分析每一個關鍵字:
· public:指的是公共的;
· static:使用 static 定義的方法必須由類名稱調用;
· void:是一切的開始點,只要開始了就沒的返回;
· main:是一個系統規定好的方法名稱,只要是執行類,那麽就找 main;


· String args[]:字符串對象數組,用於接收初始化參數。

java 中提供了八種包裝類:byte(Byte)、short(Short)、int(Integer)、long(Long)、
float(Float)、double(Double)、boolean(Boolean)、char(Character)。

但是對於包裝類而言,又可以將其分為兩類:

· 對象型包裝類:Boolean、Character;
· 數值型包裝類(Number 的子類):Byte、Short、Integer、Long、Float、Double;

對於包裝類而言,有兩個最為重要的操作:
· 裝箱:將基本數據類型變為包裝類對象的形式,往往都使用各個包裝類的構造方法;


· 拆箱:從包裝類之中取出包含的基本數據類型的數據,都利用 Number 類中的方法;

所有的異常都屬於 Throwable 的子類。而在 Throwable 下有兩個子類:
· Error:指的是 JVM 出錯,此時的程序還沒有正常執行,這樣的錯誤一般我們處理不了;
· Exception:指的是程序之中出現的錯誤(異常),用戶可以進行處理。
Exception 是我們開發之中所能夠處理異常的最大的總和。異常的最大父類。

為什麽必須通過 start()方法才可以啟動多線程呢?直接調用 run()為什麽不可以?
java 程序本身是存在單繼承局限的,如果說現在一個類裏面已經繼承了 Thread 類,那麽這個類就


不能夠在去繼承其他的類了,那麽為了解決這樣的問題,在多線程的實現之中還提供有一種 Runnable
接口,利用接口來避免單繼承的局限。

利用 Runnable 接口實現的多線程要比繼承 Thread 類實現的多線程更加的方便,因為有效的避免了
單繼承的局限,同時不管使用何種方式都要求其必須利用 Thread 類中的 start()方法啟動多線程。
除了單繼承的局限之外,在開發之中如果使用了 Runnable 接口還可以更加方便的表示出數據共享的概念。

TreeSet 依靠的是 Comparable 來區分重復數據;
HashSet 依靠的是 hashCode()、equals()來區分重復數據
Set 裏面不允許保存重復數據。

問題一:關於 super 和 this 問題
· super 調用的是父類的方法或屬性、this 調用的是本類的方法或屬性;
· super 調用父類構造方法時必須要放在子類構造方法的首行,而 this()調用本類構造方法時,也必
須放在構造方法的首行,所以當調用構造時,“super()”與“this()”不能同時出現;
· this 存在有一個表示當前對象的概念,而 super 沒有這樣的概念

問題二:關於方法重載與方法覆寫的區別?
· 方法重載(Overloading):在同一個類之中定義了方法名稱相同,且參數的內容及個數不同的方
法時,沒有任何的權限限制;
· 方法覆寫(Override):在繼承關系之中,子類定義了與父類相同的方法名稱、參數類型及個數、
返回值,需要考慮權限問題,即:被覆寫的方法不能擁有比父類更嚴格的訪問控制權限。

面試題:請解釋在 String 之中“==”和 equals()的區別?
· “==”:屬於 Java 提供的關系運算符,主要進行對象的地址數值比較;
· “equals()”:屬於 String 類中的一個方法,主要是進行字符串內容的比較。
在以後的開發之中,一定要使用 equals()進行字符串的比較

面試題:請解釋 String 類對象兩種實例化的區別?
· 構造方法:會產生兩塊堆內存空間,其中一塊將成為垃圾,並且不會自動入池保存,用戶可以通
過 intern()方法手工入池;
· 直接賦值:只會產生一塊堆內存空間,可以自動入池保存

面試題:請問 Exception 和 RuntimeException 有那些區別呢?
· Exception 是 RuntimeException 的父類;
· Exception 定義的其他子類(異常)都要求進行強制性的處理,而 RuntimeException 可以由用戶
選擇性的進行處理。

面試題:請解釋 enum 和 Enum 的區別?
· 利用 enum 關鍵字定義的枚舉相當於使用一個類直接繼承了 Enum 類;

面試題:關於 Thread 類與 Runnable 接口的區別?(請解釋多線程兩種實現方式的區別)
· Thread 類是 Runnable 接口的子類;
· 如果要想實現多線程,那麽必須要有線程主體類,主體類可以繼承 Thread 類或實現 Runnable
接口,但是實現接口可以有效的避免單繼承局限;
· 利用 Runnable 實現的多線程類,可以更加方便的表示出數據共享的概念

面試題:請解釋 String 與 StringBuffer 的區別?
· String 一旦聲明不可改變,StringBuffer 的內容可以改變;

面試題:請解釋 StringBuffer 與 StringBuilder 的區別?
· StringBuffer 類中定義的方法都是同步方法,而 StringBuilder 定義的方法都屬於異步方法;
· StringBuffer 操作的數據更加安全但是性能較差,而 StringBuilder 在數據操作上缺乏安全性,可
是性能較高。

面試題:請問 GC 是什麽?如何操作?
· GC 指的是垃圾收集器;
· GC 會由 JVM 不定期自動執行,或者直接調用 Runtime 類中的 gc()方法手工釋放。

面試題:請解釋 final、finally、finalize 的區別?
· final:是一個關鍵字,定義不能被繼承的類、不能被覆寫的方法、常量;
· finally:是異常處理的統一出口,關鍵字;
· finalize:是 Object 類的一個方法,用於執行對象回收前的處理操作。

面試題:請解釋 Comparable 和 Comparator 的區別?
· java.lang.Comparable 是在類定義的時候默認實現好的接口,裏面只有一個 compareTo()方法;
· java.util.Comparator 是需要單獨定義一個比較規則,屬於挽救功能的操作。

面試題:請解釋 ArrayList、Vector 的區別?
· 這兩個類都是 List 接口的子類;
· Vector 類是在 JDK 1.0 的時候提供的,裏面所提供的操作方法都是同步方法,所以屬於線程安全
的操作類;
· ArrayList 類是在 JDK 1.2 的時候提供的,裏面所提供的方法都是異步操作方法,所以屬於非線
程安全的操作類。
如果日後在開發之中,90%的情況下考慮的都是 ArrayList。

面試題:請解釋 HashMap 與 Hashtable 的區別?
· HashMap 是在 JDK 1.2 的時候提供的,使用的是異步處理方式,所以屬於非線程安全的操作,
同時在 HashMap 之中可以保存 null;
· Hashtable 是在 JDK 1.0 的時候提供的,使用的是同步處理方式,所以屬於線程安全的操作,但
是在 Hashtable 裏面不能夠保存 null。
在實際的開發之中,HashMap 保存數據上由於沒有限制,所以要更加方便一些,那麽以後的開發之
中大部分的情況下都會優先選擇 HashMap 子類操作。

java中一些小知識和面試問題