Java課後簡答題
1、簡述Java的特點。
面向對象、跨平臺性、健壯性、安全性、可移植性、多線程性、動態性等。
2、簡述JRE與JDK的區別。
JRE(Java Runtime Environment,Java運行時環境),它相當於操作系統部分,提供了Java程序運行時所需要的基本條件和許多Java基礎類,例如,IO類、GUI控件類、網絡類等。JRE是提供給普通用戶使用的,如果你只想運行別人開發好的Java程序,那麽,你的計算機上必須且只需安裝JRE。
JDK(Java Development Kit,Java開發工具包),它包含編譯工具、解釋工具、文檔制作工具、打包工具多種與開發相關的工具,是提供給Java開發人員使用的。初學者學習和使用Java語言時,首先必須下載和安裝JDK。JDK中已經包含了JRE部分,初學者安裝JDK後不必再去下載和安裝JRE了。
3、請列舉Java語言中的八種基本數據類型,並說明每種數據類型所占用的空間大小。
Java語言的八種基本數據類型有:byte字節型,占一個字節。short短整型,占兩個字節。int整型,占4個字節。long長整型,占8個字節。float單精度浮點型,占4個字節。double雙精度浮點型,占8個字節。char字符型,占兩個字節。boolean型,表示邏輯值,有true和false兩個值,分別占一個字節。
4、簡述&&與&的區別並舉例說明。
如果使用“&”在表達式之間進行連接,那麽無論任何情況,“&”兩邊的表達式都會參與計算。如果使用“&&”進行連接,當“&&”左邊的表達式為false,則不會執行其右邊的表達式。例如定義int x = 2,y = 0; boolean b = x < y & x / y > 0 表達是會發生被0除異常,因為x / y的表達式執行了。而boolean b = x < y && x / y > 0 是不會出現這種異常的,因為x < y為false,表達式x / y不會執行。
5、什麽是方法重載?
方法重載指的是在一個類中可以聲明多個同名的方法,而方法中參數的個數或者數據類型不一致。調用這些同名的方法時,JVM會根據實際參數的不同綁定到不同的方法。
6、構造方法和普通的成員方法有什麽區別?
構造方法是類的一個特殊成員,它會在類實例化對象時被自動調用。而普通方法只有在使用的時候才會被調用。在定義構造方法時要求方法名與類名相同、在方法名的前面沒有返回值類型的聲明、在方法中不能使用return語句返回一個值
7、單例設計模式具備哪些特點?
單例模式可以保證在整個程序運行期間針對該類只存在一個實例對象。
8、什麽是方法重寫?
在繼承關系中,子類的方法與父類的某一方法具有相同的方法名、返回類型和參數列表,則稱子類的該方法重寫(覆蓋)父類的方法。
9、什麽是多態?
多態意味著一個對象有著多種形態,可以在特定的情況下,表現不同的狀態,從而對應著不同的屬性和方法。簡單的說,多態就是使用父類類型的變量引用子類對象,根據被引用子類對象的特性,程序會得到不同的運行效果。
10、抽象類和接口的區別?
在Java中,使用abstract關鍵字修飾的類稱之為抽象類。抽象類是不能被實例化的,通常需要寫一個子類來繼承抽象類,同時實例化子類來獲得該類的對象。抽象類通常用於表示一種抽象的概念。
接口可以說是一種特殊的抽象類,接口中只能定義常量和抽象方法。由於接口的特殊性,在定義時需要使用interface關鍵字。
11、java中有幾種方法可以實現一個線程?請舉例說明。
一種是繼承java.lang包下的Thread類,覆寫Thread類的run()方法,在run()方法中實現運行在線程上的代碼。
new Thread() {
public void run(){}
}.start();
另一種就是實現java.lang.Runnable接口,同樣是在run()方法中實現運行在線程上的代碼。
new Thread(new Runnable(){
public void run(){}
}).start()
12、sleep() 和 wait() 有什麽區別?
調用sleep()方法,正在執行的線程主動讓出CPU去執行其他線程,在sleep()方法指定的時間過後,CPU才會回到這個線程上繼續往下執行,如果當前線程進入了同步鎖,sleep()方法並不會釋放鎖,即使當前線程使用sleep()方法讓出了CPU,但其它被同步鎖擋住了的線程也無法得到執行。
wait()在一個已經進入了同步鎖的線程內進行調用,讓當前線程暫時讓出同步鎖,以便其它正在等待此鎖的線程可以得到同步鎖並運行。當其它線程調用了notify()方法後,調用wait()方法的線程就會解除wait狀態,當再次獲得同步鎖後,程序可以繼續向下執行。
13、String和StringBuffer有什麽區別?
String類是不可變類,即字符串值一旦初始化後就不可能改變。StringBuffer是可變字符串類,類似String的緩沖區,可以修改字符串的值。
14、Date和Calender類有什麽區別和聯系?
Date類用來表示某個特定的瞬間,能夠精確到毫秒。而在實際應用中,往往需要把一個日期中的年、月、日等信息單獨返回進行顯示或處理,這個類中的大部分方法都已被標記過時。Calender類基本取代了Date類,該類中定義了一系列用於完成日期和時間字段操作的方法。
Calendar的getTime()方法,getTime()返回一個表示Calendar時間值的Date對象,同時Calendar有一個setTime(Date date)方法,setTime()方法接收一個Date對象,將Date對象表示的時間值設置給Calendar對象,通過這兩個方法就可以完成Date和Calendar對象之間的轉換。
15、什麽是集合,請列舉集合中常用的類和接口?
為了使程序能方便的存儲和操作數目不固定的一組數據,JDK提供了一套類庫,這些類都位於java.util包中,統稱為集合。集合框架中包含3個接口,分別是List、Set、Map。
16、集合中的List、Set、Map有什麽區別?
List的特點是元素有序、元素可重復。List接口的主要實現類有ArrayList和LinkedList。Set的特點是元素無序、元素不可重復。Set接口的主要實現類有HashSet和TreeSet。Map的特點是存儲的元素是鍵(Key)、值(Value)映射關系,元素都是成對出現的。Map接口的主要實現類有HashMap和TreeMap。
17、請說說Collection和Collections的有什麽區別?
Collection是一個單例集合接口。它提供了對集合對象進行基本操作的通用方法。Collections是一個工具類。它包含各種有關集合操作的方法。
18、簡述流的概念。
Java程序通過流來完成輸入和輸出,流是輸入或輸出信息的抽象。流通過Java的輸入/輸出系統與外設連接進行數據通信。流是抽象的對象,具體實現代碼在java.io包中。
19、Java流被分為字節流、字符流兩大流類,兩者有什麽區別?
字節流的兩個基類是InputStream和OutputStream,字符流的兩個基類是Reader和Writer,它們都是Object類的直接子類,字節流是處理以8位字節為基本單位的字節流類;Reader和Writer類是專門處理16位字節的字符流類。
20、簡要說明管道流。
管道流分為管道輸入流(PipedInputStream)和管道輸出流(PipedOutputStream),通常由一個PipedInputStream實例對象和一個PipedOutputStream實例對象相互連接而實現管道通信,PipedOutputStream向管道寫入數據,PipedInputStream從管道中讀取PipedOutputStream寫入的數據,管道流主要用來完成線程之間的通信。
21、請簡述GUI中實現事件監聽的步驟。
通過實現XxxListener接口或者繼承XxxAdapter類實現一個事件監聽器類,並對處理監聽動作的方法進行重寫
創建事件源對象和事件監聽器對象
調用事件源的addXxxLisntener()方法,為事件源註冊事件監聽器對象
22、AWT和Swing的區別
AWT 是Abstract Window ToolKit (抽象窗口工具包)的縮寫,這個工具包提供了一套與本地圖形界面進行交互的接口。AWT 中的圖形函數與操作系統所提供的圖形函數之間有著一一對應的關系,當我們利用 AWT 來構件圖形用戶界面的時候,我們實際上是在利用操作系統所提供的圖形庫。由於不同操作系統的圖形庫所提供的功能是不一樣的,在一個平臺上存在的功能在另外一個平臺上則可能不存在。為了實現Java語言所宣稱的"一次編譯,到處運行"的概念,AWT 不得不通過犧牲功能來實現其平臺無關性,也就是說,AWT 所提供的圖形功能是各種通用型操作系統所提供的圖形功能的交集。由於AWT 是依靠本地方法來實現其功能的,我們通常把AWT控件稱為重量級控件。
Swing 是在AWT的基礎上構建的一套新的圖形界面系統,它提供了AWT 所能夠提供的所有功能,並且用純粹的Java代碼對AWT 的功能進行了大幅度的擴充。由於在Swing 中沒有使用本地方法來實現圖形功能,我們通常把Swing控件稱為輕量級控件。
AWT和Swing之間的基本區別:AWT 是基於本地方法的C/C++程序,其運行速度比較快;Swing是基於AWT 的Java程序,其運行速度比較慢。對於一個嵌入式應用來說,目標平臺的硬件資源往往非常有限,而應用程序的運行速度又是項目中至關重要的因素。在這種矛盾的情況下,簡單而高效的AWT 當然成了嵌入式Java的第一選擇。而在普通的基於PC或者是工作站的標準Java應用中,硬件資源對應用程序所造成的限制往往不是項目中的關鍵因素,所以在標準版的Java中則提倡使用Swing,也就是通過犧牲速度來實現應用程序的功能。
23、網絡通信協議是什麽?
在Internet中傳輸數據都需要遵守一定的規則,這種規則通常被稱作網絡通信協議。網絡通信協議對數據傳輸格式、傳輸速率、傳輸步驟等作了統一規定,通信雙方必須共同遵守這個規定才能完成數據的交互。到目前為止,網絡通信協議已經有很多種,其中TCP/UDP協議在世界範圍內應用最為廣泛。
24、TCP協議和UDP協議有什麽區別?
UDP協議是無連接通信協議,所謂的無連接就是指數據的發送端和接收端不建立邏輯連接。由於UDP協議消耗資源小,通信效率高,通常都會用於音頻、視頻和普通數據的傳輸。UDP協議在傳輸數據時不能保證數據的完整性,因此在傳輸重要數據時不建議使用UDP協議。
TCP協議是面向連接的通信協議,即在傳輸數據前先在發送端和接收端建立邏輯連接,然後再傳輸數據,它提供了兩臺計算機之間可靠無差錯的數據傳輸。在TCP連接中必須要明確客戶端與服務器端,由客戶端向服務端發出連接請求,每次連接的創建都需要經過“三次握手”。
25、Socket類和ServerSocket類各有什麽作用?
ServerSocket類用於創建服務端程序,通過調用ServerSocket對象的accept()方法,接收來自客戶端的請求。
Socket類用於創建客戶端程序,當客戶端和服務端的兩個Socket建立了專線連接後,連接的一端既能向另一端連續寫入字節,也能從另一端讀取字節。Socket類中定義了getInputStream()方法返回Socket的輸入流對象,定義了getOutputStream()方法返回Socket的輸出流對象。只要連接的一端向該輸出流對象寫入了數據,連接的另一端就能從其輸入流對象中讀取到。
Java課後簡答題