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

正文內(nèi)容

it公司java面試寶典面試題-資料下載頁(yè)

2025-07-13 17:58本頁(yè)面

【導(dǎo)讀】抽象類是否可實(shí)現(xiàn)接口?;這兩行代碼執(zhí)行后,原始的。String對(duì)象中的內(nèi)容到底變了沒(méi)有?JDK為每種類型的流提供了一些抽象類以供繼。并考慮2種回收機(jī)

  

【正文】 ervletResponse response) throws IOExcetion,ServletException { 本 Servlet 只處理的具體業(yè)務(wù)邏輯代碼 } } 父類方法中間的某段代碼不確定,留給子類干,就用模板方法設(shè)計(jì)模式。 備注:這道題的思路是先從總體解釋抽象類和接口的基本概念,然后再比較兩者的語(yǔ)法細(xì)節(jié),最后再說(shuō)兩者的應(yīng)用區(qū)別。比較兩者語(yǔ)法細(xì)節(jié)區(qū)別的條理是:先從一個(gè) 類中的構(gòu)造方法、普通成員變量和方法(包括抽象方法),靜態(tài)變量和方法,繼承性等 6個(gè)方面逐一去比較回答,接著從第三者繼承的角度的回答,特別是最后用了 一個(gè)典型的例子來(lái)展現(xiàn)自己深厚的技術(shù)功底。 2 abstract 的 method 是否可同時(shí)是 static,是否可同時(shí)是 native,是否可同時(shí)是 synchronized? abstract 的 method 不可以是 static 的,因?yàn)槌橄蟮姆椒ㄊ且蛔宇悓?shí)現(xiàn)的,而 static 與子類扯不上關(guān)系! native 方法表示該方法要用另外一種依賴平臺(tái)的編程語(yǔ)言實(shí)現(xiàn)的,不存在著被子類實(shí)現(xiàn)的問(wèn)題,所以,它也不能是抽象的,不能與 abstract 混用。例 如,F(xiàn)ileOutputSteam 類要硬件打交道,底層的實(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)部類? Static Nested Class 和 Inner Class 的不同。 內(nèi)部類就是在一個(gè)類的內(nèi)部定義的類,內(nèi)部類中不能定義靜態(tài)成員(靜態(tài)成員不是對(duì)象的特性,只是為了找一個(gè) 容身之處,所以需要放到一個(gè)類中而已,這么一點(diǎn)小 事,你還要把它放到類內(nèi)部的一個(gè)類中,過(guò)分了??!提供內(nèi)部類,不是為讓你干這種事情,無(wú)聊,不讓你干。我想可能是既然靜態(tài)成員類似 c 語(yǔ)言的全局變量,而內(nèi) 部類通常是用于創(chuàng)建內(nèi)部對(duì)象用的,所以,把 “ 全局變量 ”放在內(nèi)部類中就是毫無(wú)意義的事情,既然是毫無(wú)意義的事情,就應(yīng)該被禁止),內(nèi)部類可以直接訪問(wèn)外部 類中的成員變量,內(nèi)部類可以定義在外部類的方法外面,也可以定義在外部類的方法體中,如下所示: public class Outer { int out_x = 0。 public void method() { Inner1 inner1 = new Inner1()。 public class Inner2 //在方法體內(nèi)部定義的內(nèi)部類 { public method() { out_x = 3。 } } Inner2 inner2 = new Inner2()。 } public class Inner1 //在方法體外面定義的內(nèi)部類 { } } 在方法體外面定義的內(nèi)部類的訪問(wèn)類型可以是 public,protecte,默認(rèn)的,private 等 4 種類型,這就好像類中定義的成員 變量有 4 種訪問(wèn)類 型一樣,它們決定這個(gè)內(nèi)部類的定義對(duì)其他類是否可見(jiàn);對(duì)于這種情況,我們也可以在外面創(chuàng)建內(nèi)部類的實(shí)例對(duì)象,創(chuàng)建內(nèi)部類的實(shí)例對(duì)象時(shí),一定要先創(chuàng)建外部類 的實(shí)例對(duì)象,然后用這個(gè)外部類的實(shí)例對(duì)象去創(chuàng)建內(nèi)部類的實(shí)例對(duì)象,代碼如下: Outer outer = new Outer()。 inner1 = Innner1()。 在方法內(nèi)部定義的內(nèi)部類前面不能有訪問(wèn)類型修飾符,就好像方法中定義的局部變量一樣,但這種內(nèi)部類的前面可以使用 final 或 abstract 修飾 符。這種內(nèi)部類對(duì)其他類是不可見(jiàn)的其他類無(wú)法引用這種內(nèi)部類,但是這種內(nèi)部類創(chuàng)建的實(shí)例對(duì)象可以傳遞給其他類訪問(wèn)。這種內(nèi)部類必須是先定義,后使用,即內(nèi) 部類的定義代碼必須出現(xiàn)在使用該類之前,這與方法中的局部變量必須先定義后使用的道理也是一樣的。這種內(nèi)部類可以訪問(wèn)方法體中的局部變量,但是,該局部變 量前必須加 final 修飾符。 對(duì)于這些細(xì)節(jié),只要在 eclipse 寫(xiě)代碼試試,根據(jù)開(kāi)發(fā)工具提示的各類錯(cuò)誤信息就可以馬上了解到。 在方法體內(nèi)部還可以采用如下語(yǔ)法來(lái)創(chuàng)建一種匿名內(nèi)部類,即定義某一接口或類的子類的同時(shí),還創(chuàng) 建了該子類的實(shí)例對(duì)象,無(wú)需為該子類定義名稱: public class Outer { public void start() { new Thread( new Runable(){ public void run(){}。 } ).start()。 } } 最后,在方法外部定義的內(nèi)部類前面可以加上 static 關(guān)鍵字,從而成為Static Nested Class,它不再具有內(nèi)部類的特性,所有,從狹義上講,它不是內(nèi)部類。 Static Nested Class 與普通類在運(yùn)行時(shí)的行為和功能上沒(méi)有什么區(qū)別,只是 在編程引用時(shí)的語(yǔ)法上有一些差別,它可以定義成 public、protected、默認(rèn)的、 private 等多種類型,而普通類只能定義成 public 和默認(rèn)的這兩種類型。在外面引用 Static Nested Class 類的名稱為 “ 外部類名 .內(nèi)部類名 ” 。在外面不需要?jiǎng)?chuàng)建外部類的實(shí)例對(duì)象,就可以直接創(chuàng)建 Static Nested Class,例如,假設(shè) Inner 是定義在 Outer 類中的 Static Nested Class,那么可以使用如下語(yǔ)句創(chuàng)建 Inner 類: inner = new ()。 由于 static Nested Class 不依賴于外部類的實(shí)例對(duì)象,所以, static Nested Class 能訪問(wèn)外部類的非 static 成員變量。當(dāng)在外部類中訪問(wèn) Static Nested Class 時(shí),可以直接使用 Static Nested Class 的名字,而不需要加上外部類的名字了,在 Static Nested Class 中也可以直接引用外部類的 static 的成員變量,不需要加上外部類的名字。 在靜態(tài)方法中定義的內(nèi)部類也是 Static Nested Class,這時(shí)候不能在 類前面加 static 關(guān)鍵字,靜態(tài)方法中的 Static Nested Class 與普通方法中的內(nèi)部類的應(yīng)用方式很相似,它除了可以直接訪問(wèn)外部類中的 static 的成員變量,還可以訪問(wèn)靜態(tài)方法中的局部變量,但是,該局部 變量前必須加 final 修飾符。 備注:首先根據(jù)你的印象說(shuō)出你對(duì)內(nèi)部類的總體方面的特點(diǎn):例如,在兩個(gè)地方可以定義,可以訪問(wèn)外部類的成員變量,不能定義靜態(tài)成員,這是大的特點(diǎn)。然后再說(shuō)一些細(xì)節(jié)方面的知識(shí),例如,幾種定義方式的語(yǔ)法區(qū)別,靜態(tài)內(nèi)部類,以及匿名內(nèi)部類。 2內(nèi)部類可以引用它的包含類的成員嗎? 有沒(méi)有什么限制? 完全可以。如果不是靜態(tài)內(nèi)部類,那沒(méi)有什么限制! 如果你把靜態(tài)嵌套類當(dāng)作內(nèi)部類的一種特例,那在這種情況下不可以訪問(wèn)外部類的普通成員變量,而只能訪問(wèn)外部類中的靜態(tài)成員,例如,下面的代碼: class Outer { static int x。 static class Inner { void test() { syso(x)。 } } } 答題時(shí),也要能察言觀色,揣摩提問(wèn)者的心思,顯然人家希望你說(shuō)的是靜態(tài)內(nèi)部類不能訪問(wèn)外部類的成員,但你一上來(lái)就頂牛,這不好,要先順著人家,讓人家滿意,然后再說(shuō) 特殊情況,讓人家吃驚。 2 Anonymous Inner Class (匿名內(nèi)部類 ) 是否可以 extends(繼承 )其它類,是否可以 implements(實(shí)現(xiàn) )interface(接口 )? 可以繼承其他類或?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 類名 由于 getClass()在 Object 類中定義成了 final,子類不能覆蓋該方法, 所以,在 test 方法中調(diào)用 getClass().getName()方法,其實(shí)就是在調(diào)用從父類繼承的getClass()方法,等效于調(diào)用 ().getName()方法,所以,().getName()方法返回的也應(yīng)該是 Test。 如果想得到父類的名稱,應(yīng)該用如下代碼: getClass().getSuperClass().getName()。 String 是最基本的數(shù)據(jù)類型嗎 ? 基本數(shù)據(jù)類型包括 byte、 int、 char、 long、 float、 double、 boolean 和short。 類是 final 類型的,因此不可以繼承這個(gè)類、不能修改這個(gè)類。為了提高效率節(jié)省空間,我們應(yīng)該用 StringBuffer 類 3 String s = Hello。s = s + world!。這兩行代碼執(zhí)行后,原始的String 對(duì)象中的內(nèi)容到底變了沒(méi)有? 沒(méi)有。因?yàn)?String 被設(shè)計(jì)成不可變 (immutable)類,所以它的所有對(duì)象都是不可變對(duì)象。在這段代碼中, s 原先指向一個(gè) String 對(duì)象,內(nèi)容 是 Hello,然后我們對(duì) s 進(jìn)行了 +操作,那么 s 所指向的那個(gè)對(duì)象是否發(fā)生了改變呢?答案是沒(méi)有。這時(shí), s不指向原來(lái)那個(gè)對(duì)象了,而指向了另一個(gè) String 對(duì)象,內(nèi)容為 Hello world!,原來(lái)那個(gè)對(duì)象還存在于內(nèi)存之中,只是 s這個(gè)引用變量不再指向它了。 通過(guò)上面的說(shuō)明,我們很容易導(dǎo)出另一個(gè)結(jié)論,如果經(jīng)常對(duì)字符串進(jìn)行各種各樣的修改,或者說(shuō),不可預(yù)見(jiàn)的修改,那么使用 String 來(lái)代表字符串的話會(huì)引起 很大的內(nèi)存開(kāi)銷。因?yàn)? String 對(duì)象建立之后不能再改變,所以對(duì)于每一個(gè)不同的字符串,都需要一個(gè) String 對(duì)象來(lái)表示。這時(shí),應(yīng)該考慮 使用StringBuffer 類, 它允許修改,而不是每個(gè)不同的字符串都要生成一個(gè)新的對(duì)象。并且,這兩種類的對(duì)象轉(zhuǎn)換十分容易。 同時(shí),我們還可以知道,如果要使用內(nèi)容相同的字符串,不必每次都 new 一個(gè)String。例如我們要在構(gòu)造器中對(duì)一個(gè)名叫 s的 String 引用變量進(jìn)行初始化,把它設(shè)置為初始值,應(yīng)當(dāng)這樣做: public class Demo { private String s。 ... public Demo { s = Initial Value。 } ... } 而非 s = new String(Initial Value)。 后者每次都會(huì)調(diào)用構(gòu)造器,生成新對(duì)象,性能低下且內(nèi)存開(kāi)銷大,并且沒(méi)有意義,因?yàn)?String 對(duì)象不可改變,所以對(duì)于內(nèi)容相同的字符串,只要一個(gè)String 對(duì)象來(lái)表示就可以了。也就說(shuō),多次調(diào)用上面的構(gòu)造器創(chuàng)建多個(gè)對(duì)象,他們的 String 類型屬性 s 都指向同一個(gè)對(duì)象。 上面的結(jié)論還基于這樣一個(gè)事實(shí):對(duì)于字符串常量,如果內(nèi)容相同, Java 認(rèn)為它們代表同一個(gè) String 對(duì)象。而用關(guān)鍵字 new 調(diào)用構(gòu)造器,總是會(huì)創(chuàng)建一個(gè)新的對(duì)象,無(wú)論內(nèi)容是否相同。 至于為什么要把 String 類設(shè)計(jì)成不可變 類,是它的用途決定的。其實(shí)不只String,很多 Java 標(biāo)準(zhǔn)類庫(kù)中的類都是不可變的。在開(kāi)發(fā)一個(gè)系統(tǒng)的時(shí) 候,我們有時(shí)候也需要設(shè)計(jì)不可變類,來(lái)傳遞一組相關(guān)的值,這也是面向?qū)ο笏枷氲捏w現(xiàn)。不可變類有一些優(yōu)點(diǎn),比如因?yàn)樗膶?duì)象是只讀的,所以多線程并發(fā)訪問(wèn) 也不會(huì)有任何問(wèn)題。當(dāng)然也有一些缺點(diǎn),比如每個(gè)不同的狀態(tài)都要一個(gè)對(duì)象來(lái)代表,可能會(huì)造成性能上的問(wèn)題。所以 Java 標(biāo)準(zhǔn)類庫(kù)還提供了
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1