freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

java軟件開(kāi)發(fā)工程師面試題寶典(編輯修改稿)

2025-05-11 13:40 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 實(shí)例對(duì)象,而程序調(diào)用的方法在運(yùn)行期才動(dòng)態(tài)綁定,就是引用變量所指向的具體實(shí)例對(duì)象的方法,也就是內(nèi)存里正在運(yùn)行的那個(gè)對(duì)象的方法,而不是引用變量的類(lèi)型中定義的方法。 2abstract class和interface有什么區(qū)別? 含有abstract修飾符的class即為抽象類(lèi),abstract 類(lèi)不能創(chuàng)建的實(shí)例對(duì)象。含有abstract方法的類(lèi)必須定義為abstract class,abstract class類(lèi)中的方法不必是抽象的。abstract class類(lèi)中定義抽象方法必須在具體(Concrete)子類(lèi)中實(shí)現(xiàn),所以,不能有抽象構(gòu)造方法或抽象靜態(tài)方法。如果的子類(lèi)沒(méi)有實(shí)現(xiàn)抽象父類(lèi)中的所有抽象方法,那么子類(lèi)也必須定義為abstract類(lèi)型。接口(interface)可以說(shuō)成是抽象類(lèi)的一種特例,接口中的所有方法都必須是抽象的。接口中的方法定義默認(rèn)為public abstract類(lèi)型,接口中的成員變量類(lèi)型默認(rèn)為public static final。下面比較一下兩者的語(yǔ)法區(qū)別:,接口中不能有構(gòu)造方法。,接口中沒(méi)有普通成員變量,接口中的所有方法必須都是抽象的,不能有非抽象的普通方法。4. 抽象類(lèi)中的抽象方法的訪(fǎng)問(wèn)類(lèi)型可以是public,protected和(默認(rèn)類(lèi)型,雖然eclipse下不報(bào)錯(cuò),但應(yīng)該也不行),但接口中的抽象方法只能是public類(lèi)型的,并且默認(rèn)即為public abstract類(lèi)型。5. 抽象類(lèi)中可以包含靜態(tài)方法,接口中不能包含靜態(tài)方法6. 抽象類(lèi)和接口中都可以包含靜態(tài)成員變量,抽象類(lèi)中的靜態(tài)成員變量的訪(fǎng)問(wèn)類(lèi)型可以任意,但接口中定義的變量只能是public static final類(lèi)型,并且默認(rèn)即為public static final類(lèi)型。7. 一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口,但只能繼承一個(gè)抽象類(lèi)。 下面接著再說(shuō)說(shuō)兩者在應(yīng)用上的區(qū)別:接口更多的是在系統(tǒng)架構(gòu)設(shè)計(jì)方法發(fā)揮作用,主要用于定義模塊之間的通信契約。而抽象類(lèi)在代碼實(shí)現(xiàn)方面發(fā)揮作用,可以實(shí)現(xiàn)代碼的重用,例如,模板方法設(shè)計(jì)模式是抽象類(lèi)的一個(gè)典型應(yīng)用,假設(shè)某個(gè)項(xiàng)目的所有Servlet類(lèi)都要用相同的方式進(jìn)行權(quán)限判斷、記錄訪(fǎng)問(wèn)日志和處理異常,那么就可以定義一個(gè)抽象的基類(lèi),讓所有的Servlet都繼承這個(gè)抽象基類(lèi),在抽象基類(lèi)的service方法中完成權(quán)限判斷、記錄訪(fǎng)問(wèn)日志和處理異常的代碼,在各個(gè)子類(lèi)中只是完成各自的業(yè)務(wù)邏輯代碼,偽代碼如下:public abstract class BaseServlet extends HttpServlet{ public final void service(HttpServletRequest request, HttpServletResponse response) throws IOExcetion,ServletException { 記錄訪(fǎng)問(wèn)日志 進(jìn)行權(quán)限判斷if(具有權(quán)限){ try{ doService(request,response)。} catch(Excetpion e) { 記錄異常信息 }} } protected abstract void doService(HttpServletRequest request, HttpServletResponse response) throws IOExcetion,ServletException。 //注意訪(fǎng)問(wèn)權(quán)限定義成protected,顯得既專(zhuān)業(yè),又嚴(yán)謹(jǐn),因?yàn)樗菍?zhuān)門(mén)給子類(lèi)用的}public class MyServlet1 extends BaseServlet{protected void doService(HttpServletRequest request, HttpServletResponse response) throws IOExcetion,ServletException { 本Servlet只處理的具體業(yè)務(wù)邏輯代碼 } }父類(lèi)方法中間的某段代碼不確定,留給子類(lèi)干,就用模板方法設(shè)計(jì)模式。備注:這道題的思路是先從總體解釋抽象類(lèi)和接口的基本概念,然后再比較兩者的語(yǔ)法細(xì)節(jié),最后再說(shuō)兩者的應(yīng)用區(qū)別。比較兩者語(yǔ)法細(xì)節(jié)區(qū)別的條理是:先從一個(gè)類(lèi)中的構(gòu)造方法、普通成員變量和方法(包括抽象方法),靜態(tài)變量和方法,繼承性等6個(gè)方面逐一去比較回答,接著從第三者繼承的角度的回答,特別是最后用了一個(gè)典型的例子來(lái)展現(xiàn)自己深厚的技術(shù)功底。2abstract的method是否可同時(shí)是static,是否可同時(shí)是native,是否可同時(shí)是synchronized? abstract的method 不可以是static的,因?yàn)槌橄蟮姆椒ㄊ且蛔宇?lèi)實(shí)現(xiàn)的,而static與子類(lèi)扯不上關(guān)系!native方法表示該方法要用另外一種依賴(lài)平臺(tái)的編程語(yǔ)言實(shí)現(xiàn)的,不存在著被子類(lèi)實(shí)現(xiàn)的問(wèn)題,所以,它也不能是抽象的,不能與abstract混用。例如,F(xiàn)ileOutputSteam類(lèi)要硬件打交道,底層的實(shí)現(xiàn)用的是操作系統(tǒng)相關(guān)的api實(shí)現(xiàn),例如,在windows用c語(yǔ)言實(shí)現(xiàn)的,所以,查看jdk 的源代碼,可以發(fā)現(xiàn)FileOutputStream的open方法的定義如下:private native void open(String name) throws FileNotFoundException。如果我們要用java調(diào)用別人寫(xiě)的c語(yǔ)言函數(shù),我們是無(wú)法直接調(diào)用的,我們需要按照java的要求寫(xiě)一個(gè)c語(yǔ)言的函數(shù),又我們的這個(gè)c語(yǔ)言函數(shù)去調(diào)用別人的c語(yǔ)言函數(shù)。由于我們的c語(yǔ)言函數(shù)是按java的要求來(lái)寫(xiě)的,我們這個(gè)c語(yǔ)言函數(shù)就可以與java對(duì)接上,java那邊的對(duì)接方式就是定義出與我們這個(gè)c函數(shù)相對(duì)應(yīng)的方法,java中對(duì)應(yīng)的方法不需要寫(xiě)具體的代碼,但需要在前面聲明native。關(guān)于synchronized與abstract合用的問(wèn)題,我覺(jué)得也不行,因?yàn)樵谖規(guī)啄甑膶W(xué)習(xí)和開(kāi)發(fā)中,從來(lái)沒(méi)見(jiàn)到過(guò)這種情況,并且我覺(jué)得synchronized應(yīng)該是作用在一個(gè)具體的方法上才有意義。而且,方法上的synchronized同步所使用的同步鎖對(duì)象是this,而抽象方法上無(wú)法確定this是什么。 2什么是內(nèi)部類(lèi)?Static Nested Class 和 Inner Class的不同。內(nèi)部類(lèi)就是在一個(gè)類(lèi)的內(nèi)部定義的類(lèi),內(nèi)部類(lèi)中不能定義靜態(tài)成員(靜態(tài)成員不是對(duì)象的特性,只是為了找一個(gè)容身之處,所以需要放到一個(gè)類(lèi)中而已,這么一點(diǎn)小事,你還要把它放到類(lèi)內(nèi)部的一個(gè)類(lèi)中,過(guò)分了??!提供內(nèi)部類(lèi),不是為讓你干這種事情,無(wú)聊,不讓你干。我想可能是既然靜態(tài)成員類(lèi)似c語(yǔ)言的全局變量,而內(nèi)部類(lèi)通常是用于創(chuàng)建內(nèi)部對(duì)象用的,所以,把“全局變量”放在內(nèi)部類(lèi)中就是毫無(wú)意義的事情,既然是毫無(wú)意義的事情,就應(yīng)該被禁止),內(nèi)部類(lèi)可以直接訪(fǎng)問(wèn)外部類(lèi)中的成員變量,內(nèi)部類(lèi)可以定義在外部類(lèi)的方法外面,也可以定義在外部類(lèi)的方法體中,如下所示:public class Outer{ int out_x = 0。 public void method() { Inner1 inner1 = new Inner1()。 public class Inner2 //在方法體內(nèi)部定義的內(nèi)部類(lèi) { public method() { out_x = 3。 } } Inner2 inner2 = new Inner2()。 } public class Inner1 //在方法體外面定義的內(nèi)部類(lèi) { } }在方法體外面定義的內(nèi)部類(lèi)的訪(fǎng)問(wèn)類(lèi)型可以是public,protecte,默認(rèn)的,private等4種類(lèi)型,這就好像類(lèi)中定義的成員變量有4種訪(fǎng)問(wèn)類(lèi)型一樣,它們決定這個(gè)內(nèi)部類(lèi)的定義對(duì)其他類(lèi)是否可見(jiàn);對(duì)于這種情況,我們也可以在外面創(chuàng)建內(nèi)部類(lèi)的實(shí)例對(duì)象,創(chuàng)建內(nèi)部類(lèi)的實(shí)例對(duì)象時(shí),一定要先創(chuàng)建外部類(lèi)的實(shí)例對(duì)象,然后用這個(gè)外部類(lèi)的實(shí)例對(duì)象去創(chuàng)建內(nèi)部類(lèi)的實(shí)例對(duì)象,代碼如下:Outer outer = new Outer()。 inner1 = Innner1()。在方法內(nèi)部定義的內(nèi)部類(lèi)前面不能有訪(fǎng)問(wèn)類(lèi)型修飾符,就好像方法中定義的局部變量一樣,但這種內(nèi)部類(lèi)的前面可以使用final或abstract修飾符。這種內(nèi)部類(lèi)對(duì)其他類(lèi)是不可見(jiàn)的其他類(lèi)無(wú)法引用這種內(nèi)部類(lèi),但是這種內(nèi)部類(lèi)創(chuàng)建的實(shí)例對(duì)象可以傳遞給其他類(lèi)訪(fǎng)問(wèn)。這種內(nèi)部類(lèi)必須是先定義,后使用,即內(nèi)部類(lèi)的定義代碼必須出現(xiàn)在使用該類(lèi)之前,這與方法中的局部變量必須先定義后使用的道理也是一樣的。這種內(nèi)部類(lèi)可以訪(fǎng)問(wèn)方法體中的局部變量,但是,該局部變量前必須加final修飾符。對(duì)于這些細(xì)節(jié),只要在eclipse寫(xiě)代碼試試,根據(jù)開(kāi)發(fā)工具提示的各類(lèi)錯(cuò)誤信息就可以馬上了解到。在方法體內(nèi)部還可以采用如下語(yǔ)法來(lái)創(chuàng)建一種匿名內(nèi)部類(lèi),即定義某一接口或類(lèi)的子類(lèi)的同時(shí),還創(chuàng)建了該子類(lèi)的實(shí)例對(duì)象,無(wú)需為該子類(lèi)定義名稱(chēng):public class Outer{ public void start() { new Thread(new Runable(){ public void run(){}。}).start()。 }}最后,在方法外部定義的內(nèi)部類(lèi)前面可以加上static關(guān)鍵字,從而成為Static Nested Class,它不再具有內(nèi)部類(lèi)的特性,所有,從狹義上講,它不是內(nèi)部類(lèi)。Static Nested Class與普通類(lèi)在運(yùn)行時(shí)的行為和功能上沒(méi)有什么區(qū)別,只是在編程引用時(shí)的語(yǔ)法上有一些差別,它可以定義成public、protected、默認(rèn)的、private等多種類(lèi)型,而普通類(lèi)只能定義成public和默認(rèn)的這兩種類(lèi)型。在外面引用Static Nested Class類(lèi)的名稱(chēng)為“”。在外面不需要?jiǎng)?chuàng)建外部類(lèi)的實(shí)例對(duì)象,就可以直接創(chuàng)建Static Nested Class,例如,假設(shè)Inner是定義在Outer類(lèi)中的Static Nested Class,那么可以使用如下語(yǔ)句創(chuàng)建Inner類(lèi): inner = new ()。由于static Nested Class不依賴(lài)于外部類(lèi)的實(shí)例對(duì)象,所以,static Nested Class能訪(fǎng)問(wèn)外部類(lèi)的非static成員變量。當(dāng)在外部類(lèi)中訪(fǎng)問(wèn)Static Nested Class時(shí),可以直接使用Static Nested Class的名字,而不需要加上外部類(lèi)的名字了,在Static Nested Class中也可以直接引用外部類(lèi)的static的成員變量,不需要加上外部類(lèi)的名字。在靜態(tài)方法中定義的內(nèi)部類(lèi)也是Static Nested Class,這時(shí)候不能在類(lèi)前面加static關(guān)鍵字,靜態(tài)方法中的Static Nested Class與普通方法中的內(nèi)部類(lèi)的應(yīng)用方式很相似,它除了可以直接訪(fǎng)問(wèn)外部類(lèi)中的static的成員變量,還可以訪(fǎng)問(wèn)靜態(tài)方法中的局部變量,但是,該局部變量前必須加final修飾符。備注:首先根據(jù)你的印象說(shuō)出你對(duì)內(nèi)部類(lèi)的總體方面的特點(diǎn):例如,在兩個(gè)地方可以定義,可以訪(fǎng)問(wèn)外部類(lèi)的成員變量,不能定義靜態(tài)成員,這是大的特點(diǎn)。然后再說(shuō)一些細(xì)節(jié)方面的知識(shí),例如,幾種定義方式的語(yǔ)法區(qū)別,靜態(tài)內(nèi)部類(lèi),以及匿名內(nèi)部類(lèi)。2內(nèi)部類(lèi)可以引用它的包含類(lèi)的成員嗎?有沒(méi)有什么限制? 完全可以。如果不是靜態(tài)內(nèi)部類(lèi),那沒(méi)有什么限制! 如果你把靜態(tài)嵌套類(lèi)當(dāng)作內(nèi)部類(lèi)的一種特例,那在這種情況下不可以訪(fǎng)問(wèn)外部類(lèi)的普通成員變量,而只能訪(fǎng)問(wèn)外部類(lèi)中的靜態(tài)成員,例如,下面的代碼:class Outer{ static int x。 static class Inner { void test() { syso(x)。 } }}答題時(shí),也要能察言觀色,揣摩提問(wèn)者的心思,顯然人家希望你說(shuō)的是靜態(tài)內(nèi)部類(lèi)不能訪(fǎng)問(wèn)外部類(lèi)的成員,但你一上來(lái)就頂牛,這不好,要先順著人家,讓人家滿(mǎn)意,然后再說(shuō)特殊情況,讓人家吃驚。2Anonymous Inner Class (匿名內(nèi)部類(lèi)) 是否可以extends(繼承)其它類(lèi),是否可以implements(實(shí)現(xiàn))interface(接口)? 可以繼承其他類(lèi)或?qū)崿F(xiàn)其他接口。不僅是可以,而是必須!2()方法調(diào)用下面程序的輸出結(jié)果是多少?import 。public class Test extends Date{ public static void main(String[] args) { new Test().test()。 } public void test(){ (().getName())。 }}很奇怪,結(jié)果是Test這屬于腦筋急轉(zhuǎn)彎的題目,在一個(gè)qq群有個(gè)網(wǎng)友正好問(wèn)過(guò)這個(gè)問(wèn)題,我覺(jué)得挺有趣,就研究了一下,沒(méi)想到今天還被你面到了,哈哈。在test方法中,直接調(diào)用getClass().getName()方法,返回的是Test類(lèi)名由于getClass()在Object類(lèi)中定義成了final,子類(lèi)不能覆蓋該方法,所以,在test方法中調(diào)用getClass().getName()方法,其實(shí)就是在調(diào)用從父類(lèi)繼承的getClass()方法,().getName()方法,所以,().getName()方法返回的也應(yīng)該是Test。如果想得到父類(lèi)的名稱(chēng),應(yīng)該用如下代碼:getClass().getSuperClass().getName()。String是最基本的數(shù)據(jù)類(lèi)型嗎? 基本數(shù)據(jù)類(lèi)型包括byte、int、char、long、float、double、boolean和short。 ,因此不可以繼承這個(gè)類(lèi)、不能修改這個(gè)類(lèi)。為了提高效率節(jié)省空間,我們應(yīng)該用StringBuffer類(lèi) 3Strings=Hello。s=s+world!。這兩行代碼執(zhí)行后,原始的
點(diǎn)擊復(fù)制文檔內(nèi)容
高考資料相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1