紅黑聯盟-java基礎筆試題1

一、抽象類(abstract class)和接口(interface)有什麼區別?
  答:聲明方法的存在而不去實現它的類被叫作抽象類(abstract class),它用於要建立一個體現某些基本行爲的類,併爲該類聲明方法,但不能在該類中實現該類的狀況。不能建立abstract 類的實例。然而能夠建立一個變量,其類型是一個抽象類,並讓它指向具體子類的一個實例。不能有抽象構造函數或抽象靜態方法。Abstract類的子類爲它們父類中的全部抽象方法提供實現,不然它們也是抽象類爲。取而代之,在子類中實現該方法。知道其行爲的其它類能夠在類中實現這些方法。 
    接口(interface)是抽象類的變體。在接口中,全部方法都是抽象的。多繼承性可經過實現這樣的接口而得到。接口中的全部方法都是抽象的,沒有一個有程序體。接口只能夠定義static final成員變量。接口的實現與子類類似,除了該實現類不能從接口定義中繼承行爲。當類實現特殊接口時,它定義全部這種接口的方法。而後能夠在實現了該接口的類的任何對象上調用接口的方法。因爲有抽象類,它容許使用接口名做爲引用變量的類型。引用能夠轉換到接口類型或從接口類型轉換,instanceof 運算符能夠用來決定某對象的類是否實現了接口

二、Java中的異常處理機制的簡單原理和應用。程序員

   答:當Java程序違反了Java的語義規則時,Java虛擬機就會將發生的錯誤表示爲一個異常。違反語義規則包括2種狀況:一種是Java類庫內置的語義檢查。例如數組下標越界時會引起IndexOutOfBoundsException,訪問null的對象時會引起NullPointerException。另外一種狀況是Java容許程序員擴展這種語義檢查,程序員能夠建立本身的異常,並自由選擇在什麼時候用throw關鍵字引起異常。全部的異常都是Java.lang.Thowable的子類。 算法

三、sleep()和wait()有什麼區別?
   答:sleep()是線程類Thread的方法,致使此線程暫停執行指定時間,給執行機會給其餘線程,可是監控狀態依然保持,到時後會自動恢復,調用sleep不會釋放對象鎖
   wait()是Object類的方法對此對象調用wait方法致使本線程放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象發出notify方法(或notifyAll)後本線程才進入對象鎖定池準備得到對象鎖進入運行狀態。 
四、String是最基本的數據類型嗎?
   答:String不是基本數據類型,基本數據類型包括byte、int、char、long、float、double、boolean和short。 Java.lang.String類是final類型的,所以不能夠繼承這個類、不能修改這個類。 
五、String和StringBuffer的區別。
   答:Java平臺提供了兩個類:String和StringBuffer,它們能夠儲存和操做字符串,即包含多個字符的字符數據。這個String類提供了數值不可改變的字符串。而這個StringBuffer類提供的字符串進行修改。當知道字符數據要改變的時候就可使用StringBuffer。典型地,可使用StringBuffers來動態構造字符數據。 
六、接口是否可繼承接口? 抽象類是否可實現接口? 抽象類是否可繼承實體類?
    答:接口能夠繼承接口。抽象類能夠實現接口。抽象類是否可繼承實體類,但前提是實體類必須有明確的構造函數。sql

七、Java有沒有goto?
   答:goto是Java中的保留關鍵字,可是如今沒有在Java中使用。 
八、啓動一個線程是用run()仍是start()?
   答:啓動一個線程是調用start()方法,使線程所表明的虛擬處理機處於可運行狀態,這意味着它能夠由JVM調度並執行。這並不意味着線程就會當即運行。run()方法能夠產生必須退出的標誌來中止一個線程。 
九、說明一下類變量和實例變量的區別。
   答:類變量是全部對象共有的,全部的實例對象都共用一個類變量,內存中只有一處空間存放類變量的值。若是其中一個對象改變了類變量的值,其餘對象獲得的就是改變後的結果。當類被加載到內存時,類變量就會分配相應的內存空間。
十、運行時異常與通常異常有何異同?
   答:異常表示程序運行過程當中可能出現的非正常狀態,運行時異常表示虛擬機的一般操做中可能遇到的異常,是一種常見運行錯誤。Java編譯器要求方法必須聲明拋出可能發生的非運行時異常,可是並不要求必須聲明拋出未被捕獲的運行時異常。 
十一、說明實例方法和類方法的區別? 
   答:方法前面有static關鍵字修飾的爲類方法不然爲實例方法 實例方法能夠調用該類中的其餘方法類方法只能調用其餘類方法不能調用實例方法;當類文件加載到內存時,實例方法不會被分配內存空間,只有在對象建立以後纔會分配。而類方法在該類被加載到內存時就分配了相應的內存空間。
十二、什麼是哈希表?
   答:哈希表又稱散列表,是一種能將關鍵字映射成存儲地址的記錄存儲技術。要存儲數據,先設計一種算法(哈希函數),而後根據數據記錄的關鍵字計算出各記錄的哈希碼,這個哈希碼做爲與關鍵字相關的記錄數據的索引。要取出記錄,只須要根據哈希函數從新計算,獲得哈希碼後,即可直接到相應位置去存取。 
1三、是否能夠從一個static方法內部發出對非static方法的調用?
   答:不能夠。若是其中包含對象的method(),不能保證對象初始化。
1四、在Java轉義字符中,「\uxxxx」表明什麼?
   答:\uxxxx是Java中的字符編碼方式,其中前綴 \u就表示該字符是unicode字符xxxx表示1到4位16進制數,用這種轉義字符形式能夠表示unicode字符集中的任意字符。
1五、switch語句中的表達式能夠是什麼類型數據?
   答:表達式的值能夠是byte、short、int和char類型的數據,但不能是float和double類型的數據。 
1六、插入數據時,ArrayList、LinkedList、Vector誰速度較快?
   答:ArrayList、Vector以數組方式存儲數據,插入數據時要進行元素移動操做,於是插入數據慢。LinkedList是一種鏈表結構,在插入數據時只須要修改鏈表的先後項指向便可,所以插入速度較快。編程

1七、final, finally, finalize的區別。
   答:final—修飾符(關鍵字)若是一個類被聲明爲final,意味着它不能再派生出新的子類,不能做爲父類被繼承。所以一個類不能既被聲明爲 abstract的,又被聲明爲final的。將變量或方法聲明爲final,能夠保證它們在使用中不被改變。被聲明爲final的變量必須在聲明時給定初值,而在之後的引用中只能讀取,不可修改。被聲明爲final的方法也一樣只能使用,不能重載。
    finally是異常處理時提供 finally 塊來執行任何清除操做。若是拋出一個異常,那麼相匹配的 catch 子句就會執行,而後控制就會進入 finally 塊(若是有的話)。
    finalize是方法名。Java 技術容許使用 finalize() 方法在垃圾收集器將對象從內存中清除出去以前作必要的清理工做。這個方法是由垃圾收集器在肯定這個對象沒有被引用時對這個對象調用的。它是在 Object 類中定義的,所以全部的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其餘清理工做。finalize() 方法是在垃圾收集器刪除對象以前對這個對象調用的。
1八、說出一些經常使用的類,包,接口,請各舉5個。 
   答:經常使用的類:BufferedReader,BufferedWriter,FileReader,FileWirter和String等。
   經常使用的包:Java.lang ,Java.awt,Java.io,Java.util和Java.sql等。
   經常使用的接口:Remote,List,Map,Document和NodeList等。
20、當用System.in.read(buffer)從鍵盤輸入一行n個字符後,存儲在緩衝區buffer中的字節數是多少? 
   答:當用System.in.read(buffer)從鍵盤輸入一行n個字符後,存儲在緩衝區buffer中的字節數有n+2個,即除輸入的n個字符後,還存儲了回車和換行字符
2一、如何實現字符串的分割?數組

第一種方法是採用split()方法,將分割後的內容保存在指定的字符串數組中;函數

第二種方法是採用StringTokenizer,利用StringTokenizer的nextToken()、hasMoreTokens()等方法進行分割。 
2二、描述一下JVM加載class文件的原理機制?
   答:JVM中類的裝載是由ClassLoader和它的子類來實現的,Java ClassLoader 是一個重要的Java運行時系統組件。它負責在運行時查找和裝入類文件的類。
2三、在什麼狀況下,finally語句不會執行?性能

   答:若是在try內部執行一條System.exit(0)語句終止應用程序的執行,則finally中的語句不會被執行。
2四、做用域public,private,protected,以及不寫時的區別。
   答:具體區別以下:編碼

做用域
同一類
同一包
子孫類
全部類
public
  √  
protected
×
private
×
×
×
默認
×
×


2五、說出重寫和重載的區別,重寫方法是否能夠改變返回值的類型?
   答:方法的重寫Overriding和重載Overloading是Java多態性的不一樣表現。重寫是父類與子類之間多態性的一種表現,重載是一個類中多態性的一種表現。
   若是在子類中定義某方法與其父類有相同的名稱和參數,咱們說該方法被重寫。子類的對象使用 這個方法時,將調用子類中的定義,對它而言,父類中的定義如同被"屏蔽"了。若是在一個類中定義了多個同名的方法,它們或有不一樣的參數個數或有不一樣的參數類型,則稱爲方法的重載。
   重載的方法是能夠改變返回值的類型。 

2六、throw和throws有什麼區別?
   答:throw關鍵字通常用於方法內部,用於拋出一個異常類對象,一旦異常被拋出後,throw語句後的程序代碼將不會被執行
    throws關鍵字一般出如今方法聲明中,用來指定該方法可能拋出的異常。若是可能有多個異常拋出,可使用逗號將它們分隔開。spa

2七、字符串的compareTo方法結果是什麼?
   答:使用compareTo()方法能夠比較字符串與字符串之間的大小關係。若是當前字符串小於指定字符串,則返回一個小於0的數值;不然返回一個大於0的數值;若是兩個字符串相等,則返回0。
2八、字符串的鏈接操做有幾種實現方法? 
   答:字符串與字符串的鏈接操做能夠經過「+」運算符和concat()方法來實現。另外「+」運算符還能夠實現字符串與其餘類型數據之間的鏈接操做,能夠與字符串鏈接的數據類型有:int、long、float、double、boolean、char等。 
2九、當一個對象被看成參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這裏究竟是值傳遞仍是引用傳遞? 
   答:是值傳遞,由於在Java編程語言中只有值傳遞參數。當一個對象實例做爲一個參數被傳遞到方法中時,參數的值就是對該對象的引用。對象的內容能夠在被調用的方法中改變,但對象的引用是永遠不會改變的。
30、Class MyClass等價於 Class MyClass extends Object是否正確? 
   答:正確。由於Object類是Java中最高層次的類,是全部類的超類。全部的類,均可以說是由Object繼承而來,只是咱們不須要顯式地指明extends Object。線程

 

3一、數組有沒有length()方法? String有沒有length()方法?
   答:數組只有length的屬性。String有length()方法
3三、Java中實現多態的機制是什麼?
   答:方法的重寫和重載是Java多態性的不一樣表現重寫是父類與子類之間多態性的一種表現,重載是一個類中多態性的一種表現


3五、List、Map、Set三個接口,存取元素時,各有什麼特色?
   答:List以特定次序來持有元素,可有重複元素。Set 沒法擁有重複元素,內部排序。Map 保存key-value值,value可多值。 
3六、在比較對象時,「==」運算符和equals運算有何區別?
   答:「==」運算符表示兩個對象引用的地址是否相等,equals運算符則表示兩個對象引用的內容是否相等。 
3七、什麼是循環嵌套?其特色是什麼?
   答:循環的嵌套,是指在一個循環語句的循環體中又包含另外一個完整的循環語句。多重循環語句的特色是:外層循環變量相對穩定,內層循環變量逐一變化,即:「多層循環,內(層)外(層)有別,外(層)變一次,內(層)變一遍。」



40、如何實現Java序列化?
   答:將須要被序列化的類實現Serializable接口,該接口沒有須要實現的方法,它只是爲了標註該對象是可被序列化的,而後須要使用一個輸出流來構造一個ObjectOutputStream對象,接着使用ObjectOutput
Stream對象的writeObject()方法就能夠將參數爲obj的對象寫出,要恢復的話則須要使用輸入流。
4一、Java中有幾種類型的流?JDK爲每種類型的流提供了一些抽象類以供繼承,請說出他們分別是哪些類?
   答:字節流和字符流。字節流繼承於InputStream OutputStream,字符流繼承於InputStreamReader OutputStreamWriter。在Java.io包中還有許多其餘的流,主要是爲了提升性能和使用方便。
4二、String s=new String("a");共建立了幾個String對象?   答:兩個。其中包括一個字符對象和一個字符對象引用對象。

相關文章
相關標籤/搜索