JAVA常見(jiàn)面試題及解答(精華)_第1頁(yè)
JAVA常見(jiàn)面試題及解答(精華)_第2頁(yè)
JAVA常見(jiàn)面試題及解答(精華)_第3頁(yè)
JAVA常見(jiàn)面試題及解答(精華)_第4頁(yè)
JAVA常見(jiàn)面試題及解答(精華)_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、JAVA常見(jiàn)面試題及解答(精華)1)transient 和 volatile 是 java 關(guān)鍵字嗎?(瞬聯(lián))如果用transient聲明一個(gè)實(shí)例變量,當(dāng)對(duì)象存儲(chǔ)時(shí),它的值不需要維持。例如:class Ttransient int a; 不需要維持int b; 需要維持這里,如果T類的一個(gè)對(duì)象寫(xiě)入一個(gè)持久的存儲(chǔ)區(qū)域,a的內(nèi)容不被保存,但b的將被保存。 volatile修飾符告訴編譯器被volatile修飾的變量可以被程序的其他部分改變。在多線程程序 中,有時(shí)兩個(gè)或更多的線程共享一個(gè)相同的實(shí)例變量??紤]效率問(wèn)題,每個(gè)線程可以自己保 存該共享變量的私有拷貝。實(shí)際的變量副本在不同的時(shí)候更新,如當(dāng)進(jìn)入

2、synchronized方法 時(shí)。用strictfp修飾類或方法,可以確保浮點(diǎn)運(yùn)算(以及所有切斷)正如早期的Java版本 那樣準(zhǔn)確。切斷只影響某些操作的指數(shù)。當(dāng)一個(gè)類被strictfp修飾,所有的方法自動(dòng)被strictfp 修飾。strictfp的意思是FP-strict,也就是說(shuō)精確浮點(diǎn)的意思。在Java虛擬機(jī)進(jìn)行浮點(diǎn)運(yùn)算時(shí),如 果沒(méi)有指定strictfp關(guān)鍵字時(shí),Java的編譯器以及運(yùn)行環(huán)境在對(duì)浮點(diǎn)運(yùn)算的表達(dá)式是采取一 種近似于我行我素的行為來(lái)完成這些操作,以致于得到的結(jié)果往往無(wú)法令你滿意。而一旦使 用了 strictfp來(lái)聲明一個(gè)類、接口或者方法時(shí),那么所聲明的范圍內(nèi)Java的編譯器以及

3、運(yùn)行 環(huán)境會(huì)完全依照浮點(diǎn)規(guī)范IEEE-754來(lái)執(zhí)行。因此如果你想讓你的浮點(diǎn)運(yùn)算更加精確,而且 不會(huì)因?yàn)椴煌挠布脚_(tái)所執(zhí)行的結(jié)果不一致的話,那就請(qǐng)用關(guān)鍵字strictfp。你可以將一個(gè)類、接口以及方法聲明為strictfp,但是不允許對(duì)接口中的方法以及構(gòu)造函數(shù) 聲明strictfp關(guān)鍵字,例如下面的代碼:strictfp interface A public strictfp class FpDemo1 strictfp void f() 2.錯(cuò)誤的使用方法interface A strictfp void f();public class FpDemo2 strictfp FpDemo2()

4、 一旦使用了關(guān)鍵字strictfp來(lái)聲明某個(gè)類、接口或者方法時(shí),那么在這個(gè)關(guān)鍵字所聲明的范 圍內(nèi)所有浮點(diǎn)運(yùn)算都是精確的,符合IEEE-754規(guī)范的。例如一個(gè)類被聲明為strictfp,那么該類中所有的方法都是strictfp的。2)抽象類和接口有什么區(qū)別?(瞬聯(lián))abstract class在Java語(yǔ)言中表示的是一種繼承關(guān)系,一個(gè)類只能使用一次繼承關(guān)系。但 是,一個(gè)類卻可以實(shí)現(xiàn)多個(gè)interface o在abstract class中可以有自己的數(shù)據(jù)成員,也可以有非abstarct的成員方法,而在interface 中,只能夠有靜態(tài)的不能被修改的數(shù)據(jù)成員(也就是必須是static final

5、的,不過(guò)在interface 中一般不定義數(shù)據(jù)成員),所有的成員方法都是abstract的。abstract class和interface所反映出的設(shè)計(jì)理念不同。其實(shí)abstract class表示的是is-a關(guān)系, interface表示的是like-a關(guān)系。實(shí)現(xiàn)抽象類和接口的類必須實(shí)現(xiàn)其中的所有方法。抽象類中可以有非抽象方法。接口中則 不能有實(shí)現(xiàn)方法。接口中定義的變量默認(rèn)是public static final型,且必須給其初值,所以實(shí)現(xiàn)類中不能重新 定義,也不能改變其值。抽象類中的變量默認(rèn)是friendly型,其值可以在子類中重新定義,也可以重新賦值。接口中的方法默認(rèn)都是public,

6、abstract類型的。能說(shuō)一下java的反射(reflection)機(jī)制嗎?(瞬聯(lián))開(kāi)放性和原因連接(causally-connected)是反射系統(tǒng)的兩大基本要素在java中怎樣實(shí)現(xiàn)多線程?(瞬聯(lián))extends Threadimplement Runnable方法一:繼承Thread類,覆蓋方法run(),我們?cè)趧?chuàng)建的Thread類的子類中重寫(xiě)run(), 加入線程所要執(zhí)行的代碼即可。下面是一個(gè)例子:public class MyThread extends Threadint count= 1, number;public MyThread(int num)number = num;S

7、ystem.out.println(創(chuàng)建線程+ number);public void run() while(true) System.out.println(線程+ number + :計(jì)數(shù)+ count);if(+count= 6) return;public static void main(String args)for(int i = 0;i 5; i+) new MyThread(i+1).start();這種方法簡(jiǎn)單明了,符合大家的習(xí)慣,但是,它也有一個(gè)很大的缺點(diǎn),那就是如果我們 的類已經(jīng)從一個(gè)類繼承(如小程序必須繼承自Applet類),則無(wú)法再繼承Thread類,這 時(shí)如果我

8、們又不想建立一個(gè)新的類,應(yīng)該怎么辦呢?我們不妨來(lái)探索一種新的方法:我們不創(chuàng)建Thread類的子類,而是直接使用它,那么 我們只能將我們的方法作為參數(shù)傳遞給Thread類的實(shí)例,有點(diǎn)類似回調(diào)函數(shù)。但是Java沒(méi)有指針,我們只能傳遞一個(gè)包含這個(gè)方法的類的實(shí)例。那么如何限制這個(gè)類必須包含這一方法呢?當(dāng)然是使用接口!(雖然抽象類也可滿足, 但是需要繼承,而我們之所以要采用這種新方法,不就是為了避免繼承帶來(lái)的限制嗎?)Java提供了接口 java.lang.Runnable來(lái)支持這種方法。方法二:實(shí)現(xiàn)Runnable接口Runnable接口只有一個(gè)方法run(),我們聲明自己的類實(shí)現(xiàn)Runnable接口

9、并提供這一方 法,將我們的線程代碼寫(xiě)入其中,就完成了這一部分的任務(wù)。但是Runnable接口并沒(méi)有任 何對(duì)線程的支持,我們還必須創(chuàng)建Thread類的實(shí)例,這一點(diǎn)通過(guò)Thread類的構(gòu)造函數(shù)public Thread(Runnable target);來(lái)實(shí)現(xiàn)。下面是一個(gè)例子:public class MyThread implements Runnableint count= 1, number;public MyThread(int num)number = num;System.out.println(創(chuàng)建線程+ number);public void run()while(true)Sys

10、tem.out.println(線程+ number + :計(jì)數(shù)+ count);if(+count= 6) return;public static void main(String args)for(int i = 0; i 5;i+) new Thread(new MyThread(i+1).start();嚴(yán)格地說(shuō),創(chuàng)建Thread子類的實(shí)例也是可行的,但是必須注意的是,該子類必須沒(méi)有 覆蓋Thread類的run方法,否則該線程執(zhí)行的將是子類的run方法,而不是我們用以實(shí) 現(xiàn)Runnable接口的類的run方法,對(duì)此大家不妨試驗(yàn)一下。使用Runnable接口來(lái)實(shí)現(xiàn)多線程使得我們能夠在一

11、個(gè)類中包容所有的代碼,有利于封 裝,它的缺點(diǎn)在于,我們只能使用一套代碼,若想創(chuàng)建多個(gè)線程并使各個(gè)線程執(zhí)行不同的代 碼,則仍必須額外創(chuàng)建類,如果這樣的話,在大多數(shù)情況下也許還不如直接用多個(gè)類分別繼承Thread來(lái)得緊湊。綜上所述,兩種方法各有千秋,大家可以靈活運(yùn)用。下面讓我們一起來(lái)研究一下多線程使用中的一些問(wèn)題。三、線程的四種狀態(tài)新?tīng)顟B(tài):線程已被創(chuàng)建但尚未執(zhí)行(start()尚未被調(diào)用)??蓤?zhí)行狀態(tài):線程可以執(zhí)行,雖然不一定正在執(zhí)行。CPU時(shí)間隨時(shí)可能被分配給該 線程,從而使得它執(zhí)行。死亡狀態(tài):正常情況下run()返回使得線程死亡。調(diào)用stop()或destroy()亦有同樣 效果,但是不被推薦

12、,前者會(huì)產(chǎn)生異常,后者是強(qiáng)制終止,不會(huì)釋放鎖。阻塞狀態(tài):線程不會(huì)被分配CPU時(shí)間,無(wú)法執(zhí)行。四、線程的優(yōu)先級(jí)線程的優(yōu)先級(jí)代表該線程的重要程度,當(dāng)有多個(gè)線程同時(shí)處于可執(zhí)行狀態(tài)并等待獲得 CPU時(shí)間時(shí),線程調(diào)度系統(tǒng)根據(jù)各個(gè)線程的優(yōu)先級(jí)來(lái)決定給誰(shuí)分配CPU時(shí)間,優(yōu)先級(jí)高 的線程有更大的機(jī)會(huì)獲得CPU時(shí)間,優(yōu)先級(jí)低的線程也不是沒(méi)有機(jī)會(huì),只是機(jī)會(huì)要小一些 罷了。你可以調(diào)用Thread類的方法getPriority()和setPriority()來(lái)存取線程的優(yōu)先級(jí),線程 的優(yōu)先級(jí)界于 1(MIN_PRIORITY)和 10(MAX_PRIORITY)之間, 缺省是 5(NORM_PRIORITY)。5)你

13、用過(guò)哪種設(shè)計(jì)模式?(瞬聯(lián),IBM,aspenTech)設(shè)計(jì):design模式:pattern框架:framework創(chuàng)建模式,結(jié)構(gòu)模式和行為模式GoF設(shè)計(jì)模式A.創(chuàng)建模式設(shè)計(jì)模式之Factory(工廠模式)使用工廠模式就象使用new 一樣頻繁.2002/10/9更新設(shè)計(jì)模式之Prototype(原型模式)用原型實(shí)例指定創(chuàng)建對(duì)象的種類,并且通過(guò)拷貝這些原型創(chuàng)建新的對(duì)象。設(shè)計(jì)模式之Builder汽車由車輪方向盤(pán)發(fā)動(dòng)機(jī)很多部件組成,同時(shí),將這些部件組裝成汽車也是一件復(fù)雜的工 作,Builder模式就是將這兩種情況分開(kāi)進(jìn)行。設(shè)計(jì)模式之Singleton(單態(tài)模式)保證一個(gè)類只有一個(gè)實(shí)例,并提供一個(gè)訪問(wèn)

14、它的全局訪問(wèn)點(diǎn)2002/10/9更新結(jié)構(gòu)模式設(shè)計(jì)模式之Facade可擴(kuò)展的使用JDBC針對(duì)不同的數(shù)據(jù)庫(kù)編程,Facade提供了一種靈活的實(shí)現(xiàn).設(shè)計(jì)模式之Proxy以Jive為例,剖析代理模式在用戶級(jí)別授權(quán)機(jī)制上的應(yīng)用設(shè)計(jì)模式之Adapter使用類再生的兩個(gè)方式:組合(new)和繼承(extends),這個(gè)已經(jīng)在thinking in java中提到過(guò).設(shè)計(jì)模式之Composite就是將類用樹(shù)形結(jié)構(gòu)組合成一個(gè)單位.你向別人介紹你是某單位,你是單位中的一個(gè)元素, 別人和你做買(mǎi)賣(mài),相當(dāng)于和單位做買(mǎi)賣(mài)。文章中還對(duì)Jive再進(jìn)行了剖析。設(shè)計(jì)模式之DecoratorDecorator是個(gè)油漆工,給你的東東

15、的外表刷上美麗的顏色.設(shè)計(jì)模式之Bridge將牛郎織女”分開(kāi)(本應(yīng)在一起,分開(kāi)他們,形成兩個(gè)接口),在他們之間搭建一個(gè)橋(動(dòng)態(tài)的結(jié)合)設(shè)計(jì)模式之Flyweight提供Java運(yùn)行性能,降低小而大量重復(fù)的類的開(kāi)銷.行為模式設(shè)計(jì)模式之Template實(shí)際上向你介紹了為什么要使用Java抽象類,該模式原理簡(jiǎn)單,使用很普遍.設(shè)計(jì)模式之Memento很簡(jiǎn)單一個(gè)模式,就是在內(nèi)存中保留原來(lái)數(shù)據(jù)的拷貝.設(shè)計(jì)模式之Observer介紹如何使用Java API提供的現(xiàn)成Observer設(shè)計(jì)模式之 Chain of Responsibility各司其職的類串成一串,好象擊鼓傳花,當(dāng)然如果自己能完成,就不要推委給下一

16、個(gè).設(shè)計(jì)模式之 Command什么是將行為封裝,Command是最好的說(shuō)明.設(shè)計(jì)模式之State狀態(tài)是編程中經(jīng)常碰到的實(shí)例,將狀態(tài)對(duì)象化,設(shè)立狀態(tài)變換器,便可在狀態(tài)中輕松切換.設(shè)計(jì)模式之Strategy不同算法各自封裝,用戶端可隨意挑選需要的算法.設(shè)計(jì)模式之MediatorMediator很象十字路口的紅綠燈,每個(gè)車輛只需和紅綠燈交互就可以.設(shè)計(jì)模式之Interpreter主要用來(lái)對(duì)語(yǔ)言的分析,應(yīng)用機(jī)會(huì)不多.設(shè)計(jì)模式之Visitor訪問(wèn)者在進(jìn)行訪問(wèn)時(shí),完成一系列實(shí)質(zhì)性操作,而且還可以擴(kuò)展.設(shè)計(jì)模式之Iterator這個(gè)模式已經(jīng)被整合入Java的Collection.在大多數(shù)場(chǎng)合下無(wú)需自己制造一

17、個(gè)Iterator,只要將對(duì)象裝入Collection中,直接使用Iterator進(jìn)行對(duì)象遍歷。6)請(qǐng)說(shuō)一下 MVC 架構(gòu)(瞬聯(lián),IBM,aspenTech)Model:模型層View視圖層Controller:控制層MVC (Modal View Controler)本來(lái)是存在于Desktop程序中的,M是指數(shù)據(jù)模型,V是指用 戶界面,C則是控制器。使用MVC的目的是將M和V的實(shí)現(xiàn)代碼分離,從而使同一個(gè)程 序可以使用不同的表現(xiàn)形式。比如一批統(tǒng)計(jì)數(shù)據(jù)你可以分別用柱狀圖、餅圖來(lái)表示。C存在 的目的則是確保M和V的同步,一旦M改變,V應(yīng)該同步更新。模型一視圖一控制器(MVC)是Xerox PARC

18、在八十年代為編程語(yǔ)言Smalltalk-80發(fā)明的 一種軟件設(shè)計(jì)模式,至今已被廣泛使用。最近幾年被推薦為Sun公司J2EE平臺(tái)的設(shè)計(jì)模式, 并且受到越來(lái)越多的使用ColdFusion和PHP的開(kāi)發(fā)者的歡迎。模型一視圖一控制器模式 是一個(gè)有用的工具箱,它有很多好處,但也有一些缺點(diǎn)。MVC如何工作MVC是一個(gè)設(shè)計(jì)模式,它強(qiáng)制性的使應(yīng)用程序的輸入、處理和輸出分開(kāi)。使用MVC應(yīng)用 程序被分成三個(gè)核心部件:模型、視圖、控制器。它們各自處理自己的任務(wù)。視圖視圖是用戶看到并與之交互的界面。對(duì)老式的Web應(yīng)用程序來(lái)說(shuō),視圖就是由HTML元素 組成的界面,在新式的Web應(yīng)用程序中,HTML依舊在視圖中扮演著重要

19、的角色,但一些 新的技術(shù)已層出不窮,它們包括Macromedia Flash和象XHTML,XML/XSL,WML等一些 標(biāo)識(shí)語(yǔ)言和Web services.如何處理應(yīng)用程序的界面變得越來(lái)越有挑戰(zhàn)性。MVC一個(gè)大的好處是它能為你的應(yīng)用程序 處理很多不同的視圖。在視圖中其實(shí)沒(méi)有真正的處理發(fā)生,不管這些數(shù)據(jù)是聯(lián)機(jī)存儲(chǔ)的還是 一個(gè)雇員列表,作為視圖來(lái)講,它只是作為一種輸出數(shù)據(jù)并允許用戶操縱的方式。模型模型表示企業(yè)數(shù)據(jù)和業(yè)務(wù)規(guī)則。在MVC的三個(gè)部件中,模型擁有最多的處理任務(wù)。例如它 可能用象EJBs和ColdFusion Components這樣的構(gòu)件對(duì)象來(lái)處理數(shù)據(jù)庫(kù)。被模型返回的數(shù)據(jù) 是中立的,就是

20、說(shuō)模型與數(shù)據(jù)格式無(wú)關(guān),這樣一個(gè)模型能為多個(gè)視圖提供數(shù)據(jù)。由于應(yīng)用于 模型的代碼只需寫(xiě)一次就可以被多個(gè)視圖重用,所以減少了代碼的重復(fù)性??刂破骺刂破鹘邮苡脩舻妮斎氩⒄{(diào)用模型和視圖去完成用戶的需求。所以當(dāng)單擊Web頁(yè)面中的超 鏈接和發(fā)送HTML表單時(shí),控制器本身不輸出任何東西和做任何處理。它只是接收請(qǐng)求并 決定調(diào)用哪個(gè)模型構(gòu)件去處理請(qǐng)求,然后用確定用哪個(gè)視圖來(lái)顯示模型處理返回的數(shù)據(jù)?,F(xiàn)在我們總結(jié)MVC的處理過(guò)程,首先控制器接收用戶的請(qǐng)求,并決定應(yīng)該調(diào)用哪個(gè)模型來(lái) 進(jìn)行處理,然后模型用業(yè)務(wù)邏輯來(lái)處理用戶的請(qǐng)求并返回?cái)?shù)據(jù),最后控制器用相應(yīng)的視圖格 式化模型返回的數(shù)據(jù),并通過(guò)表示層呈現(xiàn)給用戶。為什么要使

21、用MVC大部分Web應(yīng)用程序都是用像ASP,PHP,或者CFML這樣的過(guò)程化語(yǔ)言來(lái)創(chuàng)建的。它們 將像數(shù)據(jù)庫(kù)查詢語(yǔ)句這樣的數(shù)據(jù)層代碼和像HTML這樣的表示層代碼混在一起。經(jīng)驗(yàn)比較 豐富的開(kāi)發(fā)者會(huì)將數(shù)據(jù)從表示層分離開(kāi)來(lái),但這通常不是很容易做到的,它需要精心的計(jì)劃 和不斷的嘗試。MVC從根本上強(qiáng)制性的將它們分開(kāi)。盡管構(gòu)造MVC應(yīng)用程序需要一些額 外的工作,但是它給我們帶來(lái)的好處是無(wú)庸質(zhì)疑的。首先,最重要的一點(diǎn)是多個(gè)視圖能共享一個(gè)模型,正如我所提及的,現(xiàn)在需要用越來(lái)越多的 方式來(lái)訪問(wèn)你的應(yīng)用程序。對(duì)此,其中一個(gè)解決之道是使用MVC,無(wú)論你的用戶想要Flash 界面或是WAP界面;用一個(gè)模型就能處理它們

22、。由于你已經(jīng)將數(shù)據(jù)和業(yè)務(wù)規(guī)則從表示層 分開(kāi),所以你可以最大化的重用你的代碼了。由于模型返回的數(shù)據(jù)沒(méi)有進(jìn)行格式化,所以同樣的構(gòu)件能被不同界面使用。例如,很多數(shù)據(jù) 可能用HTML來(lái)表示,但是它們也有可能要用Macromedia Flash和WAP來(lái)表示。模型也有 狀態(tài)管理和數(shù)據(jù)持久性處理的功能,例如,基于會(huì)話的購(gòu)物車和電子商務(wù)過(guò)程也能被Flash 網(wǎng)站或者無(wú)線聯(lián)網(wǎng)的應(yīng)用程序所重用。因?yàn)槟P褪亲园?,并且與控制器和視圖相分離,所以很容易改變你的應(yīng)用程序的數(shù)據(jù)層 和業(yè)務(wù)規(guī)則。如果你想把你的數(shù)據(jù)庫(kù)從MySQL移植到Oracle,或者改變你的基于RDBMS 數(shù)據(jù)源到LDAP,只需改變你的模型即可。一旦你

23、正確的實(shí)現(xiàn)了模型,不管你的數(shù)據(jù)來(lái)自數(shù) 據(jù)庫(kù)或是LDAP服務(wù)器,視圖將會(huì)正確的顯示它們。由于運(yùn)用MVC的應(yīng)用程序的三個(gè)部件 是相互對(duì)立,改變其中一個(gè)不會(huì)影響其它兩個(gè),所以依據(jù)這種設(shè)計(jì)思想你能構(gòu)造良好的松偶 合的構(gòu)件。對(duì)我來(lái)說(shuō),控制器的也提供了一個(gè)好處,就是可以使用控制器來(lái)聯(lián)接不同的模型和視圖去完 成用戶的需求,這樣控制器可以為構(gòu)造應(yīng)用程序提供強(qiáng)有力的手段。給定一些可重用的模型 和視圖,控制器可以根據(jù)用戶的需求選擇模型進(jìn)行處理,然后選擇視圖將處理結(jié)果顯示給用 戶。MVC的缺點(diǎn)MVC的缺點(diǎn)是由于它沒(méi)有明確的定義,所以完全理解MVC并不是很容易。使用MVC需 要精心的計(jì)劃,由于它的內(nèi)部原理比較復(fù)雜,所

24、以需要花費(fèi)一些時(shí)間去思考。你將不得不花費(fèi)相當(dāng)可觀的時(shí)間去考慮如何將MVC運(yùn)用到你的應(yīng)用程序,同時(shí)由于模型和 視圖要嚴(yán)格的分離,這樣也給調(diào)試應(yīng)用程序到來(lái)了一定的困難。每個(gè)構(gòu)件在使用之前都需要 經(jīng)過(guò)徹底的測(cè)試。一旦你的構(gòu)件經(jīng)過(guò)了測(cè)試,你就可以毫無(wú)顧忌的重用它們了。根據(jù)我個(gè)人經(jīng)驗(yàn),由于我們將一個(gè)應(yīng)用程序分成了三個(gè)部件,所以使用MVC同時(shí)也意味著 你將要管理比以前更多的文件,這一點(diǎn)是顯而易見(jiàn)的。這樣好像我們的工作量增加了,但是 請(qǐng)記住這比起它所能帶給我們的好處是不值一提。MVC并不適合小型甚至中等規(guī)模的應(yīng)用程序,花費(fèi)大量時(shí)間將MVC應(yīng)用到規(guī)模并不是很 大的應(yīng)用程序通常會(huì)得不償失。MVC是一條創(chuàng)建軟件的

25、好途徑MVC設(shè)計(jì)模式是一個(gè)很好創(chuàng)建軟件的途徑,它所提倡的一些原則,像內(nèi)容和顯示互相分離 可能比較好理解。但是如果你要隔離模型、視圖和控制器的構(gòu)件,你可能需要重新思考你的 應(yīng)用程序,尤其是應(yīng)用程序的構(gòu)架方面。如果你肯接受MVC,并且有能力應(yīng)付它所帶來(lái)的 額外的工作和復(fù)雜性,MVC將會(huì)使你的軟件在健壯性,代碼重用和結(jié)構(gòu)方面上一個(gè)新的臺(tái) 階。7)如果類a繼承類b,實(shí)現(xiàn)接口 c,而類b和接口 c中定義了同名變量,請(qǐng)問(wèn)會(huì)出現(xiàn)什么問(wèn) 題?(瞬聯(lián))interface Aint x = 0;class Bint x =1;class C extends B implements Apublic void pX

26、()System.out.println(x);public static void main(String args) new C().pX();答案:錯(cuò)誤。在編譯時(shí)會(huì)發(fā)生錯(cuò)賞錯(cuò)誤描述不同的JVM有不同的信息,意思就是未明確的 x調(diào)用,兩個(gè)x都匹配(就象在同時(shí)import java.util和java.sql兩個(gè)包時(shí)直接聲明Date 一樣)。 對(duì)于父類的變量,可以用super.x來(lái)明確(輸出的是1),而接口的屬性默認(rèn)隱含為public static final.所以可以通過(guò)A.x來(lái)明確(輸出的是0)。下面的代碼運(yùn)行時(shí)會(huì)不會(huì)報(bào)錯(cuò)interface Playablevoid play();int

27、erface Bounceablevoid play();interface Rollable extends Playable, BounceableBall ball = new Ball(PingPang);class Ball implements Rollableprivate String name;public String getName()return name;public Ball(String name) = name;public void play()ball = new Ball(Football);System.out.println(ball.getName(

28、);答案:錯(cuò)。interface Rollable extends Playable, Bounceable沒(méi)有問(wèn)題。interface 可繼承多個(gè) interfaces,所以這里沒(méi)錯(cuò)。問(wèn)題出在 interface Rollable 里的Ball ball = new Ball(PingPang);。 任何在interface里聲明的interface variable (接口變量,也可稱成員變量),默認(rèn)為public static final。也就是說(shuō)Ball ball = new Ball(PingPang);實(shí)際上是public static final Ball ball = new

29、Ball(PingPang);。在 Ball 類的 Play()方法中,ball = new Ball(Football);改變了 ball 的 reference,而這里的 ball 來(lái)自 Rollable interface,Rollable interface 里的 ball 是 public static final 的,final 的 object 是不能被改變 reference 的。因此編譯器將在ball = new Ball(Football); 這里顯示有錯(cuò)。 請(qǐng)說(shuō)一下java中為什么要引入內(nèi)部類?還有匿名內(nèi)部類?(瞬聯(lián),IBM)請(qǐng)說(shuō)一下final, finally和fina

30、lize的區(qū)別?(瞬聯(lián))final用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。finally是異常處理語(yǔ)句結(jié)構(gòu)的一部分,表示總是執(zhí)行。finalize是Object類的一個(gè)方法,在垃圾收集器執(zhí)行的時(shí)候會(huì)調(diào)用被回收對(duì)象的此方法,可 以覆蓋此方法提供垃圾收集時(shí)的其他資源回收,例如關(guān)閉文件等。請(qǐng)說(shuō)一下HTTP請(qǐng)求的基本過(guò)程(IBM)java中存在內(nèi)存泄漏問(wèn)題嗎?請(qǐng)舉例說(shuō)明? (IBM)會(huì)int i,i2; return (i-i2); /when i為足夠大的正數(shù),i2為足夠大的負(fù)數(shù)。結(jié)果會(huì)造成溢 位,導(dǎo)致錯(cuò)誤。請(qǐng)說(shuō)一下java中的內(nèi)存回收機(jī)制所采用的算法(IBM,瞬聯(lián))雖

31、然垃圾回收關(guān)心著大部分的問(wèn)題,包括內(nèi)存管理,使得程序員的任務(wù)顯得更加輕松,但是 程序員還是可能犯些錯(cuò)誤導(dǎo)致內(nèi)存泄漏問(wèn)題GC(垃圾回收)通過(guò)遞歸對(duì)所有從“根”對(duì)象(堆 棧中的對(duì)象,靜態(tài)數(shù)據(jù)成員,JNI句柄等等)繼承下來(lái)的引用進(jìn)行工作,然后標(biāo)記所有可以訪 問(wèn)的活動(dòng)著的對(duì)象。而這些對(duì)象變成了程序唯一能夠操縱的對(duì)象,其他的對(duì)象都被釋放了。 因?yàn)镚C使得程序不能夠訪問(wèn)那些被釋放的對(duì)象,所以這樣做是安全的。請(qǐng)說(shuō)一下System.gc()函數(shù)的作用。什么時(shí)候可以調(diào)用垃圾回收器?(瞬聯(lián)) 垃圾回收函數(shù),手動(dòng)調(diào)用的.當(dāng)一個(gè)對(duì)象停止被活動(dòng)聲明所引用,它就變成了垃圾(garbage)可以被回收重新使用你做過(guò)的項(xiàng)目中

32、采用了什么安全認(rèn)證機(jī)制? (IBM)Math.round()什么作用?Math.Round(3.44, 1) = 3.4Math.Round(3.45, 1) = 3.4Math.Round(3.46, 1) = 3.5Math.Round(3.54, 1) = 3.5Math.Round(3.55, 1) = 3.6Math.Round(3.56, 1) = 3.6Math.Round(3.64, 1) = 3.6Math.Round(3.65, 1) = 3.6Math.Round(3.66, 1) = 3.7Math.Round(3.74, 1) = 3.7Math.Round(3.75

33、, 1) = 3.8Math.Round(3.76, 1) = 3.8這種舍入方法叫做銀行家舍入(BankersRound),這就是已經(jīng)規(guī)定下來(lái)的標(biāo)準(zhǔn)、Round的標(biāo) 準(zhǔn)、世界的標(biāo)準(zhǔn)。Round 四舍五入16、設(shè)計(jì)4個(gè)線程,其中兩個(gè)線程每次對(duì)j增加1,另外兩個(gè)線程對(duì)j每次減少1。寫(xiě)出程 序。以下程序使用內(nèi)部類實(shí)現(xiàn)線程,對(duì)j增減的時(shí)候沒(méi)有考慮順序問(wèn)題。package java_example150;public class TestThread3(private int j;public static void main(String args)(TestThread3 t = new Test

34、Thread3();Inc inc = t.new Inc();Dec dec = t.new Dec();for(int i=0;i2;i+)Thread ts = new Thread(inc);ts.start();ts= new Thread(dec);ts.start();private synchronized void inc()j+;System.out.println(Thread.currentThread().getName()+-inc:+j);private synchronized void dec()j-;System.out.println(Thread.cur

35、rentThread().getName()+-dec:+j);class Inc implements Runnable(public void run()(for(int i=0;i10;i+)inc();class Dec implements Runnablepublic void run()for(int i=0;i10;i+)dec();CORBA是什么?用途是什么?答:CORBA 標(biāo)準(zhǔn)是公共對(duì)象請(qǐng)求代理結(jié)構(gòu)(Common Object Request Broker Architecture),由 對(duì)象管理組織(Object Management Group,縮寫(xiě)為OMG)標(biāo)準(zhǔn)化。

36、它的組成是接口定義語(yǔ)言 (IDL),語(yǔ)言綁定(binding:也譯為聯(lián)編)和允許應(yīng)用程序間互操作的協(xié)議。其目的為:用不同的程序設(shè)計(jì)語(yǔ)言書(shū)寫(xiě)在不同的進(jìn)程中運(yùn)行為不同的操作系統(tǒng)開(kāi)發(fā)JAVA代碼查錯(cuò)1.abstract class Nameprivate String name;public abstract boolean isStupidName(String name) 答案:錯(cuò)。abstract method必須以分號(hào)結(jié)尾,且不帶花括號(hào)。2.public class Somethingvoid doSomething ()private String s =;int l = s.length

37、();答案:錯(cuò)。局部變量前不能放置任何訪問(wèn)修飾符(private,public,和protected)o final可以 用來(lái)修飾局部變量(final如同abstract和strictfp,都是非訪問(wèn)修飾符,strictfp只能修飾class和method而非 variable) o3.abstract class Somethingprivate abstract String doSomething ();答案:錯(cuò)。abstract 的 methods 不能以 private修飾。abstract 的 methods 就是讓子類implement(實(shí) 現(xiàn))具體細(xì)節(jié)的,怎么可以用private把a(bǔ)bstractmethod封鎖起來(lái)呢?(同理,abstract method前 不能加final) o4.public class Somethingpublic int addOne(

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論