版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2020年Java筆試題+答案
Java筆試題答:Je22是Sun公司提出的多層(multi-diered),分布式(distributed),基于組件(component-base)的企業(yè)級(jí)應(yīng)用模型(enterprieseapplicationmodel).在這樣的ー個(gè)應(yīng)用系統(tǒng)中,可按照功能劃分為不同的組件,這些組件又可在不同計(jì)算機(jī)上,并且處于相應(yīng)的層次(tier)中。所屬層次包括客戶(hù)層(clietntier)組件,web層和組件,Business層和組件,企業(yè)信息系統(tǒng)(EIS)層。9答:J2EE本身是ー個(gè)標(biāo)準(zhǔn),一個(gè)為企業(yè)分布式應(yīng)
用的開(kāi)發(fā)提供的標(biāo)準(zhǔn)平臺(tái)。J2EE也是ー個(gè)框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技術(shù)。?如何實(shí)現(xiàn)?答:MVC是Model—View—Controller的簡(jiǎn)寫(xiě)。"Model"代表的是應(yīng)用的業(yè)務(wù)邏輯(通過(guò)JavaBean,EJB組件實(shí)現(xiàn)),"View"是應(yīng)用的表示面(由JSP頁(yè)面產(chǎn)生),"Controller"是提供應(yīng)用的處理過(guò)程控制(一般是ー個(gè)Servlet),通過(guò)這種設(shè)計(jì)模型把應(yīng)用邏輯,處理過(guò)程和顯示邏輯分成不同的組件實(shí)現(xiàn)。這些組件可以進(jìn)行交互和重用。(如STRUTS架構(gòu))答:Struts是采用JavaServlet/JavaServerPages技術(shù),開(kāi)發(fā)Web應(yīng)用程序的開(kāi)放源碼的
framework〇采用Struts能開(kāi)發(fā)出基于MVC(Model-View-Controller)設(shè)計(jì)模式的應(yīng)用構(gòu)架〇Struts有如下的主要功能:servlet,能將用戶(hù)的請(qǐng)求發(fā)送到相應(yīng)的Action對(duì)象。,并且在controllerservlet中提供關(guān)聯(lián)支持,幫助開(kāi)發(fā)員創(chuàng)建交互式表單應(yīng)用。:XML處理、通過(guò)JavareflectionAPIs自動(dòng)處理JavaBeans屬性、國(guó)際化的提示和消息。SERVICE名詞解釋。JSWDL開(kāi)發(fā)包的介紹。JAXP、JAXM的解釋。SOAP、UDDI,WSDL解釋。答:WebServiceWebService是基于網(wǎng)絡(luò)的、分布式的模塊化組件,它執(zhí)行特定的任務(wù),遵守具體
的技術(shù)規(guī)范,這些規(guī)范使得WebService能與其它兼容的組件進(jìn)行互操作。JAXP(JavaAPIforXMLParsing)定義了在Java中使用DOM,SAX,XSLT的通用的接口。這樣在你的程序中你只要使用這些通用的接口,當(dāng)你需要改變具體的實(shí)現(xiàn)時(shí)候也不需要修改代碼。JAXM(JavaAPIforXMLMessaging)是為SOAP通信提供訪問(wèn)方法和傳輸機(jī)制的APIoWSDL是ー種XML格式,用于將網(wǎng)絡(luò)服務(wù)描述為ー組端點(diǎn),這些端點(diǎn)對(duì)包含面向文檔信息或面向過(guò)程信息的消息進(jìn)行操作。這種格式首先對(duì)操作和消息進(jìn)行抽象描述,然后將其綁定到具體的網(wǎng)絡(luò)協(xié)議和消息格式上以定義端點(diǎn)。相關(guān)的具體端點(diǎn)即組合成為抽象端點(diǎn)(服務(wù))。SOAP即簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議(SimpleObject
AccessProtocol),它是用于交換XML編碼信息的輕量級(jí)協(xié)議。UDDI的目的是為電子商務(wù)建立標(biāo)準(zhǔn);UDDI是ー套基于Web的、分布式的、為WebService提供的、信息注冊(cè)中心的實(shí)現(xiàn)標(biāo)準(zhǔn)規(guī)范,同時(shí)也包含ー組使企業(yè)能將自身提供的WebService注冊(cè),以使別的企業(yè)可以發(fā)現(xiàn)的訪問(wèn)協(xié)議的實(shí)現(xiàn)標(biāo)準(zhǔn)。答:有如下八個(gè)方面的不同:⑴硬件環(huán)境不同:C/S一般建立在專(zhuān)用的網(wǎng)絡(luò)上,小范圍里的網(wǎng)絡(luò)環(huán)境,局域網(wǎng)之間再通過(guò)專(zhuān)門(mén)服務(wù)器提供連接和數(shù)據(jù)交換服務(wù).
B/S建立在廣域網(wǎng)之上的,不必是專(zhuān)門(mén)的網(wǎng)絡(luò)硬件環(huán)境,例與電話上網(wǎng),租用設(shè)備.信息自己管理.有比C/S更強(qiáng)的適應(yīng)范圍,一般只要有操作系統(tǒng)和瀏覽器就行⑵對(duì)安全要求不同C/S一般面向相對(duì)固定的用戶(hù)群,對(duì)信息安全的控制能力很強(qiáng).一般高度機(jī)密的信息系統(tǒng)采用C/S結(jié)構(gòu)適宜.可以通過(guò)B/S發(fā)布部分可公開(kāi)信息.B/S建立在廣域網(wǎng)之上,對(duì)安全的控制能カ相對(duì)弱,可能面向不可知的用戶(hù)。(3)對(duì)程序架構(gòu)不同C/S程序可以更加注重流程,可以對(duì)權(quán)限多層次校驗(yàn),對(duì)系統(tǒng)運(yùn)行速度可以較少考慮.B/S對(duì)安全以及訪問(wèn)速度的多重的考慮,建立在需要更加優(yōu)化的基礎(chǔ)之上.比C/S有更高
的要求B/S結(jié)構(gòu)的程序架構(gòu)是發(fā)展的趨勢(shì),Exchange等,全面支持網(wǎng)絡(luò)的構(gòu)件搭建的系統(tǒng),SUN和IBM推的JavaBean構(gòu)件技術(shù)等,使B/S更加成熟.(4)軟件重用不同C/S程序可以不可避免的整體性考慮,構(gòu)件的重用性不如在B/S要求下的構(gòu)件的重用性好.B/S對(duì)的多重結(jié)構(gòu),要求構(gòu)件相對(duì)獨(dú)立的功能.,而不是做在墻上的石頭桌子(5)系統(tǒng)維護(hù)不同C/S程序由于整體性,必須整體考察,處理出現(xiàn)的問(wèn)題以及系統(tǒng)升級(jí).升級(jí)難.可能是再做一個(gè)全新的系統(tǒng)
B/S構(gòu)件組成,方面構(gòu)件個(gè)別的更換,實(shí)現(xiàn)系統(tǒng)的無(wú)縫升級(jí)..(6)處理問(wèn)題不同C/S程序可以處理用戶(hù)面固定,并且在相同區(qū)域,安全要求高需求,與操作系統(tǒng)相關(guān).應(yīng)該都是相同的系統(tǒng)B/S建立在廣域網(wǎng)上,面向不同的用戶(hù)群,分散地域,這是C/S無(wú)法作到的,與操作系統(tǒng)平臺(tái)關(guān)系最小.(7)用戶(hù)接口不同C/S多是建立的Window平臺(tái)上,表現(xiàn)方法有限,對(duì)程序員普遍要求較高B/S建立在瀏覽器上,有更加豐富和生動(dòng)的表現(xiàn)方式與用戶(hù)交流.并且大部分難度減低,減低開(kāi)發(fā)成本.
(8)信息流不同C/S程序一般是典型的中央集權(quán)的機(jī)械式處理,交互性相對(duì)低B/S信息流向可變化,B-BB-CB-G等信息、流向的變化,更像交易中心。答:(JavaNaming&DirectoryInterface)JAVA命名目錄服務(wù)。主要提供的功能是:提供ー個(gè)目錄系統(tǒng),讓其它各地的應(yīng)用程序在其上面留下自己的索引,從而滿(mǎn)足快速查找和定位分布式應(yīng)用程序的功能。
答:(JavaMessageService)JAVA消息月艮務(wù)。主要實(shí)現(xiàn)各個(gè)應(yīng)用程序之間的通訊。包括點(diǎn)對(duì)點(diǎn)和廣播答:(JavaTransactionAPI)JAVA事務(wù)服務(wù)。提供各種分布式事務(wù)服務(wù)。應(yīng)用程序只需調(diào)用其提供的接口即可。?用在什么場(chǎng)合?答:每個(gè)模式都描述了一個(gè)在我們的環(huán)境中不斷出現(xiàn)的問(wèn)題,然后描述了該問(wèn)題的解決方案的核心。通過(guò)這種方式,你可以無(wú)數(shù)次地使用那些已有的解決方案,無(wú)需在重復(fù)相同的
工作。主要用到了MVC的設(shè)計(jì)模式。用來(lái)開(kāi)發(fā)JSP/Servlet或者J2EE的相關(guān)應(yīng)用。簡(jiǎn)單エ廠模式等。11.、j2ee常用的設(shè)計(jì)模式?說(shuō)明工廠模式。答:Java中的23種設(shè)計(jì)模式:Factory(エ廠模式), Builder(建造模式),FactoryMethod(工廠方法模式),Prototype(原始模型模式),Singleton(單例模式),F(xiàn)acade(門(mén)面模式),Adapter(適配器模式), Bridge(橋梁模式),Composite(合成模式),Decorator(裝飾模式), Flyweight(享元模式),Proxy(代理模式),Command(命令模式),InterpreterCommand(命令模式),Interpreter(解釋器模式),Visitor(訪問(wèn)者模式),Iterator(迭代子模式), Mediator(調(diào)停者模式),Memento(備忘錄模式),Observer(觀察者模式), State(狀態(tài)模式),Strategy(策略模式),TemplateMethod(模板方法模式),ChainOfResponsibleity(責(zé)任鏈模式)工廠模式:エ廠模式是ー種經(jīng)常被使用到的模式,根據(jù)工廠模式實(shí)現(xiàn)的類(lèi)可以根據(jù)提供的數(shù)據(jù)生成一組類(lèi)中某ー個(gè)類(lèi)的實(shí)例,通常這ー組類(lèi)有一個(gè)公共的抽象父類(lèi)并且實(shí)現(xiàn)了相同的方法,但是這些方法針對(duì)不同的數(shù)據(jù)進(jìn)行了不同的操作。首先需要定義一個(gè)基類(lèi),該類(lèi)的子類(lèi)通過(guò)不同的方法實(shí)現(xiàn)了基類(lèi)中的方法。然后需要定義ー個(gè)エ廠類(lèi),エ廠類(lèi)可以根據(jù)條件生成不同的子類(lèi)實(shí)例。當(dāng)?shù)玫阶宇?lèi)的實(shí)例
后,開(kāi)發(fā)人員可以調(diào)用基類(lèi)中的方法而不必考慮到底返回的是哪ー個(gè)子類(lèi)的實(shí)例。答:標(biāo)準(zhǔn)建模語(yǔ)言UMLo用例亂靜態(tài)圖(包括類(lèi)圖、對(duì)象圖和包圖),行為圖,交互圖(順序圖,合作圖),實(shí)現(xiàn)圖RMI指的是遠(yuǎn)程方法調(diào)用(RemoteMethodInvocation)〇它是ー種機(jī)制,可以讓在某個(gè)Java虛擬機(jī)上的對(duì)象調(diào)用另一個(gè)Java虛擬機(jī)中的對(duì)象上的方法。可以用此方法調(diào)用的任何對(duì)象必須實(shí)現(xiàn)該遠(yuǎn)程接口。調(diào)用這樣ー個(gè)對(duì)象時(shí),其參數(shù)為“marshalled”并將其從本地虛擬機(jī)發(fā)送到遠(yuǎn)程虛擬機(jī)(該遠(yuǎn)程虛擬機(jī)的參數(shù)為
"unmarshalled**)上。該方法終止時(shí),將編組來(lái)自遠(yuǎn)程機(jī)的結(jié)果并將結(jié)果發(fā)送到調(diào)用方的虛擬機(jī)。如果方法調(diào)用導(dǎo)致拋出異常,則該異常將指示給調(diào)用方。JAVA基礎(chǔ)“public/private/protected/缺省的修飾符”的使用類(lèi)?
public:公共,均可訪問(wèn)private:私有的,.protected:.缺省,friendly:目前類(lèi),同一個(gè)包,都可以訪問(wèn).作用域目前類(lèi)同一package子孫類(lèi)其它packagepublicqベベprotectedベqXfriendlyqqXXprivateqXxx
InnerClass(匿名內(nèi)部類(lèi))是否可以extends(繼承)其它類(lèi),是否可以implements(實(shí)現(xiàn))interface(接口)?匿名內(nèi)部類(lèi)是沒(méi)有名字的內(nèi)部類(lèi),不能繼承其它類(lèi),但ー個(gè)內(nèi)部類(lèi)可以作為ー個(gè)接口,由另ー個(gè)內(nèi)部類(lèi)實(shí)現(xiàn).ー、由于匿名內(nèi)部類(lèi)沒(méi)有名字,所以它沒(méi)有構(gòu)造函數(shù)。因?yàn)闆](méi)有構(gòu)造函數(shù),所以它必須完全借用父類(lèi)的構(gòu)造函數(shù)來(lái)實(shí)例化,換言之:匿名內(nèi)部類(lèi)完全把創(chuàng)建對(duì)象的任務(wù)交給了父類(lèi)去完成。二、在匿名內(nèi)部類(lèi)里創(chuàng)建新的方法沒(méi)有太大意義,但它可以通過(guò)覆蓋父類(lèi)的方法達(dá)到神奇效果,如上例所示。這是多態(tài)性的體現(xiàn)。三、因?yàn)槟涿麅?nèi)部類(lèi)沒(méi)有名字,所以無(wú)法進(jìn)行向下的強(qiáng)制類(lèi)型轉(zhuǎn)換,持有對(duì)ー個(gè)匿名內(nèi)部類(lèi)對(duì)象引用的變量類(lèi)型一定是它的直接或間接父類(lèi)類(lèi)型。newv類(lèi)或接口,v類(lèi)的主體,匿名類(lèi)匿名類(lèi)是不能有名稱(chēng)的類(lèi),所以沒(méi)辦法引用它
們。必須在創(chuàng)建時(shí),作為new語(yǔ)句的一部分來(lái)聲明它們。這就要采用另ー種形式的new語(yǔ)句,如下所示:newv類(lèi)或接口,v類(lèi)的主體,這種形式的new語(yǔ)句聲明一個(gè)新的匿名類(lèi),它對(duì)ー個(gè)給定的類(lèi)進(jìn)行擴(kuò)展,或者實(shí)現(xiàn)ー個(gè)給定的接口。它還創(chuàng)建那個(gè)類(lèi)的ー個(gè)新實(shí)例,并把它作為語(yǔ)句的結(jié)果而返回。要擴(kuò)展的類(lèi)和要實(shí)現(xiàn)的接口是new語(yǔ)句的操作數(shù),后跟匿名類(lèi)的主體。
如果匿名類(lèi)對(duì)另一個(gè)類(lèi)進(jìn)行擴(kuò)展,它的主體可以訪問(wèn)類(lèi)的成員、覆蓋它的方法等等,這和其它任何標(biāo)準(zhǔn)的類(lèi)都是ー樣的。如果匿名類(lèi)實(shí)現(xiàn)了一個(gè)接口,它的主體必須實(shí)現(xiàn)接口的方法。注意匿名類(lèi)的聲明是在編譯時(shí)進(jìn)行的,實(shí)例化在運(yùn)行時(shí)進(jìn)行。這意味著for循環(huán)中的ー個(gè)new語(yǔ)句會(huì)創(chuàng)建相同匿名類(lèi)的幾個(gè)實(shí)例,而不是創(chuàng)建幾個(gè)不同匿名類(lèi)的ー個(gè)實(shí)例。從技術(shù)上說(shuō),匿名類(lèi)可被視為非靜態(tài)的內(nèi)部類(lèi),所以它們具有和方法內(nèi)部聲明的非靜態(tài)內(nèi)部類(lèi)ー樣的權(quán)限和限制。
如果要執(zhí)行的任務(wù)需要一個(gè)對(duì)象,但卻不值得創(chuàng)建全新的對(duì)象(原因可能是所需的類(lèi)過(guò)于簡(jiǎn)單,或者是由于它只在ー個(gè)方法內(nèi)部使用),匿名類(lèi)就顯得非常有用。匿名類(lèi)尤其適合在Swing應(yīng)用程序中快速創(chuàng)建事件處理程序。exp:returnnewContents(){privateinti=11;publicintvalue(){returni;});
這種奇怪的語(yǔ)法要表達(dá)的意思是:“創(chuàng)建從Contents衍生出來(lái)的匿名類(lèi)的一個(gè)對(duì)象”。由new表達(dá)式返回的句柄會(huì)自動(dòng)上溯造型成一個(gè)Contents句柄。匿名內(nèi)部類(lèi)的語(yǔ)法其實(shí)要表達(dá)的是:classMyContentsextendsContents{privateinti=11;publicintvalue(){returni;})returnnewMyContentsQ;若試圖定義內(nèi)部類(lèi),并想使用在匿名內(nèi)部類(lèi)外部
定義的一個(gè)對(duì)象,則編譯器要求外部對(duì)象必須是Hna!屬性.publicclassParcel9{publicDestinationdest(finalStringdest,Hnalfloatprice){returnnewDestination(){privateintcost;//Instanceinitializationforeachobject:{cost=(price);if(cost>100)("Overbudget!");
privateStringlabel=dest;publicStringreadLabel(){returnlabel;});)publicstaticvoidmain(String[]args){Parcel9p=newParcel9();Destinationd=(''Tanzania'',);nestedclass和innerclass的不同?nestedclass在C++中是嵌套類(lèi),inner,不需要一個(gè)外部類(lèi)對(duì)象;不能從ー個(gè)static內(nèi)部類(lèi)的ー個(gè)對(duì)象訪問(wèn)到ー個(gè)外部類(lèi)的對(duì)象.5?&和&&的區(qū)別&是位運(yùn)算符,表示按位與運(yùn)算;&&是邏輯運(yùn)算符,表示邏輯與(and)collection是集合類(lèi)的上級(jí)接口,繼承與它的接口主要是set和list
其中l(wèi)ist必須以特定的順序容納元素;而ー個(gè)set不能包含重復(fù)的元素.映射(Map)一系列ハ鍵ー值”,ー個(gè)包含自己值的list,或者包含自己(鍵ー值)對(duì)的ー個(gè)!ist.均可構(gòu)建自己的反復(fù)器.,排序,線程安全化等操作.publicclassSimpleCollection{publicstaticvoidmain(String[]args){Collectionc=newArrayList();for(inti=0;i<10;i++)Iteratorit=();while(Q)(0);assertion(斷言)在軟件開(kāi)發(fā)中是一種常用的調(diào)試方式,很多開(kāi)發(fā)語(yǔ)言中都支持這種機(jī)制。在實(shí)現(xiàn)中,assertion就是在程序中的一條語(yǔ)句,它對(duì)ー個(gè)boolean表達(dá)式進(jìn)行檢查,ー個(gè)正確程序必須保證這個(gè)boolean表達(dá)式的值為true;如果該值為false,說(shuō)明程序已經(jīng)處于不正確的狀態(tài)下,系統(tǒng)將給出警告或退出。一般來(lái)說(shuō),
assertion用于保證程序最基本、關(guān)鍵的正確性。assertion檢查通常在開(kāi)發(fā)和測(cè)試時(shí)開(kāi)啟。為了提高性能,在軟件發(fā)布后,assertion檢查通常是關(guān)閉的.s=newStringC'xyz'');倉(cāng)リ建了幾個(gè)StringObject***兩個(gè),ー個(gè)字符對(duì)象,ー個(gè)字符對(duì)象引用對(duì)象()0前者等于12,,求其floor10.shortsi=l;sl=sl+1;是否有錯(cuò)誤?shortsi
=l;sl+=1;是否有錯(cuò)誤?前者sl+1返回ー個(gè)int型,需要強(qiáng)制類(lèi)型轉(zhuǎn)換.后者正確.有,.〇Overloaded的方法是否可以改變返回值的類(lèi)型?答:方法的重寫(xiě)Overriding和重載Overloading是Java多態(tài)性的不同表現(xiàn)。重寫(xiě)Overriding是父類(lèi)與子類(lèi)之間多態(tài)性的一種表現(xiàn),重載Overloading是ー個(gè)類(lèi)中多態(tài)性的一種表現(xiàn)。
如果在子類(lèi)中定義某方法與其父類(lèi)有相同的名稱(chēng)和參數(shù),我們說(shuō)該方法被重寫(xiě)(Overriding)。子類(lèi)的對(duì)象使用這個(gè)方法時(shí),將調(diào)用子類(lèi)中的定義,對(duì)它而言,父類(lèi)中的定義如同被“屏蔽”了。如果在ー個(gè)類(lèi)中定義了多個(gè)同名的方法,它們或有不同的參數(shù)個(gè)數(shù)或有不同的參數(shù)類(lèi)型,則稱(chēng)為方法的重載(Overloading)〇Overloaded的方法是可以改變返回值的類(lèi)型〇Overloaded的方法是否可以改變返回值的類(lèi)型?答:方法的重寫(xiě)Overriding和重載Overloading是Java多態(tài)性的不同表現(xiàn)。重寫(xiě)Overriding是父類(lèi)與子類(lèi)之間多態(tài)性的一種表現(xiàn),重載Overloading是ー個(gè)類(lèi)中多態(tài)性的ー種表現(xiàn)。如果在子類(lèi)中定義某方法與其父類(lèi)有相同的名稱(chēng)和參數(shù),我們說(shuō)該方法被重寫(xiě)(Overriding)。子類(lèi)的對(duì)象使用這個(gè)方法時(shí),將調(diào)用子類(lèi)中的定義,對(duì)它而言,父類(lèi)中的定義如同被“屏蔽”了。
如果在ー個(gè)類(lèi)中定義了多個(gè)同名的方法,它們或有不同的參數(shù)個(gè)數(shù)或有不同的參數(shù)類(lèi)型,則稱(chēng)為方法的重載(Overloading)〇Overloaded的方法是可以改變返回值的類(lèi)型這個(gè)說(shuō)法是錯(cuò)誤的,多態(tài)是ー種運(yùn)行時(shí)的行為,而不是編譯時(shí)的行為。Overriding屬于運(yùn)行時(shí)的行為,而Overloading是編譯時(shí)的行為。具體請(qǐng)參照thinkinjava中關(guān)于多態(tài)的描述,那么用什么方法來(lái)區(qū)分重復(fù)與否呢?是用==還是equals。?它們有何區(qū)別答:Set里的元素是不能重復(fù)的,那么用iterator()方法來(lái)區(qū)分重復(fù)與否。equals。是判讀兩個(gè)Set是否相等equals。和==方法決定引用值是否指向同一對(duì)象equals。在類(lèi)中被覆蓋,為的是當(dāng)兩個(gè)分離的對(duì)象的內(nèi)容和類(lèi)型相配的話,返回真值
exception?答:常見(jiàn)的運(yùn)行時(shí)異常有如下這些ArithmeticException(異常的運(yùn)算條件),ArrayStoreException(10]ー個(gè)對(duì)象數(shù)組存放ー錯(cuò)誤類(lèi)型的對(duì)象時(shí))BufferOverflowException,BufferUnderflowException,CannotRedoException,CannotUndoException,ClassCastException, CMMException,ConcurrentModificationException,DOMException, EmptyStackException,IllegalArgumentException,IllegalMonitorStateException,IllegalPathStateException,IllegalStateException,ImagingOpException,IndexOutOfBoundsException,MissingResourceException,
NegativeArraySizeException,NoSuchElementException,NullPointerException,ProfileDataException,ProviderException,RasterFormatException,SecurityException,SystemException,UndeclaredThrowableException,UnmodifiableSetException,UnsupportedOperationException..答:error表示恢復(fù)不是不可能但很困難的情況下的ー種嚴(yán)重問(wèn)題。比如說(shuō)內(nèi)存溢出。不可能指望程序能處理這樣的情況exception表示一種設(shè)計(jì)或?qū)崿F(xiàn)問(wèn)題。也就是說(shuō),它表示如果程序運(yùn)行正常,從不會(huì)發(fā)生的情況
,Set,Map是否繼承自Collection接口答:List,Set是,Map不是class和interface的區(qū)別答:聲明方法的存在而不去實(shí)現(xiàn)它的類(lèi)叫虛擬類(lèi)(abstractclass).它用于創(chuàng)建一個(gè)體現(xiàn)某些基本行為的類(lèi),并為該類(lèi)聲明方法,class變量,類(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è)有程序體。接口只可以定義staticfinal成員變量。接口的實(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)型。通常的動(dòng)態(tài)聯(lián)編將生效。引用可以轉(zhuǎn)換到接口類(lèi)型或從接口類(lèi)型轉(zhuǎn)換,instanceof運(yùn)算符可以用來(lái)決定某對(duì)象的類(lèi)是否實(shí)現(xiàn)了接口.接口是ー個(gè)更純的抽象類(lèi).?抽象類(lèi)是否可實(shí)現(xiàn)(implements)接口?抽象類(lèi)是否可繼承實(shí)體類(lèi)(concreteclass)
答:接口可以繼承接口。抽象類(lèi)可以實(shí)現(xiàn)(implements)接口,抽象類(lèi)可繼承實(shí)體類(lèi),但前提是實(shí)體類(lèi)必須有明確的構(gòu)造函數(shù),是否可同時(shí)是native,是否可同時(shí)是synchronized答::(,屬性的值發(fā)生不同步的問(wèn)題.)native:(聲明本地方法的關(guān)鍵字,可以通過(guò)聲明的方法調(diào)用本地的動(dòng)態(tài)鏈接庫(kù)或者有C、C++等開(kāi)發(fā)的函數(shù)。)(構(gòu)造函數(shù))答:構(gòu)造器Constructor不能被繼承,因此不能重寫(xiě)Overriding,但可以被重載Overloading
1).構(gòu)造器不能是native,final,static,synchronized的,可以是public,private,或什么都沒(méi)有。2),構(gòu)造器函數(shù)里可以寫(xiě)return呢,但后面什么都不許有(包括null)3),構(gòu)造器不能返回值.但如果有個(gè),,構(gòu)造器,,返值了,它就不是構(gòu)造器嘍,只是個(gè)普通方法4).super();this();這兩個(gè)方法只能在構(gòu)造方法里調(diào)用.5),成員變量聲明時(shí)候賦值,比構(gòu)造函數(shù)還早.答:String類(lèi)是final類(lèi)故不可以繼承
{}里有一個(gè)return語(yǔ)句,那么緊跟在這個(gè)try后的finally{}里的code會(huì)不會(huì)被執(zhí)行,什么時(shí)候被執(zhí)行,在return前還是后答:會(huì)執(zhí)行,在return前執(zhí)行答:2?3((y)==true),但卻可有不同的hashcode,這句話對(duì)不對(duì)答:不對(duì),有相同的hashcode在C++中,每個(gè)類(lèi)多有地址。java也ー樣,不過(guò)hashcode不是地址,而是
個(gè)標(biāo)識(shí)對(duì)象用的。(個(gè)人認(rèn)為)每個(gè)對(duì)象的hashcode是不ー樣的,Object的默認(rèn)hashcode記得是按引用地址的。對(duì)于String例外,是按String內(nèi)容輸出hashcode的,這樣可以用equals。來(lái)比較String的內(nèi)容是否相等了,而不是地址在Java應(yīng)用程序執(zhí)行期間,在同一對(duì)象上多次調(diào)用hashCode方法時(shí),必須一致地返回相同的整數(shù),前提是對(duì)象上equals比較中所用的信息沒(méi)有被修改。從某ー應(yīng)用程序的ー次執(zhí)行到同一應(yīng)用程序的另一次執(zhí)行,該整數(shù)無(wú)需保持一致。如果根據(jù)equals(Object)方法,兩個(gè)對(duì)象是相等的,那么在兩個(gè)對(duì)象中的每個(gè)對(duì)象上調(diào)用hashCode方法都必須生成相同的整數(shù)結(jié)果。
以下情況不是必需的:如果根據(jù)equals()方法,兩個(gè)對(duì)象不相等,那么在兩個(gè)對(duì)象中的任ー對(duì)象上調(diào)用hashCode方法必定會(huì)生成不同的整數(shù)結(jié)果。但是,程序員應(yīng)該知道,為不相等的對(duì)象生成不同整數(shù)結(jié)果可以提髙哈希表的性能。實(shí)際上,由Object類(lèi)定義的hashCode方法確實(shí)會(huì)針對(duì)不同的對(duì)象返回不同的整數(shù)。(這一般是通過(guò)將該對(duì)象的內(nèi)部地址轉(zhuǎn)換成一個(gè)整數(shù)來(lái)實(shí)現(xiàn)的,但是JavaTM編程語(yǔ)言不需要這種實(shí)現(xiàn)技巧。),此方法可改變這個(gè)對(duì)象的屬性,并可返回變化后的結(jié)果,那么這里到底是值傳遞還是引用傳遞答:是值傳遞。Java編程語(yǔ)言只有值傳遞參數(shù)。當(dāng)ー個(gè)對(duì)象實(shí)例作為ー個(gè)參數(shù)被傳遞到方法中
時(shí),參數(shù)的值就是對(duì)該對(duì)象的引用。對(duì)象的內(nèi)容可以在被調(diào)用的方法中改變,但對(duì)象的引用是永遠(yuǎn)不會(huì)改變的.,是否能作用在!ong上,是否能作用在String上答:witch(exprl)中,expr!是ー個(gè)整數(shù)表達(dá)式。因此傳遞給switch和case語(yǔ)句的參數(shù)應(yīng)該是int、short>char或者byte〇long,string都不能作用于swtich?為什么要有GC
答:GC是垃圾收集的意思(GabageCollection),內(nèi)存處理是編程人員容易出現(xiàn)問(wèn)題的地方,忘記或者錯(cuò)誤的內(nèi)存回收會(huì)導(dǎo)致程序或系統(tǒng)的不穩(wěn)定甚至崩潰,Java提供的GC功能可以自動(dòng)監(jiān)測(cè)對(duì)象是否超過(guò)作用域從而達(dá)到自動(dòng)回收內(nèi)存的目的,Java語(yǔ)言沒(méi)有提供釋放已分配內(nèi)存的顯示操作方法。f=?答:不正確。精度不準(zhǔn)確,應(yīng)該用強(qiáng)制類(lèi)型轉(zhuǎn)換,如下所示:floatf=(float)FrameWork(包括如何寫(xiě)自己的數(shù)據(jù)結(jié)構(gòu))?答:CollectionFrameWork如下:
Collection卜ListIpLinkedListIpArrayListI^-VectorIl-StackLSetMappHashtablepHashMap1-WeakHashMap
Collection是最基本的集合接口,ー個(gè)Collection代表ー組Object,即Collection的元素(Elements)Map提供key到value的映射.答:抽象類(lèi)與接口都用于抽象,但是抽象類(lèi)(JAVA中)可以有自己的部分實(shí)現(xiàn),而接口則完全是ー個(gè)標(biāo)識(shí)(同時(shí)有多重繼承的功能)Collection框架中實(shí)現(xiàn)比較要實(shí)現(xiàn)Comparable接口和Comparator接口答:STRING的長(zhǎng)度是不可變的,
STRINGBUFFER的長(zhǎng)度是可變的。如果你對(duì)字符串中的內(nèi)容經(jīng)常進(jìn)行操作,尤其是內(nèi)容要修改時(shí),那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString。方法,Anally,Hnalize的區(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)用的答:主要有以下四方面:
抽象就是忽略ー個(gè)主題中與目前目標(biāo)無(wú)關(guān)的那些方面,以便更充分地注意與目前目標(biāo)有關(guān)的方面。抽象并不打算了解全部問(wèn)題,而只是選擇其中的一部分,暫時(shí)不用部分細(xì)節(jié)。抽象包括兩個(gè)方面,一是過(guò)程抽象,二是數(shù)據(jù)抽象。繼承是ー種聯(lián)結(jié)類(lèi)的層次模型,并且允許和鼓勵(lì)類(lèi)的重用,它提供了一種明確表述共性的方法。對(duì)象的一個(gè)新類(lèi)可以從現(xiàn)有的類(lèi)中派生,這個(gè)過(guò)程稱(chēng)為類(lèi)繼承。新類(lèi)繼承了原始類(lèi)的特性,新類(lèi)稱(chēng)為原始類(lèi)的派生類(lèi)(子類(lèi)),而原始類(lèi)稱(chēng)為新類(lèi)的基類(lèi)(父類(lèi))。派生類(lèi)可以從它的基類(lèi)那里繼承方法和實(shí)例變量,并且類(lèi)可以修改或增加新的方法使之更適合特殊的需要。
封裝是把過(guò)程和數(shù)據(jù)包圍起來(lái),對(duì)數(shù)據(jù)的訪問(wèn)只能通過(guò)已定義的界面。面向?qū)ο笥?jì)算始于這個(gè)基本概念,即現(xiàn)實(shí)世界可以被描繪成一系列完全自治、封裝的對(duì)象,這些對(duì)象通過(guò)ー個(gè)受保護(hù)的接口訪問(wèn)其它對(duì)象。4.多態(tài)性:多態(tài)性是指允許不同類(lèi)的對(duì)象對(duì)同一消息作出響應(yīng)。多態(tài)性包括參數(shù)化多態(tài)性和包含多態(tài)性。多態(tài)性語(yǔ)言具有靈活、抽象、行為共享、代碼共享的優(yōu)勢(shì),很好的解決了應(yīng)用程序函數(shù)同名問(wèn)題。答:基本數(shù)據(jù)類(lèi)型包括byteヽint、char、long、floatヽdouble'boolean和short〇,因此不可以繼承這個(gè)類(lèi)、不能修改這個(gè)類(lèi)。為了提高效率節(jié)省空間,我們應(yīng)該用StringBuffer類(lèi)和!nteger有什么區(qū)別答:Java提供兩種不同的類(lèi)型:引用類(lèi)型和原始類(lèi)型(或內(nèi)置類(lèi)型)。Int是java的原始數(shù)據(jù)類(lèi)型,Integer是java為int提供的封裝類(lèi)。Java為每個(gè)原始類(lèi)型提供了封裝類(lèi)。原始類(lèi) 型 封 裝類(lèi),booleanBoolean,charCharacter,byteByte,shortShort,intInteger,longLong,floatFloat,doubleDouble引用類(lèi)型和原始類(lèi)型的行為完全不同,并且它們具有不同的語(yǔ)義。引用類(lèi)型和原始類(lèi)型具有不同的特征和用
法,它們包括:大小和速度問(wèn)題,這種類(lèi)型以哪種類(lèi)型的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ),當(dāng)引用類(lèi)型和原始類(lèi)型用作某個(gè)類(lèi)的實(shí)例數(shù)據(jù)時(shí)所指定的缺省值。對(duì)象引用實(shí)例變量的缺省值為null,而原始類(lèi)型實(shí)例變量的缺省值與它們的類(lèi)型有關(guān).答:異常表示程序運(yùn)行過(guò)程中可能出現(xiàn)的非正常狀態(tài),運(yùn)行時(shí)異常表示虛擬機(jī)的通常操作中可能遇到的異常,是ー種常見(jiàn)運(yùn)行錯(cuò)誤。java編譯器要求方法必須聲明拋出可能發(fā)生的非運(yùn)行時(shí)異常,但是并不要求必須聲明拋出未被捕獲的運(yùn)行時(shí)異常。,HashMap和Hashtable的區(qū)另リ答:就ArrayList與Vector主要從二方面來(lái)說(shuō)?:Vector是線程安全的,也就是說(shuō)是同步的,而
ArrayList是線程序不安全的,不是同步的:當(dāng)需要增長(zhǎng)時(shí),Vector默認(rèn)增長(zhǎng)為原來(lái)ー培,而ArrayList卻是原來(lái)的一半就HashMap與HashTable主要從三方面來(lái)說(shuō)。:Hashtable是基于陳舊的Dictionary類(lèi)的,HashMap是Java:Hashtable是線程安全的,也就是說(shuō)是同步的,而HashMap是線程序不安全的,不是同步的:只有HashMap可以讓你將空值作為ー個(gè)表的條目的key或value,Vector,LinkedList的存儲(chǔ)性能和特性答:ArrayList和Vector都是使用數(shù)組方式存儲(chǔ)數(shù)據(jù),此數(shù)組元素?cái)?shù)大于實(shí)際存儲(chǔ)的數(shù)據(jù)以便增加和插入元素,它們都允許直接按序號(hào)索引元素,但是插入元素要涉及數(shù)組元素移動(dòng)
等內(nèi)存操作,所以索引數(shù)據(jù)快而插入數(shù)據(jù)慢,Vector由于使用了synchronized方法(線程安全),通常性能上較ArrayList差,而LinkedList使用雙向鏈表實(shí)現(xiàn)存儲(chǔ),按序號(hào)索引數(shù)據(jù)需要進(jìn)行前向或后向遍歷,但是插入數(shù)據(jù)時(shí)只需要記錄本項(xiàng)的前后項(xiàng)即可,所以插入速度較快答:HashMap是Hashtable的輕量級(jí)實(shí)現(xiàn)(非線程安全的實(shí)現(xiàn)),他們都完成了Map接口,主要區(qū)別在于HashMap允許空(null)鍵值(key),由于非線程安全,效率上可能高于Hashtable〇HashMap允許將null作為一個(gè)entry的key或者value,而Hashtable不允許。HashMap把Hashtable的contains方法去掉了,
改成containsvalue和containsKey。因?yàn)閏ontains方法容易讓人引起誤解。Hashtable繼承自Dictionary類(lèi),interface的一個(gè)實(shí)現(xiàn)。最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個(gè)線程訪問(wèn)Hashtable時(shí),不需要自己為它的方法實(shí)現(xiàn)同步,而HashMap就必須為之提供外同步。Hashtable和HashMap采用的hash/rehash算法都大概ー樣,所以性能不會(huì)有很大的差異。****答:棧是ー種線形集合,其添加和刪除元素的操作應(yīng)在同一段完成。棧按照后進(jìn)先出的方式進(jìn)行處理。堆是棧的一個(gè)組成元素
答:當(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)越界,會(huì)引發(fā)IndexOutOfBoimdsException;訪問(wèn)null的對(duì)象時(shí)會(huì)引發(fā)NullPointerException〇另ー種情況就是JAVA允許程序員擴(kuò)展這種語(yǔ)義檢查,程序員可以創(chuàng)建自己的異常,并自由選擇在何時(shí)用throw關(guān)鍵字引發(fā)異常。。〇并考慮2種回收機(jī)制答:Java語(yǔ)言中一個(gè)顯著的特點(diǎn)就是引入了垃圾回收機(jī)制,使C++程序員最頭疼的內(nèi)存管理的問(wèn)題迎刃而解,它使得Java程序員在編寫(xiě)程序的時(shí)候不再需要考慮內(nèi)存管理。由于有個(gè)
垃圾回收機(jī)制,Java中的對(duì)象不再有“作用域“的概念,只有對(duì)象的引用オ有"作用域"。垃圾回收可以有效的防止內(nèi)存泄露,有效的使用可以使用的內(nèi)存。垃圾回收器通常是作為ー個(gè)單獨(dú)的低級(jí)別的線程運(yùn)行,不可預(yù)知的情況下對(duì)內(nèi)存堆中已經(jīng)死亡的或者長(zhǎng)時(shí)間沒(méi)有使用的對(duì)象進(jìn)行清楚和回收,程序員不能實(shí)時(shí)的調(diào)用垃圾回收器對(duì)某個(gè)對(duì)象或所有對(duì)象進(jìn)行垃圾回收。回收機(jī)制有分代復(fù)制垃圾回收和標(biāo)記垃圾回收,增量垃圾回收。?主要方法?答:最常用的集合類(lèi)是List和MapoList的具體實(shí)現(xiàn)包括ArrayList和Vector,它們是可變大小的列表,比較適合構(gòu)建、存儲(chǔ)和操作任何類(lèi)型對(duì)象的元素列表。List適用
于按數(shù)值索引訪問(wèn)元素的情形。Map提供了一個(gè)更通用的元素存儲(chǔ)方法。Map集合類(lèi)用于存儲(chǔ)元素對(duì)(稱(chēng)作"鍵"和"值”),其中每個(gè)鍵映射到ー個(gè)值。答:JVM中類(lèi)的裝載是由ClassLoader和它的子類(lèi)來(lái)實(shí)現(xiàn)的,JavaClassLoader是ー個(gè)重要的Java運(yùn)行時(shí)系統(tǒng)組件。它負(fù)責(zé)在運(yùn)行時(shí)查找和裝入類(lèi)文件的類(lèi)。?請(qǐng)列舉答:排序的方法有:插入排序(直接插入排序、希爾排序),交換排序(冒泡排序、快速排序),選擇排序(直接選擇排序、堆排序),歸并排序,分配排序(箱排序、基數(shù)排
序)快速排序的偽代碼?!ㄊ褂每焖倥判蚍椒▽?duì)a[0:n-1]排序從a[0:n-1]中選擇ー個(gè)元素作為midd1e,該元素為支點(diǎn)把余下的元素分割為兩段left和right,使得left中的元素都小于等于支點(diǎn),而right中的元素都大于等于支點(diǎn)遞歸地使用快速排序方法對(duì)!eft進(jìn)行排序遞歸地使用快速排序方法對(duì)right進(jìn)行排序所得結(jié)果為left+middle+right
,關(guān)鍵字:throws,throw,try,catch,行nally分別代表什么意義?在try塊中可以拋出異常嗎?答:Java通過(guò)面向?qū)ο蟮姆椒ㄟM(jìn)行異常處理,把各種不同的異常進(jìn)行分類(lèi),并提供了良好的接口。在Java中,每個(gè)異常都是ー個(gè)對(duì)象,它是Throwable類(lèi)或其它子類(lèi)的實(shí)例。當(dāng)ー個(gè)方法出現(xiàn)異常后便拋出ー個(gè)異常對(duì)象,該對(duì)象中包含有異常信息,調(diào)用這個(gè)對(duì)象的方法可以捕獲到這個(gè)異常并進(jìn)行處理。Java的異常處理是通過(guò)5個(gè)關(guān)鍵詞來(lái)實(shí)現(xiàn)的:h*y、catch>throw>throws和finally〇一般情況下是用try來(lái)執(zhí)行ー段程序,如果出現(xiàn)異常,系統(tǒng)會(huì)拋出(throws)ー個(gè)異常,這時(shí)候你可以通過(guò)它的類(lèi)型來(lái)捕捉(catch)它,或最后(finally)由缺省處理器來(lái)處理。用try來(lái)指定一塊預(yù)防所有“異常”的程序。緊跟在try程序后面,應(yīng)包含ー個(gè)catch子句來(lái)指定你想要捕捉的"異?!钡念?lèi)型。
throw語(yǔ)句用來(lái)明確地拋出ー個(gè)“異?!?。throws用來(lái)標(biāo)明一個(gè)成員函數(shù)可能拋出的各種”異?!薄inally為確保一段代碼不管發(fā)生什么”異?!倍急粓?zhí)行一段代碼。可以在一個(gè)成員函數(shù)調(diào)用的外面寫(xiě)ー個(gè)try語(yǔ)句,在這個(gè)成員函數(shù)內(nèi)部寫(xiě)另ー個(gè)try語(yǔ)句保護(hù)其它代碼。每當(dāng)遇到ー個(gè)try語(yǔ)句,”異?!钡目蚣芫头诺蕉褩I厦?直到所有的try語(yǔ)句都完成。如果下ー級(jí)的try語(yǔ)句沒(méi)有對(duì)某種”異?!边M(jìn)行處理,堆棧就會(huì)展開(kāi),直到遇到有處理這種“異常”的Sy語(yǔ)句?!?java”源文件中是否可以包括多個(gè)類(lèi)(不是內(nèi)部類(lèi))?有什么限制?
答:可以。必須只有一個(gè)類(lèi)名與文件名相同。?JDK為每種類(lèi)型的流提供了一些抽象類(lèi)以供繼承,請(qǐng)說(shuō)出他們分別是哪些類(lèi)?答:字節(jié)流,字符流。字節(jié)流繼承于InputStreamOutputstream,字符流繼承于InputStreamReaderOutputStreamWritero?主要是為了提高性能和使用方便。,請(qǐng)簡(jiǎn)單描述。答:會(huì)。自己實(shí)現(xiàn)堆載的數(shù)據(jù)結(jié)構(gòu)時(shí)有可能會(huì)出現(xiàn)內(nèi)存泄露?垃圾回收器可以馬上回收內(nèi)存嗎?有什么辦法
主動(dòng)通知虛擬機(jī)進(jìn)行垃圾回收答:對(duì)于GC來(lái)說(shuō),當(dāng)程序員創(chuàng)建對(duì)象時(shí),GC就開(kāi)始監(jiān)控這個(gè)對(duì)象的地址、大小以及使用情況。通常,GC采用有向圖的方式記錄和管理堆(heap)中的所有對(duì)象。通過(guò)這種方式確定哪些對(duì)象是“可達(dá)的”,哪些對(duì)象是”不可達(dá)的”。當(dāng)GC確定一些對(duì)象為”不可達(dá)”時(shí),GC就有責(zé)任回收這些內(nèi)存空間??梢?。(),通知GC運(yùn)行,但是Java語(yǔ)言規(guī)范并不保證GC一定會(huì)執(zhí)行。答:statici=10;〃常量 classAa;=10;〃可變,如何實(shí)現(xiàn)java序列化?*****
答:序列化就是ー種用來(lái)處理對(duì)象流的機(jī)制,所謂對(duì)象流也就是將對(duì)象的內(nèi)容進(jìn)行流化。可以對(duì)流化后的對(duì)象進(jìn)行讀寫(xiě)操作,也可將流化后的對(duì)象傳輸于網(wǎng)絡(luò)之間。序列化是為了解決在對(duì)對(duì)象流進(jìn)行讀寫(xiě)操作時(shí)所引發(fā)的問(wèn)題。序列化的實(shí)現(xiàn):將需要被序列化的類(lèi)實(shí)現(xiàn)Serializable接口,該接口沒(méi)有需要實(shí)現(xiàn)的方法,implementsSerializable只是為了標(biāo)注該對(duì)象是可被序列化的,然后使用ー個(gè)輸出流(如:FileOutputStream)來(lái)構(gòu)造ー個(gè)ObjectOutputStream(對(duì)象流)對(duì)象,接著,使用ObjectOutputStream對(duì)象的writeObject(Objectobj)方法就可以將參數(shù)為obj的對(duì)象寫(xiě)出(即保存其狀態(tài)),要恢復(fù)的話則用輸入流。
答:不可以,如果其中包含對(duì)象的method。;不能保證對(duì)象初始化.()方法時(shí),通常都有一行代碼,是什么?答:Clone有缺省行為,();他負(fù)責(zé)產(chǎn)生正確大小的空間,并逐位復(fù)制。,如何跳出目前的多重嵌套循環(huán)?答:用break;return方法。ヽMap、Set三個(gè)接口,存取元素時(shí),各有什么特點(diǎn)?答:List以特定次序來(lái)持有元素,可有重復(fù)元素。Set無(wú)法擁有重復(fù)元素,內(nèi)部排序。Map保存key-value值,value可多值。
,包,接口,請(qǐng)各舉5個(gè)答:常用的類(lèi):BufferedReaderBufferedWriterFileReaderFileWirterStringInteger常用的包:常用的接口:RemoteListMapDocumentNodeListStringurl"jdbc:obdc:mydbH;Connectioncon(url);Statementstmt0;ResultSetrsmytable");("selectfrom用JAVA
再寫(xiě)入本用JAVA
再寫(xiě)入本的通信編程,編程題(或問(wèn)答),SOCKET編程,讀服務(wù)器幾個(gè)字符,地顯示?答:Server端程序:packagetest;importimportpublicclassServerprivateServerSocketss;privateSocketsocket;privateBufferedReaderin;privatePrintWriterout;publicServer()tryss=newServerSocket(10000);while(true){socket=();StringRemotelP=O.getHostAddress();StringRemotePort=("A client comein!IP:*1+RemoteIP+RemotePort);in=newBufferedReader(newInputStreamReader(O));Stringline=();("Cleintsendis:H+line);out=newPrintWriter((),true);("YourMessageReceived!");0;0;0;)Jcatch(lOExceptione)("wrong");
publicstaticvoidmain(String[]args){newServer();));Client端程序:packagetest;importimport
publicclassClientSocketsocket;BufferedReaderin;PrintWriterout;publicClient()("TrytoConnectto:10000");socket=newSocket(nn,10000);("TheServerConnected!");("PleaseentersomeCharacter:");BufferedReaderline=newBufferedReader(newInputStreamReader());out=newPrintWriter((),true);(0);in=newBufferedReader(newInputStreamReader(O));(0);0;0;0;}catch(IOExceptione){("Wrong");))publicstaticvoidmain(String[]args)newClientQ;
};61.線程的基本概念、線程的本狀態(tài)以及狀態(tài)之間的關(guān)系?新建(Born):新建的線程處于新建狀態(tài)?就緒(Ready):在創(chuàng)建線程后,它將處于就緒狀態(tài),等待start()方法被調(diào)用?運(yùn)行(Running):線程在開(kāi)始執(zhí)行時(shí)進(jìn)入運(yùn)行狀態(tài)?睡眠(Sleeping):線程的執(zhí)行可通過(guò)使用sleep()方法來(lái)暫時(shí)中止。在睡眠后,線程將進(jìn)入就緒狀態(tài)?等待(Waiting):如果調(diào)用了wait()方法,線程將處于等待狀態(tài)。用于在兩個(gè)或多個(gè)線程并發(fā)
運(yùn)行時(shí)。?掛起(Suspended):在臨時(shí)停止或中斷線程的執(zhí)行時(shí),線程就處于掛起狀態(tài)。?恢復(fù)(Resume):在掛起的線程被恢復(fù)執(zhí)行時(shí),可以說(shuō)它已被恢復(fù)。?阻塞(Blocked)?在線程等待ー個(gè)事件時(shí)(例如輸入/輸出操作),就稱(chēng)其處于阻塞狀態(tài)。?死亡(Dead)-在run()方法已完成執(zhí)行或其stop()方法被調(diào)用之后,線程就處于死亡狀態(tài)。串行化的注意事項(xiàng)以及如何實(shí)現(xiàn)串行化答:如果有循環(huán)引用是不可以串行化的。對(duì)象輸出流的WriteObject方法和對(duì)象輸入流的ReadObect方法
靜態(tài)內(nèi)部類(lèi)可以有靜態(tài)成員,而非靜態(tài)內(nèi)部類(lèi)則不能有靜態(tài)成員。靜態(tài)內(nèi)部類(lèi)的非靜態(tài)成員可以訪問(wèn)外部類(lèi)的靜態(tài)變量,而不可訪問(wèn)外部類(lèi)的非靜態(tài)變量。非靜態(tài)內(nèi)部類(lèi)的非靜態(tài)成員可以訪問(wèn)外部類(lèi)的非靜態(tài)變量。?用什么關(guān)鍵字修飾同步方法?stop。和suspendQ方法為何不推薦使用?答:有兩種實(shí)現(xiàn)方法,分別是繼承Thread類(lèi)與實(shí)現(xiàn)Runnable接口用synchronized關(guān)鍵字修飾同步方法反對(duì)使用stop(),是因?yàn)樗话踩?。它?huì)解除由
線程獲取的所有鎖定,而且如果對(duì)象處于ー種不連貫狀態(tài),那么其它線程能在那種狀態(tài)下檢查和修改它們。結(jié)果很難檢查出真正的問(wèn)題所在。suspend。方法容易發(fā)生死鎖。調(diào)用suspend。的時(shí)候,目標(biāo)線程會(huì)停下來(lái),但卻仍然持有在這之前獲得的鎖定。此時(shí),其它任何線程都不能訪問(wèn)鎖定的資源,除非被“掛起”的線程恢復(fù)運(yùn)行。對(duì)任何線程來(lái)說(shuō),如果它們想恢復(fù)目標(biāo)線程,同時(shí)又試圖使用任何ー個(gè)鎖定的資源,就會(huì)造成死鎖。所以不應(yīng)該使用suspend。,而應(yīng)在自己的Thread類(lèi)中置入ー個(gè)標(biāo)志,指出線程應(yīng)該活動(dòng)還是掛起。若標(biāo)志指出線程應(yīng)該掛起,便用wait。命其進(jìn)入等待狀態(tài)。若標(biāo)志指出線程應(yīng)當(dāng)恢復(fù),則用ー個(gè)notify。重新啟動(dòng)線程。()和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ā)出!!。tify方法(或notifyAll)后本線程オ進(jìn)入對(duì)象鎖定池準(zhǔn)備獲得對(duì)象鎖進(jìn)入運(yùn)行狀態(tài)。,在什么情況下分別使用他們?舉例說(shuō)明。答:如果數(shù)據(jù)將在線程間共享。例如正在寫(xiě)的數(shù)據(jù)以后可能被另ー個(gè)線程讀到,或者正在讀的數(shù)據(jù)可能已經(jīng)被另ー個(gè)線程寫(xiě)過(guò)了,那么這些數(shù)據(jù)就是共享數(shù)據(jù),必須進(jìn)行同步存取
當(dāng)應(yīng)用程序在對(duì)象上調(diào)用了一個(gè)需要花費(fèi)很長(zhǎng)時(shí)間來(lái)執(zhí)行的方法,并且不希望讓程序等待方法的返回時(shí),就應(yīng)該使用異步編程,在很多情況下采用異步途徑往往更有效率。()還是start()?答:啟動(dòng)ー個(gè)線程是調(diào)用start。方法,使線程所代表的虛擬處理機(jī)處于可運(yùn)行狀態(tài),這意味著它可以由JVM調(diào)度并執(zhí)行。這并不意味著線程就會(huì)立即運(yùn)行。nin()方法可以產(chǎn)生必須退出的標(biāo)志來(lái)停止ー個(gè)線程。,其它線程是否可進(jìn)入此對(duì)象的其它方法?答:不能,ー個(gè)對(duì)象的ー個(gè)synchronized方法只
能由一個(gè)線程訪問(wèn)。答:wait。:使ー個(gè)線程處于等待狀態(tài),并且釋放所持有的對(duì)象的lock〇sleep。:使ー個(gè)正在運(yùn)行的線程處于睡眠狀態(tài),是ー個(gè)靜態(tài)方法,調(diào)用此方法要捕捉InterruptedException異吊。notify。:喚醒ー個(gè)處于等待狀態(tài)的線程,注意的是在調(diào)用此方法的時(shí)候,并不能確切的喚醒某ー個(gè)等待狀態(tài)的線程,而是由JVM確定喚醒哪個(gè)線程,而且不是按優(yōu)先級(jí)。Allnotity。:喚醒所有處入等待狀態(tài)的線程,注意并不是給所有喚醒線程一個(gè)對(duì)象的鎖,而是讓它們競(jìng)爭(zhēng)。
,都是什么?同步有幾種實(shí)現(xiàn)方法,都是什么?答:多線程有兩種實(shí)現(xiàn)方法,分別是繼承Thread類(lèi)與實(shí)現(xiàn)Runnable接口同步的實(shí)現(xiàn)方面有兩種,分別是synchronized,wait與notify、線程的基本狀態(tài)以及狀態(tài)之間的關(guān)系答:線程指在程序執(zhí)行過(guò)程中,可以執(zhí)行程序代碼的ー個(gè)執(zhí)行單位,每個(gè)程序至少都有一個(gè)線程,也就是程序本身。Java中的線程有四種狀態(tài)分別是:運(yùn)行、就緒、掛起、結(jié)束
答:主要相同點(diǎn):Lock能完成synchronized所實(shí)現(xiàn)的所有功能主要不同點(diǎn):Lock有比syn
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- XX放射治療器械制造商2023下半年行動(dòng)報(bào)告:?jiǎn)T工關(guān)懷持續(xù)改進(jìn)
- 2023上半年??低暛h(huán)境、社會(huì)與公司治理報(bào)告:共建安全健康工作環(huán)境
- 2025年文化創(chuàng)意行業(yè)當(dāng)前市場(chǎng)規(guī)模及未來(lái)五到十年發(fā)展趨勢(shì)報(bào)告
- 2025年標(biāo)簽印刷行業(yè)當(dāng)前發(fā)展現(xiàn)狀及增長(zhǎng)策略研究報(bào)告
- 2025年精神病醫(yī)院行業(yè)當(dāng)前競(jìng)爭(zhēng)格局與未來(lái)發(fā)展趨勢(shì)分析報(bào)告
- 2025年智能快遞柜行業(yè)當(dāng)前發(fā)展趨勢(shì)與投資機(jī)遇洞察報(bào)告
- 2025年電視購(gòu)物行業(yè)當(dāng)前市場(chǎng)規(guī)模及未來(lái)五到十年發(fā)展趨勢(shì)報(bào)告
- 走出迷霧發(fā)言稿
- 團(tuán)員志愿服務(wù)發(fā)言稿
- 時(shí)間管理甘特圖課件
- 模具產(chǎn)品保密合同協(xié)議
- 完整的離婚協(xié)議書(shū)打印電子版(2025年版)
- 自然科學(xué)類(lèi)博物館AI應(yīng)用行業(yè)跨境出海戰(zhàn)略研究報(bào)告
- 《小學(xué)科學(xué)課程標(biāo)準(zhǔn)》解讀與教學(xué)設(shè)計(jì)
- 2025屆高考新型題目“糾正錯(cuò)別字”新題模擬練習(xí)
- 2024年江蘇省南京市中考數(shù)學(xué)試卷真題(含答案逐題解析)
- 兒童保健工作規(guī)范和技術(shù)規(guī)范
- 2025年區(qū)塊鏈應(yīng)用操作員職業(yè)技能競(jìng)賽理論參考試指導(dǎo)題庫(kù)500題(含答案)
- 2025年中國(guó)移動(dòng)初級(jí)解決方案經(jīng)理學(xué)習(xí)考試題庫(kù)大全-上(單選題)
- DB35T 1951-2020福建省公共機(jī)構(gòu)能耗定額標(biāo)準(zhǔn)
- 醫(yī)療機(jī)構(gòu)從業(yè)人員規(guī)范
評(píng)論
0/150
提交評(píng)論