1、抽象類別(abstract class)和介面(interface)有什麼區別?
答:聲明方法的存在而不去實現它的類被叫做抽象類別(abstract class),它用於要建立一個體現某些基本行為的類,並為該類聲明方法,但不能在該類中實現該類的情況。不能建立abstract 類的執行個體。然而可以建立一個變數,其類型是一個抽象類別,並讓它指向具體子類的一個執行個體。不能有抽象建構函式或抽象靜態方法。Abstract類的子類為它們父類中的所有抽象方法提供實現,否則它們也是抽象類別為。取而代之,在子類中實現該方法。知道其行為的其它類可以在類中實現這些方法。
介面(interface)是抽象類別的變體。在介面中,所有方法都是抽象的。多繼承性可通過實現這樣的介面而獲得。介面中的所有方法都是抽象的,沒有一個有程式體。介面只可以定義static final成員變數。介面的實現與子類相似,除了該實作類別不能從介面定義中繼承行為。當類實現特殊介面時,它定義所有這種介面的方法。然後可以在實現了該介面的類的任何對象上調用介面的方法。由於有抽象類別,它允許使用介面名作為引用變數的類型。引用可以轉換到介面類型或從介面類型轉換,instanceof 運算子可以用來決定某對象的類是否實現了介面。
2、Java中的異常處理機制的簡單原理和應用。
答:當Java程式違反了Java的語義規則時,Java虛擬機器就會將發生的錯誤表示為一個異常。違反語義規則包括2種情況:一種是Java類庫內建的語義檢查。例如數組下標越界時會引發IndexOutOfBoundsException,訪問null的對象時會引發NullPointerException。另一種情況是Java允許程式員擴充這種語義檢查,程式員可以建立自己的異常,並自由選擇在何時用throw關鍵字引發異常。所有的異常都是Java.lang.Thowable的子類。
3、sleep()和wait()有什麼區別?
答:sleep()是線程類Thread的方法,導致此線程暫停執行指定時間,給執行機會給其他線程,但是監控狀態依然保持,到時後會自動回復,調用sleep不會釋放對象鎖。
wait()是Object類的方法,對此對象調用wait方法導致本線程放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象發出notify方法(或notifyAll)後本線程才進入對象鎖定池準備獲得對象鎖進入運行狀態。
4、String是最基本的資料類型嗎?
答:String不是基礎資料型別 (Elementary Data Type),基礎資料型別 (Elementary Data Type)包括byte、int、char、long、float、double、boolean和short。 Java.lang.String類是final類型的,因此不可以繼承這個類、不能修改這個類。
5、String和StringBuffer的區別。
答:Java平台提供了兩個類:String和StringBuffer,它們可以儲存和操作字串,即包含多個字元的字元資料。這個String類提供了數值不可改變的字串。而這個StringBuffer類提供的字串進行修改。當知道字元資料要改變的時候就可以使用StringBuffer。典型地,可以使用StringBuffers來動態構造字元資料。
6、介面是否可繼承介面? 抽象類別是否可實現介面? 抽象類別是否可繼承實體類?
答:介面可以繼承介面。抽象類別可以實現介面。抽象類別是否可繼承實體類,但前提是實體類必須有明確的建構函式。
7、Java有沒有goto?
答:goto是Java中的保留關鍵字,但是現在沒有在Java中使用。
8、啟動一個線程是用run()還是start()?
答:啟動一個線程是調用start()方法,使線程所代表的虛擬處理機處於可運行狀態,這意味著它可以由JVM調度並執行。這並不意味著線程就會立即運行。run()方法可以產生必須退出的標誌來停止一個線程。
9、說明一下類變數和執行個體變數的區別。
答:類變數是所有對象共有的,所有的執行個體對象都共用一個類變數,記憶體中只有一處空間存放類變數的值。如果其中一個對象改變了類變數的值,其他對象得到的就是改變後的結果。當類被載入到記憶體時,類變數就會分配相應的記憶體空間。
10、運行時異常與一般異常有何異同?
答:異常表示程式運行過程中可能出現的非正常狀態,運行時異常表示虛擬機器的通常操作中可能遇到的異常,是一種常見運行錯誤。Java編譯器要求方法必須聲明拋出可能發生的非運行時異常,但是並不要求必須聲明拋出未被捕獲的運行時異常。
11、說明執行個體方法和類方法的區別?
答:方法前面有static關鍵字修飾的為類方法,否則為執行個體方法。 執行個體方法可以調用該類中的其他方法;類方法只能調用其他類方法,不能調用執行個體方法;當類檔案載入到記憶體時,執行個體方法不會被分配記憶體空間,只有在對象建立之後才會分配。而類方法在該類被載入到記憶體時就分配了相應的記憶體空間。
12、什麼是雜湊表?
答:雜湊表又稱散列表,是一種能將關鍵字映射成儲存地址的記錄儲存技術。要儲存資料,先設計一種演算法(雜湊函數),然後根據資料記錄的關鍵字計算出各記錄的雜湊碼,這個雜湊碼作為與關鍵字相關的記錄資料的索引。要取出記錄,只需要根據雜湊函數重新計算,得到雜湊碼後,便可直接到相應位置去存取。
13、是否可以從一個static方法內部發出對非static方法的調用?
答:不可以。如果其中包含對象的method(),不能保證對象初始化。
14、在Java逸出字元中,“\uxxxx”代表什嗎?
答:\uxxxx是Java中的字元編碼方式,其中首碼 \u就表示該字元是unicode字元,xxxx表示1到4位16進位數,用這種逸出字元形式可以表示unicode字元集中的任一字元。
15、switch語句中的運算式可以是什麼類型資料?
答:運算式的值可以是byte、short、int和char類型的資料,但不能是float和double類型的資料。
16、插入資料時,ArrayList、LinkedList、Vector誰速度較快?
答:ArrayList、Vector以數組方式儲存資料,插入資料時要進行元素移動操作,因而插入資料慢。LinkedList是一種鏈表結構,在插入資料時只需要修改鏈表的前後項指向即可,因此插入速度較快。
17、final, finally, finalize的區別。
答:final—修飾符(關鍵字)如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個類不能既被聲明為 abstract的,又被聲明為final的。將變數或方法聲明為final,可以保證它們在使用中不被改變。被聲明為final的變數必須在聲明時給定初值,而在以後的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載。
finally是異常處理時提供 finally 塊來執行任何清除操作。如果拋出一個異常,那麼相匹配的 catch 子句就會執行,然後控制就會進入 finally 塊(如果有的話)。
finalize是方法名。Java 技術允許使用 finalize() 方法在垃圾收集器將對象從記憶體中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的。
18、說出一些常用的類,包,介面,請各舉5個。
答:常用的類:BufferedReader,BufferedWriter,FileReader,FileWirter和String等。
常用的包:Java.lang ,Java.awt,Java.io,Java.util和Java.sql等。
常用的介面:Remote,List,Map,Document和NodeList等。
19、多線程的實現方法分別是什麼?同步的實現方法分別是什麼?
答:多線程有兩種實現方法,分別是繼承Thread類與實現Runnable。
介面同步的實現方面有兩種,分別是synchronized、wait與notify。
20、當用System.in.read(buffer)從鍵盤輸入一行n個字元後,儲存在緩衝區buffer中的位元組數是多少?
答:當用System.in.read(buffer)從鍵盤輸入一行n個字元後,儲存在緩衝區buffer中的位元組數有n+2個,即除輸入的n個字元後,還儲存了斷行符號和換行字元。
21、如何?字串的分割?
答:第一種方法是採用split()方法,將分割後的內容儲存在指定的字串數組中;第二種方法是採用StringTokenizer,利用StringTokenizer的nextToken()、hasMoreTokens()等方法進行分割。
22、描述一下JVM載入class檔案的原理機制?
答:JVM中類的裝載是由ClassLoader和它的子類來實現的,Java ClassLoader 是一個重要的Java運行時系統組件。它負責在運行時尋找和裝入類檔案的類。
23、在什麼情況下,finally語句不會執行?
答:如果在try內部執行一條System.exit(0)語句終止應用程式的執行,則finally中的語句不會被執行。
24、範圍public,private,protected,以及不寫時的區別。
答:具體區別如下:
| 範圍 |
同一類 |
同一包 |
子孫類 |
所有類 |
| public |
√ |
√ |
√ |
√ |
| protected |
√ |
√ |
√ |
× |
| private |
√ |
× |
× |
× |
| 預設 |
√ |
√ |
× |
× |
25、說出重寫和重載的區別,重寫方法是否可以改變傳回值的類型?
答:方法的重寫Overriding和重載Overloading是Java多態性的不同表現。重寫是父類與子類之間多態性的一種表現,重載是一個類中多態性的一種表現。
如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫。子類的對象使用 這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被"屏蔽"了。如果在一個類中定義了多個同名的方法,它們或有不同的參數個數或有不同的參數類型,則稱為方法的重載。
重載的方法是可以改變傳回值的類型。
26、throw和throws有什麼區別?
答:throw關鍵字一般用於方法內部,用於拋出一個異常類對象,一旦異常被拋出後,throw語句後的程式碼將不會被執行。
throws關鍵字通常出現在方法聲明中,用來指定該方法可能拋出的異常。如果可能有多個異常拋出,可以使用逗號將它們分隔開。
27、字串的compareTo方法結果是什嗎?
答:使用compareTo()方法可以比較字串與字串之間的大小關係。如果當前字串小於指定字串,則返回一個小於0的數值;否則返回一個大於0的數值;如果兩個字串相等,則返回0。
28、字串的串連操作有幾種實現方法?
答:字串與字串的串連操作可以通過“+”運算子和concat()方法來實現。另外“+”運算子還可以實現字串與其他類型資料之間的串連操作,可以與字串串連的資料類型有:int、long、float、double、boolean、char等。
29、當一個對象被當作參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這裡到底是值傳遞還是引用傳遞?
答:是值傳遞,因為在Java程式設計語言中只有值傳遞參數。當一個對象執行個體作為一個參數被傳遞到方法中時,參數的值就是對該對象的引用。對象的內容可以在被調用的方法中改變,但對象的引用是永遠不會改變的。
30、Class MyClass等價於 Class MyClass extends Object是否正確?
答:正確。因為Object類是Java中最高層次的類,是所有類的超類。所有的類,都可以說是由Object繼承而來,只是我們不需要顯式地指明extends Object。
31、數組有沒有length()方法?
String有沒有length()方法?
答:數組沒有length()方法,只有length的屬性。String有length()方法。
32、物件導向的特徵有哪些方面
答:(1)抽象:抽象就是忽略一個主題中與當前目標無關的方面,以便更充分地注意與當前目標有關的方面。抽象並不打算瞭解全部問題,而只是選擇其中的一部分,暫時不用部分細節。抽象包括兩個方面:一個是過程抽象,另外一個是資料抽象。
(2)繼承:繼承是一種連接類的層次模型,並且允許類的重用,它提供了一種明確表述共性的方法。對象的一個新類可以從現有的類中派生,這個過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的衍生類別(子類),而原始類稱為新類的基類(父類)。衍生類別可以從它的基類那裡繼承方法和執行個體變數,並且類可以修改或增加新的方法使之更適合特殊的需要。
(3)封裝:封裝是把過程和資料包圍起來,對資料的訪問只能通過已定義的介面。現實世界可以被描繪成一系列完全自治、封裝的對象,這些對象通過一個受保護的介面訪問其他對象。
(4)多態性:多態性是指允許不同類的對象對同一訊息作出響應。多態性包括參數化多態性和包含多態性。多態性語言具有靈活、抽象、行為共用、代碼共用的優勢,同時很好地解決了應用程式函數同名問題。
33、Java中實現多態的機制是什嗎?
答:方法的重寫和重載是Java多態性的不同表現。重寫是父類與子類之間多態性的一種表現,重載是一個類中多態性的一種表現。
34、通過JDBC串連資料庫有哪幾種方式?
答:JDBC-ODBC bridge driver方式可以訪問一個ODBC資料來源,但每台用戶端電腦需要安裝並配置ODBC驅動程式。
Native-API partly Java driver方式將JDBC調用轉換成特定資料庫API的調用,該方式要求每台用戶端電腦安裝特定資料庫的驅動程式。
JDBC-Net pure Java driver方式將JDBC調用轉換為獨立於資料庫的中介軟體廠商的專有資料庫訪問協議,然後由其負責與資料庫的串連活動。
Native-protocol pure Java driver方式將JDBC調用轉換為資料庫直接使用的標準網路通訊協定(例如HTTP等)。這種方式不需要安裝用戶端軟體,用戶端電腦可以直接與資料庫伺服器進行資料“交流”活動。
35、List、Map、Set三個介面,存取元素時,各有什麼特點?
答:List以特定次序來持有元素,可有重複元素。Set 無法擁有重複元素,內部排序。Map 儲存key-value值,value可多值。
36、在比較對象時,“==”運算子和equals運算有何區別?
答:“==”運算子表示兩個對象引用的地址是否相等,equals運算子則表示兩個對象引用的內容是否相等。
37、什麼是迴圈嵌套?其特點是什嗎?
答:迴圈的嵌套,是指在一個迴圈語句的迴圈體中又包含另一個完整的迴圈語句。多重迴圈語句的特點是:外層迴圈變數相對穩定,內層迴圈變數逐一變化,即:“多層迴圈,內(層)外(層)有別,外(層)變一次,內(層)變一遍。”
38、char型變數中能不能存貯一個中文漢字?為什麼?
答:能夠定義成為一個中文的,因為Java中以unicode編碼,一個char佔16個位元組,所以放一個中文是沒問題的。
39、error和exception有什麼區別
答:error 表示恢複不是不可能但很困難的情況下的一種嚴重問題。比如說記憶體溢出。
exception 表示一種設計或實現問題。也就是說,它表示如果程式運行正常,從不會發生的情況
40、如何?Java序列化?
答:將需要被序列化的類實現Serializable介面,該介面沒有需要實現的方法,它只是為了標註該對象是可被序列化的,然後需要使用一個輸出資料流來構造一個ObjectOutputStream對象,接著使用ObjectOutput
Stream對象的writeObject()方法就可以將參數為obj的對象寫出,要恢複的話則需要使用輸入資料流。
41、Java中有幾種類型的流?JDK為每種類型的流提供了一些抽象類別以供繼承,請說出他們分別是哪些類?
答:位元組流和字元流。位元組流繼承於InputStream OutputStream,字元流繼承於InputStreamReader OutputStreamWriter。在Java.io包中還有許多其他的流,主要是為了提高效能和使用方便。
42、String s=new String("a");共建立了幾個String對象?
答:兩個。其中包括一個字元對象和一個字元對象引用對象。