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

正文內(nèi)容

it公司java面試寶典面試題-資料下載頁

2025-07-13 17:58本頁面

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

  

【正文】 ervletResponse response) throws IOExcetion,ServletException { 本 Servlet 只處理的具體業(yè)務(wù)邏輯代碼 } } 父類方法中間的某段代碼不確定,留給子類干,就用模板方法設(shè)計(jì)模式。 備注:這道題的思路是先從總體解釋抽象類和接口的基本概念,然后再比較兩者的語法細(xì)節(jié),最后再說兩者的應(yīng)用區(qū)別。比較兩者語法細(xì)節(jié)區(qū)別的條理是:先從一個(gè) 類中的構(gòu)造方法、普通成員變量和方法(包括抽象方法),靜態(tài)變量和方法,繼承性等 6個(gè)方面逐一去比較回答,接著從第三者繼承的角度的回答,特別是最后用了 一個(gè)典型的例子來展現(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)的編程語言實(shí)現(xiàn)的,不存在著被子類實(shí)現(xiàn)的問題,所以,它也不能是抽象的,不能與 abstract 混用。例 如,F(xiàn)ileOutputSteam 類要硬件打交道,底層的實(shí)現(xiàn)用的是操作系統(tǒng)相關(guān)的 api 實(shí)現(xiàn),例如,在 windows 用 c語言實(shí)現(xiàn)的,所以,查看 jdk 的源代碼,可以發(fā)現(xiàn)FileOutputStream 的 open 方法的定義如下: private native void open(String name) throws FileNotFoundException。 如果我們要用 java 調(diào)用別人寫的 c 語言函數(shù),我們是無法直接調(diào)用的,我們需要按照 java 的要求寫一個(gè) c 語言的函數(shù),又我們的這個(gè) c語言函數(shù)去調(diào)用別人 的 c 語言函數(shù)。由于我們的 c語言函數(shù)是按 java 的要求來寫的,我們這個(gè) c語言函數(shù)就可以與 java 對接上, java 那邊的對接方式就是定義出與我們這個(gè) c函數(shù)相對應(yīng)的方法, java 中對應(yīng)的方法不需要寫具體的代碼,但需要在前面聲明 native。 關(guān)于 synchronized 與 abstract 合用的問題,我覺得也不行,因?yàn)樵谖規(guī)啄甑膶W(xué)習(xí)和開發(fā)中,從來沒見到過這種情況,并且我覺得 synchronized 應(yīng)該是作用在一個(gè)具體的方法上才有意義。而且,方法上的 synchronized 同步所使用的同步鎖對象是 this,而抽象方法 上無法確定 this 是什么。 2什么是內(nèi)部類? Static Nested Class 和 Inner Class 的不同。 內(nèi)部類就是在一個(gè)類的內(nèi)部定義的類,內(nèi)部類中不能定義靜態(tài)成員(靜態(tài)成員不是對象的特性,只是為了找一個(gè) 容身之處,所以需要放到一個(gè)類中而已,這么一點(diǎn)小 事,你還要把它放到類內(nèi)部的一個(gè)類中,過分了?。√峁﹥?nèi)部類,不是為讓你干這種事情,無聊,不讓你干。我想可能是既然靜態(tài)成員類似 c 語言的全局變量,而內(nèi) 部類通常是用于創(chuàng)建內(nèi)部對象用的,所以,把 “ 全局變量 ”放在內(nèi)部類中就是毫無意義的事情,既然是毫無意義的事情,就應(yīng)該被禁止),內(nèi)部類可以直接訪問外部 類中的成員變量,內(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)部類的訪問類型可以是 public,protecte,默認(rèn)的,private 等 4 種類型,這就好像類中定義的成員 變量有 4 種訪問類 型一樣,它們決定這個(gè)內(nèi)部類的定義對其他類是否可見;對于這種情況,我們也可以在外面創(chuàng)建內(nèi)部類的實(shí)例對象,創(chuàng)建內(nèi)部類的實(shí)例對象時(shí),一定要先創(chuàng)建外部類 的實(shí)例對象,然后用這個(gè)外部類的實(shí)例對象去創(chuàng)建內(nèi)部類的實(shí)例對象,代碼如下: Outer outer = new Outer()。 inner1 = Innner1()。 在方法內(nèi)部定義的內(nèi)部類前面不能有訪問類型修飾符,就好像方法中定義的局部變量一樣,但這種內(nèi)部類的前面可以使用 final 或 abstract 修飾 符。這種內(nèi)部類對其他類是不可見的其他類無法引用這種內(nèi)部類,但是這種內(nèi)部類創(chuàng)建的實(shí)例對象可以傳遞給其他類訪問。這種內(nèi)部類必須是先定義,后使用,即內(nèi) 部類的定義代碼必須出現(xiàn)在使用該類之前,這與方法中的局部變量必須先定義后使用的道理也是一樣的。這種內(nèi)部類可以訪問方法體中的局部變量,但是,該局部變 量前必須加 final 修飾符。 對于這些細(xì)節(jié),只要在 eclipse 寫代碼試試,根據(jù)開發(fā)工具提示的各類錯(cuò)誤信息就可以馬上了解到。 在方法體內(nèi)部還可以采用如下語法來創(chuàng)建一種匿名內(nèi)部類,即定義某一接口或類的子類的同時(shí),還創(chuàng) 建了該子類的實(shí)例對象,無需為該子類定義名稱: 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í)的行為和功能上沒有什么區(qū)別,只是 在編程引用時(shí)的語法上有一些差別,它可以定義成 public、protected、默認(rèn)的、 private 等多種類型,而普通類只能定義成 public 和默認(rèn)的這兩種類型。在外面引用 Static Nested Class 類的名稱為 “ 外部類名 .內(nèi)部類名 ” 。在外面不需要?jiǎng)?chuàng)建外部類的實(shí)例對象,就可以直接創(chuàng)建 Static Nested Class,例如,假設(shè) Inner 是定義在 Outer 類中的 Static Nested Class,那么可以使用如下語句創(chuàng)建 Inner 類: inner = new ()。 由于 static Nested Class 不依賴于外部類的實(shí)例對象,所以, static Nested Class 能訪問外部類的非 static 成員變量。當(dāng)在外部類中訪問 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)用方式很相似,它除了可以直接訪問外部類中的 static 的成員變量,還可以訪問靜態(tài)方法中的局部變量,但是,該局部 變量前必須加 final 修飾符。 備注:首先根據(jù)你的印象說出你對內(nèi)部類的總體方面的特點(diǎn):例如,在兩個(gè)地方可以定義,可以訪問外部類的成員變量,不能定義靜態(tài)成員,這是大的特點(diǎn)。然后再說一些細(xì)節(jié)方面的知識(shí),例如,幾種定義方式的語法區(qū)別,靜態(tài)內(nèi)部類,以及匿名內(nèi)部類。 2內(nèi)部類可以引用它的包含類的成員嗎? 有沒有什么限制? 完全可以。如果不是靜態(tài)內(nèi)部類,那沒有什么限制! 如果你把靜態(tài)嵌套類當(dāng)作內(nèi)部類的一種特例,那在這種情況下不可以訪問外部類的普通成員變量,而只能訪問外部類中的靜態(tài)成員,例如,下面的代碼: class Outer { static int x。 static class Inner { void test() { syso(x)。 } } } 答題時(shí),也要能察言觀色,揣摩提問者的心思,顯然人家希望你說的是靜態(tài)內(nèi)部類不能訪問外部類的成員,但你一上來就頂牛,這不好,要先順著人家,讓人家滿意,然后再說 特殊情況,讓人家吃驚。 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)友正好問過這個(gè)問題,我覺得挺有趣,就研究了一下,沒想到今天還被你面到了,哈哈。 在 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 對象中的內(nèi)容到底變了沒有? 沒有。因?yàn)?String 被設(shè)計(jì)成不可變 (immutable)類,所以它的所有對象都是不可變對象。在這段代碼中, s 原先指向一個(gè) String 對象,內(nèi)容 是 Hello,然后我們對 s 進(jìn)行了 +操作,那么 s 所指向的那個(gè)對象是否發(fā)生了改變呢?答案是沒有。這時(shí), s不指向原來那個(gè)對象了,而指向了另一個(gè) String 對象,內(nèi)容為 Hello world!,原來那個(gè)對象還存在于內(nèi)存之中,只是 s這個(gè)引用變量不再指向它了。 通過上面的說明,我們很容易導(dǎo)出另一個(gè)結(jié)論,如果經(jīng)常對字符串進(jìn)行各種各樣的修改,或者說,不可預(yù)見的修改,那么使用 String 來代表字符串的話會(huì)引起 很大的內(nèi)存開銷。因?yàn)? String 對象建立之后不能再改變,所以對于每一個(gè)不同的字符串,都需要一個(gè) String 對象來表示。這時(shí),應(yīng)該考慮 使用StringBuffer 類, 它允許修改,而不是每個(gè)不同的字符串都要生成一個(gè)新的對象。并且,這兩種類的對象轉(zhuǎn)換十分容易。 同時(shí),我們還可以知道,如果要使用內(nèi)容相同的字符串,不必每次都 new 一個(gè)String。例如我們要在構(gòu)造器中對一個(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)造器,生成新對象,性能低下且內(nèi)存開銷大,并且沒有意義,因?yàn)?String 對象不可改變,所以對于內(nèi)容相同的字符串,只要一個(gè)String 對象來表示就可以了。也就說,多次調(diào)用上面的構(gòu)造器創(chuàng)建多個(gè)對象,他們的 String 類型屬性 s 都指向同一個(gè)對象。 上面的結(jié)論還基于這樣一個(gè)事實(shí):對于字符串常量,如果內(nèi)容相同, Java 認(rèn)為它們代表同一個(gè) String 對象。而用關(guān)鍵字 new 調(diào)用構(gòu)造器,總是會(huì)創(chuàng)建一個(gè)新的對象,無論內(nèi)容是否相同。 至于為什么要把 String 類設(shè)計(jì)成不可變 類,是它的用途決定的。其實(shí)不只String,很多 Java 標(biāo)準(zhǔn)類庫中的類都是不可變的。在開發(fā)一個(gè)系統(tǒng)的時(shí) 候,我們有時(shí)候也需要設(shè)計(jì)不可變類,來傳遞一組相關(guān)的值,這也是面向?qū)ο笏枷氲捏w現(xiàn)。不可變類有一些優(yōu)點(diǎn),比如因?yàn)樗膶ο笫侵蛔x的,所以多線程并發(fā)訪問 也不會(huì)有任何問題。當(dāng)然也有一些缺點(diǎn),比如每個(gè)不同的狀態(tài)都要一個(gè)對象來代表,可能會(huì)造成性能上的問題。所以 Java 標(biāo)準(zhǔn)類庫還提供了
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1