學(xué)習(xí)啦 > 創(chuàng)業(yè)指南 > 職場(chǎng) > 面試題 > java基礎(chǔ)面試題與答案

java基礎(chǔ)面試題與答案

時(shí)間: 護(hù)托1061 分享

java基礎(chǔ)面試題與答案

  當(dāng)Java程序違反了Java的語(yǔ)義規(guī)則時(shí),Java虛擬機(jī)就會(huì)將發(fā)生的錯(cuò)誤表示為一個(gè)異常。下面就由學(xué)習(xí)啦小編為大家介紹一下java基礎(chǔ)面試題與答案的文章,歡迎閱讀。

  java基礎(chǔ)面試題與答案篇1

  1、抽象類(lèi)(abstract class)和接口(interface)有什么區(qū)別?

  答:聲明方法的存在而不去實(shí)現(xiàn)它的類(lèi)被叫做抽象類(lèi)(abstract class),它用于要?jiǎng)?chuàng)建一個(gè)體現(xiàn)某些基本行為的類(lèi),并為該類(lèi)聲明方法,但不能在該類(lèi)中實(shí)現(xiàn)該類(lèi)的情況。不能創(chuàng)建abstract 類(lèi)的實(shí)例。然而可以創(chuàng)建一個(gè)變量,其類(lèi)型是一個(gè)抽象類(lèi),并讓它指向具體子類(lèi)的一個(gè)實(shí)例。不能有抽象構(gòu)造函數(shù)或抽象靜態(tài)方法。Abstract類(lèi)的子類(lèi)為它們父類(lèi)中的所有抽象方法提供實(shí)現(xiàn),否則它們也是抽象類(lèi)為。取而代之,在子類(lèi)中實(shí)現(xiàn)該方法。知道其行為的其它類(lèi)可以在類(lèi)中實(shí)現(xiàn)這些方法。

  接口(interface)是抽象類(lèi)的變體。在接口中,所有方法都是抽象的。多繼承性可通過(guò)實(shí)現(xiàn)這樣的接口而獲得。接口中的所有方法都是抽象的,沒(méi)有一個(gè)有程序體。接口只可以定義static final成員變量。接口的實(shí)現(xiàn)與子類(lèi)相似,除了該實(shí)現(xiàn)類(lèi)不能從接口定義中繼承行為。當(dāng)類(lèi)實(shí)現(xiàn)特殊接口時(shí),它定義所有這種接口的方法。然后可以在實(shí)現(xiàn)了該接口的類(lèi)的任何對(duì)象上調(diào)用接口的方法。由于有抽象類(lèi),它允許使用接口名作為引用變量的類(lèi)型。引用可以轉(zhuǎn)換到接口類(lèi)型或從接口類(lèi)型轉(zhuǎn)換,instanceof 運(yùn)算符可以用來(lái)決定某對(duì)象的類(lèi)是否實(shí)現(xiàn)了接口。

  2、Java中的異常處理機(jī)制的簡(jiǎn)單原理和應(yīng)用。

  答:當(dāng)Java程序違反了Java的語(yǔ)義規(guī)則時(shí),Java虛擬機(jī)就會(huì)將發(fā)生的錯(cuò)誤表示為一個(gè)異常。違反語(yǔ)義規(guī)則包括2種情況:一種是Java類(lèi)庫(kù)內(nèi)置的語(yǔ)義檢查。例如數(shù)組下標(biāo)越界時(shí)會(huì)引發(fā)IndexOutOfBoundsException,訪問(wèn)null的對(duì)象時(shí)會(huì)引發(fā)NullPointerException。另一種情況是Java允許程序員擴(kuò)展這種語(yǔ)義檢查,程序員可以創(chuàng)建自己的異常,并自由選擇在何時(shí)用throw關(guān)鍵字引發(fā)異常。所有的異常都是Java.lang.Thowable的子類(lèi)。

  3、sleep()和wait()有什么區(qū)別?

  答:sleep()是線程類(lèi)Thread的方法,導(dǎo)致此線程暫停執(zhí)行指定時(shí)間,給執(zhí)行機(jī)會(huì)給其他線程,但是監(jiān)控狀態(tài)依然保持,到時(shí)后會(huì)自動(dòng)恢復(fù),調(diào)用sleep不會(huì)釋放對(duì)象鎖。

  wait()是Object類(lèi)的方法,對(duì)此對(duì)象調(diào)用wait方法導(dǎo)致本線程放棄對(duì)象鎖,進(jìn)入等待此對(duì)象的等待鎖定池,只有針對(duì)此對(duì)象發(fā)出notify方法(或notifyAll)后本線程才進(jìn)入對(duì)象鎖定池準(zhǔn)備獲得對(duì)象鎖進(jìn)入運(yùn)行狀態(tài)。

  4、String是最基本的數(shù)據(jù)類(lèi)型嗎?

  答:String不是基本數(shù)據(jù)類(lèi)型,基本數(shù)據(jù)類(lèi)型包括byte、int、char、long、float、double、boolean和short。 Java.lang.String類(lèi)是final類(lèi)型的,因此不可以繼承這個(gè)類(lèi)、不能修改這個(gè)類(lèi)。

  5、String和StringBuffer的區(qū)別。

  答:Java平臺(tái)提供了兩個(gè)類(lèi):String和StringBuffer,它們可以儲(chǔ)存和操作字符串,即包含多個(gè)字符的字符數(shù)據(jù)。這個(gè)String類(lèi)提供了數(shù)值不可改變的字符串。而這個(gè)StringBuffer類(lèi)提供的字符串進(jìn)行修改。當(dāng)知道字符數(shù)據(jù)要改變的時(shí)候就可以使用StringBuffer。典型地,可以使用StringBuffers來(lái)動(dòng)態(tài)構(gòu)造字符數(shù)據(jù)。

  6、接口是否可繼承接口? 抽象類(lèi)是否可實(shí)現(xiàn)接口? 抽象類(lèi)是否可繼承實(shí)體類(lèi)?

  答:接口可以繼承接口。抽象類(lèi)可以實(shí)現(xiàn)接口。抽象類(lèi)是否可繼承實(shí)體類(lèi),但前提是實(shí)體類(lèi)必須有明確的構(gòu)造函數(shù)。

  7、Java有沒(méi)有g(shù)oto?

  答:goto是Java中的保留關(guān)鍵字,但是現(xiàn)在沒(méi)有在Java中使用。

  8、啟動(dòng)一個(gè)線程是用run()還是start()?

  答:?jiǎn)?dòng)一個(gè)線程是調(diào)用start()方法,使線程所代表的虛擬處理機(jī)處于可運(yùn)行狀態(tài),這意味著它可以由JVM調(diào)度并執(zhí)行。這并不意味著線程就會(huì)立即運(yùn)行。run()方法可以產(chǎn)生必須退出的標(biāo)志來(lái)停止一個(gè)線程。

  9、說(shuō)明一下類(lèi)變量和實(shí)例變量的區(qū)別。

  答:類(lèi)變量是所有對(duì)象共有的,所有的實(shí)例對(duì)象都共用一個(gè)類(lèi)變量,內(nèi)存中只有一處空間存放類(lèi)變量的值。如果其中一個(gè)對(duì)象改變了類(lèi)變量的值,其他對(duì)象得到的就是改變后的結(jié)果。當(dāng)類(lèi)被加載到內(nèi)存時(shí),類(lèi)變量就會(huì)分配相應(yīng)的內(nèi)存空間。

  10、運(yùn)行時(shí)異常與一般異常有何異同?

  答:異常表示程序運(yùn)行過(guò)程中可能出現(xiàn)的非正常狀態(tài),運(yùn)行時(shí)異常表示虛擬機(jī)的通常操作中可能遇到的異常,是一種常見(jiàn)運(yùn)行錯(cuò)誤。Java編譯器要求方法必須聲明拋出可能發(fā)生的非運(yùn)行時(shí)異常,但是并不要求必須聲明拋出未被捕獲的運(yùn)行時(shí)異常。

  java基礎(chǔ)面試題與答案篇2

  1、說(shuō)明實(shí)例方法和類(lèi)方法的區(qū)別?

  答:方法前面有static關(guān)鍵字修飾的為類(lèi)方法,否則為實(shí)例方法。 實(shí)例方法可以調(diào)用該類(lèi)中的其他方法;類(lèi)方法只能調(diào)用其他類(lèi)方法,不能調(diào)用實(shí)例方法;當(dāng)類(lèi)文件加載到內(nèi)存時(shí),實(shí)例方法不會(huì)被分配內(nèi)存空間,只有在對(duì)象創(chuàng)建之后才會(huì)分配。而類(lèi)方法在該類(lèi)被加載到內(nèi)存時(shí)就分配了相應(yīng)的內(nèi)存空間。

  2、什么是哈希表?

  答:哈希表又稱(chēng)散列表,是一種能將關(guān)鍵字映射成存儲(chǔ)地址的記錄存儲(chǔ)技術(shù)。要存儲(chǔ)數(shù)據(jù),先設(shè)計(jì)一種算法(哈希函數(shù)),然后根據(jù)數(shù)據(jù)記錄的關(guān)鍵字計(jì)算出各記錄的哈希碼,這個(gè)哈希碼作為與關(guān)鍵字相關(guān)的記錄數(shù)據(jù)的索引。要取出記錄,只需要根據(jù)哈希函數(shù)重新計(jì)算,得到哈希碼后,便可直接到相應(yīng)位置去存取。

  3、是否可以從一個(gè)static方法內(nèi)部發(fā)出對(duì)非static方法的調(diào)用?

  答:不可以。如果其中包含對(duì)象的method(),不能保證對(duì)象初始化。

  4、在Java轉(zhuǎn)義字符中,“\uxxxx”代表什么?

  答:\uxxxx是Java中的字符編碼方式,其中前綴 \u就表示該字符是unicode字符,xxxx表示1到4位16進(jìn)制數(shù),用這種轉(zhuǎn)義字符形式可以表示unicode字符集中的任意字符。

  5、switch語(yǔ)句中的表達(dá)式可以是什么類(lèi)型數(shù)據(jù)?

  答:表達(dá)式的值可以是byte、short、int和char類(lèi)型的數(shù)據(jù),但不能是float和double類(lèi)型的數(shù)據(jù)。

  6、插入數(shù)據(jù)時(shí),ArrayList、LinkedList、Vector誰(shuí)速度較快?

  答:ArrayList、Vector以數(shù)組方式存儲(chǔ)數(shù)據(jù),插入數(shù)據(jù)時(shí)要進(jìn)行元素移動(dòng)操作,因而插入數(shù)據(jù)慢。LinkedList是一種鏈表結(jié)構(gòu),在插入數(shù)據(jù)時(shí)只需要修改鏈表的前后項(xiàng)指向即可,因此插入速度較快。

  7、final, finally, finalize的區(qū)別。

  答:final—修飾符(關(guān)鍵字)如果一個(gè)類(lèi)被聲明為final,意味著它不能再派生出新的子類(lèi),不能作為父類(lèi)被繼承。因此一個(gè)類(lèi)不能既被聲明為 abstract的,又被聲明為final的。將變量或方法聲明為final,可以保證它們?cè)谑褂弥胁槐桓淖?。被聲明為final的變量必須在聲明時(shí)給定初值,而在以后的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載。

  finally是異常處理時(shí)提供 finally 塊來(lái)執(zhí)行任何清除操作。如果拋出一個(gè)異常,那么相匹配的 catch 子句就會(huì)執(zhí)行,然后控制就會(huì)進(jìn)入 finally 塊(如果有的話)。

  finalize是方法名。Java 技術(shù)允許使用 finalize() 方法在垃圾收集器將對(duì)象從內(nèi)存中清除出去之前做必要的清理工作。這個(gè)方法是由垃圾收集器在確定這個(gè)對(duì)象沒(méi)有被引用時(shí)對(duì)這個(gè)對(duì)象調(diào)用的。它是在 Object 類(lèi)中定義的,因此所有的類(lèi)都繼承了它。子類(lèi)覆蓋 finalize() 方法以整理系統(tǒng)資源或者執(zhí)行其他清理工作。finalize() 方法是在垃圾收集器刪除對(duì)象之前對(duì)這個(gè)對(duì)象調(diào)用的。

  8、說(shuō)出一些常用的類(lèi),包,接口,請(qǐng)各舉5個(gè)。

  答:常用的類(lèi):BufferedReader,BufferedWriter,F(xiàn)ileReader,F(xiàn)ileWirter和String等。

  常用的包:Java.lang ,Java.awt,Java.io,Java.util和Java.sql等。

  常用的接口:Remote,List,Map,Document和NodeList等。

  9、多線程的實(shí)現(xiàn)方法分別是什么?同步的實(shí)現(xiàn)方法分別是什么?

  答:多線程有兩種實(shí)現(xiàn)方法,分別是繼承Thread類(lèi)與實(shí)現(xiàn)Runnable。

  接口同步的實(shí)現(xiàn)方面有兩種,分別是synchronized、wait與notify。

  10、當(dāng)用System.in.read(buffer)從鍵盤(pán)輸入一行n個(gè)字符后,存儲(chǔ)在緩沖區(qū)buffer中的字節(jié)數(shù)是多少?

  答:當(dāng)用System.in.read(buffer)從鍵盤(pán)輸入一行n個(gè)字符后,存儲(chǔ)在緩沖區(qū)buffer中的字節(jié)數(shù)有n+2個(gè),即除輸入的n個(gè)字符后,還存儲(chǔ)了回車(chē)和換行字符。

  java基礎(chǔ)面試題與答案篇3

  1、如何實(shí)現(xiàn)字符串的分割?

  答:第一種方法是采用split()方法,將分割后的內(nèi)容保存在指定的字符串?dāng)?shù)組中;第二種方法是采用StringTokenizer,利用StringTokenizer的nextToken()、hasMoreTokens()等方法進(jìn)行分割。

  2、描述一下JVM加載class文件的原理機(jī)制?

  答:JVM中類(lèi)的裝載是由ClassLoader和它的子類(lèi)來(lái)實(shí)現(xiàn)的,Java ClassLoader 是一個(gè)重要的Java運(yùn)行時(shí)系統(tǒng)組件。它負(fù)責(zé)在運(yùn)行時(shí)查找和裝入類(lèi)文件的類(lèi)。

  3、在什么情況下,finally語(yǔ)句不會(huì)執(zhí)行?

  答:如果在try內(nèi)部執(zhí)行一條System.exit(0)語(yǔ)句終止應(yīng)用程序的執(zhí)行,則finally中的語(yǔ)句不會(huì)被執(zhí)行。

  4、作用域public,private,protected,以及不寫(xiě)時(shí)的區(qū)別。

  答:具體區(qū)別如下:

作用域
同一類(lèi)
同一包
子孫類(lèi)
所有類(lèi)
public
  √  
protected
×
private
×
×
×
默認(rèn)
×
×

  5、說(shuō)出重寫(xiě)和重載的區(qū)別,重寫(xiě)方法是否可以改變返回值的類(lèi)型?

  答:方法的重寫(xiě)Overriding和重載Overloading是Java多態(tài)性的不同表現(xiàn)。重寫(xiě)是父類(lèi)與子類(lèi)之間多態(tài)性的一種表現(xiàn),重載是一個(gè)類(lèi)中多態(tài)性的一種表現(xiàn)。

  如果在子類(lèi)中定義某方法與其父類(lèi)有相同的名稱(chēng)和參數(shù),我們說(shuō)該方法被重寫(xiě)。子類(lèi)的對(duì)象使用 這個(gè)方法時(shí),將調(diào)用子類(lèi)中的定義,對(duì)它而言,父類(lèi)中的定義如同被"屏蔽"了。如果在一個(gè)類(lèi)中定義了多個(gè)同名的方法,它們或有不同的參數(shù)個(gè)數(shù)或有不同的參數(shù)類(lèi)型,則稱(chēng)為方法的重載。

  重載的方法是可以改變返回值的類(lèi)型。

  6、throw和throws有什么區(qū)別?

  答:throw關(guān)鍵字一般用于方法內(nèi)部,用于拋出一個(gè)異常類(lèi)對(duì)象,一旦異常被拋出后,throw語(yǔ)句后的程序代碼將不會(huì)被執(zhí)行。

  throws關(guān)鍵字通常出現(xiàn)在方法聲明中,用來(lái)指定該方法可能拋出的異常。如果可能有多個(gè)異常拋出,可以使用逗號(hào)將它們分隔開(kāi)。

  7、字符串的compareTo方法結(jié)果是什么?

  答:使用compareTo()方法可以比較字符串與字符串之間的大小關(guān)系。如果當(dāng)前字符串小于指定字符串,則返回一個(gè)小于0的數(shù)值;否則返回一個(gè)大于0的數(shù)值;如果兩個(gè)字符串相等,則返回0。

  8、字符串的連接操作有幾種實(shí)現(xiàn)方法?

  答:字符串與字符串的連接操作可以通過(guò)“+”運(yùn)算符和concat()方法來(lái)實(shí)現(xiàn)。另外“+”運(yùn)算符還可以實(shí)現(xiàn)字符串與其他類(lèi)型數(shù)據(jù)之間的連接操作,可以與字符串連接的數(shù)據(jù)類(lèi)型有:int、long、float、double、boolean、char等。

  9、當(dāng)一個(gè)對(duì)象被當(dāng)作參數(shù)傳遞到一個(gè)方法后,此方法可改變這個(gè)對(duì)象的屬性,并可返回變化后的結(jié)果,那么這里到底是值傳遞還是引用傳遞?

  答:是值傳遞,因?yàn)樵贘ava編程語(yǔ)言中只有值傳遞參數(shù)。當(dāng)一個(gè)對(duì)象實(shí)例作為一個(gè)參數(shù)被傳遞到方法中時(shí),參數(shù)的值就是對(duì)該對(duì)象的引用。對(duì)象的內(nèi)容可以在被調(diào)用的方法中改變,但對(duì)象的引用是永遠(yuǎn)不會(huì)改變的。

  1

  0、Class MyClass等價(jià)于 Class MyClass extends Object是否正確?

  答:正確。因?yàn)镺bject類(lèi)是Java中最高層次的類(lèi),是所有類(lèi)的超類(lèi)。所有的類(lèi),都可以說(shuō)是由Object繼承而來(lái),只是我們不需要顯式地指明extends Object。

3151186