面向?qū)ο蠊P試題(2)_第1頁(yè)
面向?qū)ο蠊P試題(2)_第2頁(yè)
面向?qū)ο蠊P試題(2)_第3頁(yè)
面向?qū)ο蠊P試題(2)_第4頁(yè)
面向?qū)ο蠊P試題(2)_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、一、填空題1 Java中一個(gè)類(lèi)可以有 一 個(gè)父類(lèi)。2 如果一個(gè)類(lèi)的聲明中沒(méi)有使用extends關(guān)鍵字,這個(gè)類(lèi)被系統(tǒng)默認(rèn)為是 Object 類(lèi)的子類(lèi)。3 子類(lèi)自然地繼承了其父類(lèi)中不是 private 的成員變量作為自己的成員變量。4 當(dāng)子類(lèi)中定義的成員變量和父類(lèi)中的成員變量同名時(shí),子類(lèi)的成員變量 隱藏 了父類(lèi)的成員變量。5 子類(lèi)通過(guò)成員變量的隱藏和方法的 重寫(xiě) 可以把父類(lèi)的狀態(tài)和行為改變?yōu)樽陨淼臓顟B(tài)和行為。6 對(duì)于重寫(xiě)或繼承的方法,Java運(yùn)行時(shí)系統(tǒng)根據(jù)調(diào)用方法的 實(shí)例 的類(lèi)型來(lái)選擇調(diào)用哪個(gè)方法。7 對(duì)于子類(lèi)創(chuàng)建的一個(gè)對(duì)象,如果子類(lèi)重寫(xiě)了父類(lèi)的方法,則運(yùn)行時(shí)系統(tǒng)調(diào)用 子類(lèi) 的方法。8 對(duì)于子類(lèi)創(chuàng)

2、建的一個(gè)對(duì)象,如果子類(lèi)繼承了父類(lèi)的方法,未重寫(xiě),則運(yùn)行時(shí)調(diào)用_父類(lèi)_的方法。9 在Java語(yǔ)言中多態(tài)性體現(xiàn)在由方法重載實(shí)現(xiàn)的靜態(tài)多態(tài)性和 重寫(xiě) 實(shí)現(xiàn)的動(dòng)態(tài)多態(tài)性。10 final 類(lèi)不能被繼承,即不能有子類(lèi)。11 abstract 類(lèi)不能創(chuàng)建對(duì)象,必須產(chǎn)生其子類(lèi),由子類(lèi)創(chuàng)建對(duì)象。12 如果一個(gè)方法被修飾為 final 方法,則這個(gè)方法不能被重寫(xiě)。13 對(duì)于 abstract 方法,只允許聲明,而不允許實(shí)現(xiàn)。14 如果一個(gè)方法被修飾為final方法,則這個(gè)方法不能 被重寫(xiě) 。15 如果一個(gè)類(lèi)是一個(gè)abstract類(lèi)的子類(lèi),它必須具體實(shí)現(xiàn) 父類(lèi) 的abstract方法。16 局部變量的名字與成員變

3、量的名字相同,若想在該方法內(nèi)使用成員變量,必須使用關(guān)鍵字 this 。17 在關(guān)鍵字中能代表當(dāng)前類(lèi)或?qū)ο蟊旧淼氖?this 。18 如果在子類(lèi)中想使用被子類(lèi)隱藏的父類(lèi)的成員變量或方法可以使用關(guān)鍵字 super 。19 子類(lèi)如果想用父類(lèi)的構(gòu)造方法,必須在子類(lèi)的構(gòu)造方法中使用,并且必須使用關(guān)鍵字 _super 來(lái)表示。20 如果在子類(lèi)中想使用被子類(lèi)隱藏了的父類(lèi)成員變量或方法就可以使用關(guān)鍵字 super 。21 Java中為了克服 單繼承 的缺點(diǎn),使用了接口,一個(gè)類(lèi)可以實(shí)現(xiàn)多個(gè)接口。22 接口 就是方法定義和常量值的集合。23 使用關(guān)鍵字 interface 來(lái)定義接口。24 接口定義包括接口的聲明

4、和 接口體 。25 一個(gè)類(lèi)通過(guò)使用關(guān)鍵字 implements 聲明自己實(shí)現(xiàn)一個(gè)或多個(gè)接口。26 如果一個(gè)類(lèi)實(shí)現(xiàn)了某個(gè)接口,那么這個(gè)類(lèi)必須實(shí)現(xiàn)該接口的 所有方法 。27 接口中的方法被默認(rèn)的訪問(wèn)權(quán)限是 public 。28 接口的定義包括 接口的聲明 和接口體。29 定義接口時(shí),接口體中只進(jìn)行方法的聲明,不允許提供方法的 具體實(shí)現(xiàn) 。30 如果接口中的方法的返回類(lèi)型不是void的,那么在類(lèi)中實(shí)現(xiàn)該接口的方法時(shí),方法體至少要有一個(gè) return 語(yǔ)句。31 內(nèi)部類(lèi) 指那些類(lèi)定義代碼被置于其他類(lèi)定義中的類(lèi)。32 泛型 是Java SE5.0的新特性。33 創(chuàng)建對(duì)象常用的方法就是使用 new 運(yùn)算符

5、和類(lèi)的構(gòu)造方法。34 把Java應(yīng)用程序中涉及到的類(lèi)壓縮成一個(gè) jar 文件。35 數(shù)組 是相同類(lèi)型的數(shù)據(jù)按順序組成的一種引用數(shù)據(jù)類(lèi)型。36 Java中定義數(shù)組后通過(guò) 數(shù)組名 加數(shù)組下標(biāo),來(lái)使用數(shù)組中的數(shù)據(jù)。37 Java中聲明數(shù)組包括數(shù)組的名字、數(shù)組包含的元素的 數(shù)據(jù)類(lèi)型 。38 聲明數(shù)組 僅僅是給出了數(shù)組名字和元素的數(shù)據(jù)類(lèi)型,要想真正的使用數(shù)組還必須為它分配內(nèi)存空間。39 一維數(shù)組通過(guò)下標(biāo)符訪問(wèn)自己的元素,需要注意的是下標(biāo)從 0 開(kāi)始。40 創(chuàng)建數(shù)組后,系統(tǒng)會(huì)給每一個(gè)數(shù)組元素一個(gè)默認(rèn)的值,如float型是 0 。41 聲明數(shù)組僅僅是給出了數(shù)組名字和元素的數(shù)據(jù)類(lèi)型,要想真正地使用數(shù)組還必須為

6、它 分配內(nèi)存空間 。42 數(shù)組聲明后,必須使用 new 運(yùn)算符分配內(nèi)存空間。43 Java中使用java.lang包中的 String 類(lèi)來(lái)創(chuàng)建一個(gè)字符串變量,因此字符串變量是類(lèi)類(lèi)型變量,是一個(gè)對(duì)象。44 創(chuàng)建一個(gè)字符串時(shí),使用String類(lèi)的 構(gòu)造方法 。45 String 類(lèi)是不可變類(lèi),對(duì)象所包含的字符串內(nèi)容永遠(yuǎn)不會(huì)被改變。46 StringBuffer 類(lèi)是可變類(lèi),對(duì)象所包含的字符串內(nèi)容可以被添加或修改。47 使用String類(lèi)的 length() 方法可以獲取一個(gè)字符串的長(zhǎng)度。48 可以使用String類(lèi)的 startWith(String s) 方法判斷一個(gè)字符串的前綴是否是字符串s

7、。49 可以使用String類(lèi)的 endsWith(String s) 方法判斷一個(gè)字符串的后綴是否是字符串s。50 可以使用String類(lèi)的 equals(String s) 方法比較一字符串是否與字符串s相同。51 字符串調(diào)用 indexOf(String s) 方法從當(dāng)前字符串的頭開(kāi)始檢索字符串s,并返回首次出現(xiàn)s 的位置。52 字符串調(diào)用indexOf方法檢索字符串s,并返回首次出現(xiàn)s 的位置。如果沒(méi)有檢索到字符串s,該方法返回的值是 +1 。53 一個(gè)字符串s 通過(guò)調(diào)用方法 trim() 得到一個(gè)字符串對(duì)象,該字符串對(duì)象是s 去掉前后空格后的字符串。54 java.lang 包中的I

8、nteger 類(lèi)調(diào)用其類(lèi)方法: parseInt 可以將“數(shù)字”格式的字符串,如“2387”,轉(zhuǎn)化為int 型數(shù)據(jù)。55 可以使用java.lang包中的 Integer 類(lèi)將形如“2387”的字符串轉(zhuǎn)化為int型數(shù)據(jù)。56 可以使用java.lang包中的 Long 類(lèi)將字符串轉(zhuǎn)化為long型數(shù)據(jù)。57 可以使用String類(lèi)直接調(diào)用 valueOf 方法將數(shù)值轉(zhuǎn)化為字符串。58 StringBuffer類(lèi)調(diào)用方法, toString() 返回緩沖區(qū)內(nèi)的字符串。59 Object類(lèi)有一個(gè)public方法是 toString() ,一個(gè)對(duì)象通過(guò)調(diào)用該方法可以獲得該對(duì)象的字符串表示。60 Obj

9、ect 類(lèi)是所有Java 類(lèi)的最終祖先,如果一個(gè)類(lèi)在聲明時(shí)沒(méi)有包含extends 關(guān)鍵詞,那么這個(gè)類(lèi)直接繼承Object類(lèi)。61 對(duì)于一個(gè)已經(jīng)不被任何引用變量引用的對(duì)象,當(dāng)垃圾回收器準(zhǔn)備回收該對(duì)象所占用的內(nèi)存時(shí),將自動(dòng)調(diào)用該對(duì)象的 finalize() 方法。62 每個(gè)Java 基本類(lèi)型在java.lang 包中都有一個(gè)相應(yīng)的 包裝 類(lèi),把基本類(lèi)型數(shù)據(jù)轉(zhuǎn)換為對(duì)象。63 在Java 集合中不能存放基本類(lèi)型數(shù)據(jù),如果要存放數(shù)字,應(yīng)該使用 包裝類(lèi)型 。64 Character 類(lèi)和Boolean 類(lèi)直接繼承Object 類(lèi),除此以外,其他包裝類(lèi)都是 java.Number 的直接子類(lèi)。65 包裝類(lèi)都

10、覆蓋了Object 類(lèi)的 toString() 方法,以字符串的形式返回包裝對(duì)象所表示的基本類(lèi)型數(shù)據(jù)。66 所有的包裝類(lèi)都是final 類(lèi)型,因此不能創(chuàng)建它們的 子類(lèi) 。67 Math 類(lèi)提供了許多用于數(shù)學(xué)運(yùn)算的靜態(tài)方法。68 Math 類(lèi)是 final 類(lèi)型的,因此不能有子類(lèi)。69 Random 類(lèi)提供了一系列用于生成隨機(jī)數(shù)的方法。70 Date 類(lèi)以毫秒數(shù)來(lái)表示特定的日期。71 java.text.DateFormat 抽象類(lèi)用于定制日期的格式, 它有一個(gè)具體子類(lèi)為 SimpleDateFormat 。72 FBigDecimal 類(lèi)能夠進(jìn)行浮點(diǎn)數(shù)的精確加法、減法和乘法運(yùn)算,對(duì)于浮點(diǎn)數(shù)的除

11、法運(yùn)算,可以滿足用戶(hù)指定的精度。73 異常處理 方法是一種非常有用的輔助性程序設(shè)計(jì)方法。采用這種方法可以使得在程序設(shè)計(jì)時(shí)將程序的正常流程與錯(cuò)誤處理分開(kāi),有利于代碼的編寫(xiě)和維護(hù)。74 按異常在編譯時(shí)是否被檢測(cè)來(lái)分,異??梢苑譃閮纱箢?lèi):受檢異常與 非受檢異常 。75 程序可以處理的異常對(duì)應(yīng)的類(lèi)是 Exception 及其子類(lèi)。76 拋出異??梢岳?try catch 語(yǔ)句。77 處理異常的方式有兩種: 捕獲異常 方式與轉(zhuǎn)移異常方式。78 捕捉異常方式是通過(guò) try catch 結(jié)構(gòu)處理異常。79 在try-catch-finally 結(jié)構(gòu)中, finally 語(yǔ)句塊一般總是會(huì)被執(zhí)行,不管有沒(méi)有異

12、常產(chǎn)生。80 異常處理流程中,其中 try 代碼塊包含了可能發(fā)生異常的程序代碼。81 異常處理流程中,其中 catch 代碼快緊跟在try 代碼塊后面,用來(lái)捕獲并處理異常。82 異常處理流程中,其中 finally 代碼塊用于釋放被占用的相關(guān)資源。83 對(duì)于程序中可能出現(xiàn)的受檢查異常,要么用trycatch 語(yǔ)句捕獲并處理它,要么用 _throw_語(yǔ)句拋出它,Java 編譯器會(huì)對(duì)此做檢查。二、問(wèn)題題1、用代碼表示A類(lèi)關(guān)聯(lián)B類(lèi)的情況。解析:一個(gè)Java應(yīng)用中不可能只有一個(gè)類(lèi),所以了解類(lèi)之間的關(guān)系對(duì)程序員來(lái)說(shuō)非常重要。關(guān)聯(lián)關(guān)系是最常用的一種關(guān)系,如果說(shuō)A關(guān)聯(lián)B,那么就是B作為A的屬性存在。關(guān)聯(lián)關(guān)系

13、是一種復(fù)用的策略,即A關(guān)聯(lián)B的時(shí)候,A可以復(fù)用B的行為。參考答案:Class A              Private B b;Public void setB(B b)This.b=b;2、請(qǐng)說(shuō)明Java語(yǔ)言中數(shù)組的基本概念,數(shù)組的作用,以及數(shù)組的聲明創(chuàng)建方式。解析:數(shù)組時(shí)任何一門(mén)語(yǔ)言里都常用的類(lèi)型,Java語(yǔ)言也不例外。程序員了解數(shù)組,不能僅僅從語(yǔ)法上了解,而應(yīng)該深入理解數(shù)組的作用。數(shù)組可

14、以用來(lái)存儲(chǔ)類(lèi)型相同的元素,作為一種數(shù)據(jù)容器使用。和數(shù)組類(lèi)似的概念是集合,也能作為數(shù)據(jù)容器使用。參考答案:數(shù)組時(shí)相同元素的集合,作為數(shù)據(jù)容器使用。聲明創(chuàng)建一個(gè)int型數(shù)組,如下所示:intx=new int3;其中3是數(shù)組的長(zhǎng)度,該數(shù)組能夠存儲(chǔ)3個(gè)int型變量。3、使用代碼,創(chuàng)建一個(gè)長(zhǎng)度為5的String型數(shù)組,并使用增強(qiáng)for循環(huán)迭代數(shù)組打印出數(shù)組中的元素。解析:增強(qiáng)for循環(huán)是JDK5增加的特性,可以方便地遍歷數(shù)組或集合。程序員需要了解的是,如果JDK版本低于5.0,則不支持這個(gè)功能。另外,并不是說(shuō)有了增強(qiáng)for循環(huán)后,傳統(tǒng)的for循環(huán)就不被使用,增強(qiáng)for循環(huán)只能用來(lái)方便地遍歷數(shù)

15、組和集合,其他情況下還要使用傳統(tǒng)的for循環(huán)。參考答案:      String sArray = new String5;For(String s:sArray)  System.out.println(s);4、說(shuō)明Arrays類(lèi)的作用。解析:在實(shí)際工作中,常常需要對(duì)數(shù)組中的元素進(jìn)行處理,例如排序等。初級(jí)程序員往往選擇自己編寫(xiě)算法實(shí)現(xiàn)。實(shí)際上APV中提供了Arrays類(lèi),該類(lèi)中定義了很多和數(shù)組有關(guān)的工具方法,能夠方便地處理數(shù)組,是程序員必須掌握的類(lèi)。參考答案:A

16、rrays類(lèi)是java.util包中的一個(gè)類(lèi),類(lèi)中所有的方法都是static方法,這些方法都是數(shù)組對(duì)象的工具方法,能夠?qū)?shù)組進(jìn)行處理,如sort方法可以對(duì)數(shù)組元素進(jìn)行排序5、請(qǐng)使用簡(jiǎn)單代碼展示A類(lèi)依賴(lài)B類(lèi)的含義。解析:對(duì)于程序員來(lái)說(shuō),了解類(lèi)和類(lèi)之間的關(guān)系非常必要。依賴(lài)關(guān)系指的是一種瞬間的關(guān)系。如果A依賴(lài)B,一般指的是A類(lèi)的某個(gè)行為,需要B類(lèi)對(duì)象作為參數(shù)。參考答案:Class APublic void f(B b)6、請(qǐng)說(shuō)明依賴(lài)關(guān)系和關(guān)聯(lián)關(guān)系的區(qū)別。解析:關(guān)聯(lián)關(guān)系和依賴(lài)關(guān)系是非常常見(jiàn)的兩種關(guān)系,二者的區(qū)別也很明顯,程序員了解二者的區(qū)別能夠更深入的理解面向?qū)?/p>

17、象的思想。參考答案:依賴(lài)關(guān)系是一種瞬時(shí)關(guān)系,A依賴(lài)B,指的是A的某個(gè)行為的參數(shù)是B的類(lèi)型,也就是說(shuō),A要想實(shí)現(xiàn)這個(gè)行為,必須依賴(lài)B的實(shí)例,A關(guān)聯(lián)B,是一種長(zhǎng)久的關(guān)系。?的是B作為A的屬性存在,只要實(shí)例化一個(gè)A的對(duì)象,就會(huì)為這個(gè)A的對(duì)象實(shí)例化一個(gè)B的對(duì)象,作為它的屬性使用,可以在A中任何需要使用B的地方使用B。7.繼承有什么作用,Java語(yǔ)言中的繼承有什么特點(diǎn)?解析:繼承是面向?qū)ο笳Z(yǔ)言的一大特征,主要作用是重復(fù)使用,子類(lèi)通過(guò)繼承父類(lèi),能夠重復(fù)使用父類(lèi)的屬性和方法。指的注意的是,有兩個(gè)策略都可使實(shí)現(xiàn)重復(fù)使用,一個(gè)是關(guān)聯(lián),一個(gè)是繼承,實(shí)際編程中,關(guān)聯(lián)用的更多。因?yàn)樽宇?lèi)繼承父類(lèi)后,相當(dāng)于父類(lèi)中的細(xì)節(jié)將

18、暴露給子類(lèi)。初級(jí)程序員一定不要隨意使用繼承,避免濫用繼承。   參考答案:繼承主要為了能夠重復(fù)使用父類(lèi)中的成員。Java語(yǔ)言中的繼承是單繼承,也就是說(shuō)一個(gè)類(lèi)最多只能繼承一個(gè)父類(lèi)。8、什么是方法覆蓋(override)?并說(shuō)明方法覆蓋與方法重載(overioad)的區(qū)別。   解析:方法覆蓋是一個(gè)非常重要的概念,是多態(tài)性的一個(gè)體現(xiàn)。方法覆蓋發(fā)生再去愛(ài)繼承關(guān)系中,當(dāng)子類(lèi)需要修改從父類(lèi)繼承到某個(gè)方法的方法體時(shí),就可以聲明一個(gè)父類(lèi)同名同參數(shù)同返回值的方法,這樣就對(duì)父類(lèi)中的那個(gè)方法進(jìn)行了覆蓋,子類(lèi)對(duì)象調(diào)用該方法時(shí)將自動(dòng)綁定到子類(lèi)中的方法。中很多

19、類(lèi)中都進(jìn)行了方法覆蓋,如String類(lèi)中的toString方法,就覆蓋了父類(lèi)Object中的toString方法。參考答案:覆蓋是發(fā)生在繼承關(guān)系的子類(lèi)中,當(dāng)子類(lèi)要修改從父類(lèi)繼承的某個(gè)方法的方法體時(shí),就可以在子類(lèi)中聲明一個(gè)與父類(lèi)同名、同參數(shù)并且同返回值類(lèi)型的方法,這就是方法覆蓋。而重載與繼承沒(méi)有關(guān)系,指的是在一個(gè)類(lèi)中可以同時(shí)聲明多個(gè)同名但不同參數(shù)的方法,稱(chēng)為重載。9、請(qǐng)說(shuō)明什么是抽象類(lèi)?抽象類(lèi)有什么作用?解析:初級(jí)程序員往往不需要自己創(chuàng)建抽象類(lèi),但是必須了解抽象類(lèi)的概念,并且會(huì)使用抽象類(lèi)。抽象類(lèi)往往是設(shè)計(jì)階段的概念,用來(lái)定義多個(gè)子類(lèi)的模板,一些具體的實(shí)現(xiàn)可以在子類(lèi)中進(jìn)行。初級(jí)程序員往往需要會(huì)創(chuàng)建

20、子類(lèi)繼承抽象類(lèi),實(shí)現(xiàn)抽象類(lèi)中的方法。在API中,抽象類(lèi)比比皆是。   參考答案:抽象類(lèi)是不能實(shí)例化的類(lèi),使用abstract修飾。抽象類(lèi)往往用來(lái)做父類(lèi)使用,定義一些子類(lèi)的共同屬性或行為。10、請(qǐng)說(shuō)明抽象方法的含義,并說(shuō)明抽象類(lèi)與抽象方法的關(guān)系。解析:抽象方法都是在抽象類(lèi)中定義的,是用來(lái)定義子類(lèi)what to do的策略,而具體的how to do都在子類(lèi)中實(shí)現(xiàn)。參考答案:抽象方法是沒(méi)有辦法體的方法,使用abstract修飾。抽象類(lèi)中不一定有抽象方法,但是有抽象方法的類(lèi)一定是抽象類(lèi)。11、super關(guān)鍵字的兩種用法。 

21、;解析:使用一些IDE生成代碼時(shí),常常會(huì)在構(gòu)造方法中見(jiàn)到super這個(gè)關(guān)鍵字。顧名思義,super是和父類(lèi)有關(guān)的一個(gè)關(guān)鍵字,熟悉super的用法對(duì)熟練掌握繼承很有必要。參考答案:如super():表示調(diào)用父類(lèi)中的每一參考的構(gòu)造方法:又如super(10);表示調(diào)用父類(lèi)中的具有一個(gè)整型參數(shù)的構(gòu)造方法。第二種用法是在子類(lèi)中調(diào)用父類(lèi)中的成員,如super.f();意思是調(diào)用父類(lèi)中的f()方法。12、final類(lèi)與final方法有什么作用?解析:final修飾符是一個(gè)用途非常廣泛的修飾符,可以修飾類(lèi),方法,以及屬性。參考答案:final類(lèi)是不能夠被繼承的類(lèi),稱(chēng)為終極類(lèi),如String類(lèi)就是final類(lèi)

22、,不能有子類(lèi)。final修飾方法后,是終極方法,不能被子類(lèi)覆蓋,但是可以被子類(lèi)繼承使用。13.什么是多態(tài)函數(shù)?多態(tài)函數(shù)有什么用?解析:多態(tài)性是面向?qū)ο笳Z(yǔ)言的的一大特征,重載,覆蓋,多態(tài)參數(shù)是多態(tài)性的一種表現(xiàn)形式。多態(tài)參數(shù)處處可見(jiàn),例如某方法f(Object o),這個(gè)方法的參數(shù)類(lèi)型是Object,使用該方法時(shí),只要傳遞給f的單數(shù)類(lèi)型是Object即可。也就是說(shuō),Object類(lèi)的任意參數(shù)可以傳遞給f方法。這就是多態(tài)參數(shù)。意思是對(duì)外形式都一樣,都是Object,具體實(shí)現(xiàn)可以是這個(gè)類(lèi)型的任意子類(lèi),這就使得該方法比較靈活,Object類(lèi)即使有了新的子類(lèi),卻不需要修改,就能直接作用到那個(gè)子類(lèi)。

23、了解多態(tài)參數(shù)的含義和使用,對(duì)于Java的使用特別關(guān)鍵。參考答案:多態(tài)函數(shù)就是參數(shù)的類(lèi)型是某個(gè)父類(lèi)類(lèi)型,具體為這個(gè)參數(shù)賦值的不同以使用該父類(lèi)的任意子類(lèi)的對(duì)象。使用多態(tài)參數(shù),可以使程序的擴(kuò)展性更好,即使%的子類(lèi)方法不需要任何修改,就能接受子類(lèi)類(lèi)型進(jìn)行處理。14.Object類(lèi)有什么特點(diǎn)?解析:Object類(lèi)是一個(gè)非常重要的類(lèi),是所有類(lèi)的父類(lèi),包括數(shù)組在內(nèi),也就是對(duì)一個(gè)Java類(lèi),不管是API中定義的,還是自定義的類(lèi),都直接或間接的繼承了Object類(lèi)。所以,如果有一個(gè)方法f(Object o),那么可以傳遞給這個(gè)方法任意一個(gè)類(lèi)的對(duì)象,包括%。因?yàn)樗袑?duì)象都可以說(shuō)是Object類(lèi)型。參考答

24、案:Object類(lèi)是多有類(lèi)的直接或間接的父類(lèi)。15.Object類(lèi)中的toString方法有什么用?解析:Object類(lèi)是所有類(lèi)的父類(lèi),所以O(shè)bject類(lèi)中的方法是所有類(lèi)都默認(rèn)具備的。類(lèi)中的toString 方法可以將任意一個(gè)對(duì)象作為字符串返回,默認(rèn)的格式是“類(lèi)名內(nèi)地%”API中很多類(lèi)已經(jīng)覆蓋了這個(gè)方法,將其返回值的格式進(jìn)行了自定義,如String類(lèi)中的方法已經(jīng)覆蓋為返回字符串的字符序列。toString 方法在很多場(chǎng)合被自動(dòng)調(diào)用,例如%一個(gè)對(duì)象時(shí),就自動(dòng)調(diào)用該對(duì)象的toString 方法,如果需要修改返回字符串的格式,%另外類(lèi)中的覆蓋toString方法。參考答

25、案:toString方法可以把對(duì)象作為字符串返回。16.Object類(lèi)中的equals方法和hashCode 方法。解析:在Object類(lèi)中,equals方法比較對(duì)象的引用值,也就是只有物理上是同一對(duì)象的兩個(gè)引用,在使用equals方法返回true。hashCode方法返回一個(gè)對(duì)象的內(nèi)在地址的十六進(jìn)制值。由于Object類(lèi)是所有類(lèi)的父類(lèi),所以任意類(lèi)中都擁有這兩個(gè)方法,并都可以進(jìn)行覆蓋。尤其是操作Set,Map對(duì)象時(shí)集合元素類(lèi)的equals方法和hashCode方法非常必要,因?yàn)镾et和Map判斷元素是否重%是依靠這兩個(gè)方法進(jìn)行。一般的原則是:如果存在X和Y兩個(gè)對(duì)象,調(diào)用X.equal

26、s(Y)相同時(shí),那么調(diào)用hashCode方法返回值也應(yīng)該相同;如果X.equals(Y)返回false時(shí),那么調(diào)用hashCode方法返回值可能相同,也可能不同。值得注意的是,只要你覆蓋了equals方法,一定%則覆蓋hashCode 方法。在實(shí)際工作中,很多IDE環(huán)境都支持覆蓋equals和hashCode 方法。參考答案:Oject類(lèi)中的equals方法用來(lái)比較兩個(gè)引用值,hashCode用來(lái)返回引用的內(nèi)地址的十六進(jìn)制數(shù)值。在Set以及Map集合中,判斷兩個(gè)元素是否重復(fù)時(shí),往往需要使用這兩個(gè)方法。這兩個(gè)方法往往被子類(lèi)覆蓋,覆蓋的規(guī)則是:如果存在x和y兩個(gè)對(duì)象,調(diào)用x.e

27、quals(y)返回true時(shí),那么調(diào)用hashCode方法的返回值也該相同;如果x.equals(y)返回false時(shí),那么調(diào)用hashCode方法返回的值可能相同,也可能不同。17.接口有什么特點(diǎn),與抽象類(lèi)有什么區(qū)別?解析:接近歐的概念是一個(gè)設(shè)計(jì)層面的概念,初級(jí)程序員往往不會(huì)自己定義接口,但是會(huì)使用接口,理解接口的概念非常必要。接口定義了實(shí)現(xiàn)類(lèi)的規(guī)范,即what to do的部分,所有實(shí)現(xiàn)類(lèi)必須按照這個(gè)規(guī)范進(jìn)行實(shí)現(xiàn)。參考答案:接口的特點(diǎn)是不能定義變量,而且所有方法都是抽象方法。而抽象類(lèi)中可以有變量,也不強(qiáng)制必須有抽象方法。18.類(lèi)繼承父類(lèi)與類(lèi)實(shí)現(xiàn)接口,有什么區(qū)別?解析:

28、類(lèi)繼承父類(lèi)與類(lèi)實(shí)現(xiàn)接口,本質(zhì)上其實(shí)是一樣的。都是將父類(lèi)或者接口作為模板,在這個(gè)模板上進(jìn)行擴(kuò)展或者重寫(xiě)。程序員在實(shí)際編程中,常常需要繼承父類(lèi)或者實(shí)現(xiàn)接口。參考答案:類(lèi)繼承父類(lèi)只是單繼承,也就是一個(gè)子類(lèi)最多只有一個(gè)父類(lèi);而類(lèi)實(shí)現(xiàn)接口可以多實(shí)現(xiàn),就是一個(gè)子類(lèi)可以同時(shí)實(shí)現(xiàn)多個(gè)接口,并覆蓋所有接口中的所有抽象方法。19.Comparable接口有什么作用解析:comparable接口是在實(shí)際編程中常常使用的接口,該接口定義了comareTo(Object o)方法,用來(lái)定義對(duì)象的比較邏輯。這個(gè)接口常常在其他API中會(huì)強(qiáng)制使用,例如Arrays類(lèi)的sort(Object)方法,就強(qiáng)制數(shù)組元素必須

29、實(shí)現(xiàn)Comparable接口,與這個(gè)接口類(lèi)似的 另外一個(gè)接口是Comparator。參考答案:Comparable接口定義了compareTo(Object o)方法,可以用來(lái)實(shí)現(xiàn)對(duì)象的比較邏輯,這個(gè)接口常常在其他API中強(qiáng)制使用,用來(lái)規(guī)范對(duì)象的比較邏輯第二部分 異常處理1 .什么是異常?異常和錯(cuò)誤有什么區(qū)別?解析:異常處理是面向?qū)ο笳Z(yǔ)言比起過(guò)程式語(yǔ)言的一大改進(jìn)。對(duì)于Java程序員來(lái)說(shuō),必須了解異常處理,才能順利編程。參考答案:異常是一些不正常的事件,能夠中斷程序的正常執(zhí)行例如才除0計(jì)算就是異常。和錯(cuò)誤不同,異常是可以被處理的,而錯(cuò)誤往往是不能夠處理的,如內(nèi)存溢出

30、錯(cuò)誤。2 .nullPointException是什么異常?什么情況發(fā)生該異常?解析:程序員必須能夠了解常見(jiàn)的異常的發(fā)生原因,并能夠處理。NullPointerException就是特別常見(jiàn)的運(yùn)行期異常。參考答案:NullPointerExcepiton是空指針異常,當(dāng)一個(gè)引用沒(méi)喲被賦值,就是一null值如果這種情況下, 使用該引用調(diào)用其屬性或者方法, 就會(huì)發(fā)生NullPointerException異常。3.說(shuō)明try/catch/finally語(yǔ)句塊的作用解析:編寫(xiě)Java程序,避免不了需要處理異常。Java中處理異常使用try/catch/finally來(lái)實(shí)

31、現(xiàn)。尤其其中的finally語(yǔ)句非常值得程序員關(guān)注,可以用來(lái)執(zhí)行必須實(shí)現(xiàn)的功能,例如數(shù)據(jù)庫(kù)的鏈接等操作。參考答案:try語(yǔ)句塊用來(lái)包含可能發(fā)生異常的語(yǔ)句,catch塊用來(lái)捕獲異常,finally用來(lái)包含必須執(zhí)行的語(yǔ)句。4如何使用語(yǔ)句拋出異常,拋出異常后如何處理?解析:某些業(yè)務(wù)邏輯的非正常事件流,可以使用拋出異常來(lái)標(biāo)記。拋出的異常必須是有意義的異常類(lèi)型,建議不要使用API中的標(biāo)準(zhǔn)異常類(lèi),避免混淆。參考答案:使用throw語(yǔ)句就可以拋出異常,如throw  new XXXException()。拋出異常時(shí)一般情況下會(huì)在聲明方法處使用throws聲明該類(lèi)型的異常,調(diào)用該

32、方法是編譯器將提示異常。5. throws 關(guān)鍵字和 throw 關(guān)鍵字有什么區(qū)別和聯(lián)系?解析:throws和throw是異常處理時(shí)兩個(gè)常見(jiàn)的關(guān)鍵字,初級(jí)程序員常常容易正確理解throw和throws的作用和區(qū)別,說(shuō)明已經(jīng)能比較深入理解異常處理。Throw用來(lái)拋出異常,如果執(zhí)行了throw語(yǔ)句,程序?qū)l(fā)生異常,進(jìn)入到異常處理機(jī)制。Throws用來(lái)聲明異常,說(shuō)明這個(gè)方法可能會(huì)發(fā)生某些類(lèi)型的異常,那么編譯器將強(qiáng)制在調(diào)用這個(gè)方法的時(shí)候處理異常。API中的很多方法都使用了throws聲明了異常,所以使用這些方法時(shí)編譯器會(huì)提示需要處理異常。參考答案:throw用來(lái)

33、在方法體內(nèi)拋出異常,而throws用來(lái)在方法聲明處聲明異常。這兩個(gè)關(guān)鍵字有著一定的聯(lián)系。如果一個(gè)方法中使用了throw關(guān)鍵字拋出了異常,那么要么立即用try/catch語(yǔ)句進(jìn)行捕獲,要么就是用throws進(jìn)行聲明,否則將出現(xiàn)編譯錯(cuò)誤。然而,并不是只有使用了throw關(guān)鍵字之后才能使用throws關(guān)鍵字,語(yǔ)法上來(lái)說(shuō),任何一個(gè)方法都可以直接使用throws關(guān)鍵字,抽象方法也可以使用。6. 什么是自定義異常類(lèi)?為什么要自定義異常類(lèi)?解析:企業(yè)應(yīng)用中,往往會(huì)自定義一系列的異常類(lèi),標(biāo)記一些非正常的事件流。然而,這些自定義異常類(lèi)不會(huì)讓每個(gè)程序員都自定義,而是會(huì)由專(zhuān)人定義,分發(fā)給程序員使用。參考答

34、案:自定義異常類(lèi)區(qū)別于API中的標(biāo)準(zhǔn)異常類(lèi),指的是開(kāi)發(fā)人員自己創(chuàng)建的異常類(lèi)。只要繼承API中某個(gè)異常類(lèi)就可以自定義一個(gè)異常類(lèi),常常集成Exception類(lèi)。自定義異常類(lèi)主要是為了標(biāo)記業(yè)務(wù)邏輯中非正常事件流,避免與API中的標(biāo)準(zhǔn)異常混淆。第四部分核心API1.  請(qǐng)畫(huà)出Java集合框架的主要接口和類(lèi)的繼承關(guān)系。解析:集合石非常重要的類(lèi)型, 也是企業(yè)考察員工編程能力時(shí)常常關(guān)注的知識(shí)點(diǎn)。程序員應(yīng)該熟悉Java集合框架的主要繼承關(guān)系, 掌握常用集合類(lèi)的用法和特點(diǎn)2.  Collection接口和Map接口分別定義了什么集合類(lèi)型?有什么區(qū)別?解

35、析:Collection和Map是Java集合框架中兩個(gè)基本集合類(lèi)型,要區(qū)別不同的集合首先要從Collection和Map開(kāi)始。參考答案:Collection接口是傳統(tǒng)的集合接口,可以把單個(gè)對(duì)象存儲(chǔ)進(jìn)來(lái)。而Map接口是映射接口,存儲(chǔ)的是鍵值對(duì)。3.  用簡(jiǎn)單代碼演示創(chuàng)建一個(gè)泛型類(lèi)為Customer類(lèi)的List對(duì)象,并使用增強(qiáng)for循環(huán)迭代集合。解析:JDK5以后,集合框架中的接口和類(lèi)都是泛型類(lèi)及泛型接口,并可以使用增強(qiáng)for循環(huán)迭代集合。程序員需要確認(rèn)開(kāi)發(fā)平臺(tái)的JDK版本,如果低于5.0則不能使用這些功能。參考答案: ArrayList<Customer&g

36、t; list = new ArrayList<Customer>();For(Customer c : list) 4. List和Set集合有什么區(qū)別?解析:List和Set是Collection接口的兩個(gè)子接口,也是使用最多的兩種集合類(lèi)型。程序員應(yīng)該熟悉這兩個(gè)接口的基本特征,能夠更準(zhǔn)確地選擇正確的集合類(lèi)型。參考答案:List實(shí)現(xiàn)了列表類(lèi)型的集合,List中的元素是有序(ordered)的,每個(gè)元素根據(jù)放入集合的順序而對(duì)應(yīng)一個(gè)索引值, 可以根據(jù)這個(gè)索引值返回集合原宿。而Set實(shí)現(xiàn)

37、了不重復(fù)元素集合,即Set中的元素不能夠重復(fù),重復(fù)的元素將無(wú)法添加到集合中。5.  List接口有哪幾個(gè)實(shí)現(xiàn)類(lèi)?分別說(shuō)明其特征解析:List是用的較多的集合類(lèi)型,List是一個(gè)接口,具體使用List集合類(lèi)型時(shí),需要使用時(shí)實(shí)現(xiàn)類(lèi)。List接口的每個(gè)實(shí)現(xiàn)類(lèi)也都實(shí)現(xiàn)了不同的數(shù)據(jù)結(jié)構(gòu),各自具有不同的特征,其中最常用的是List實(shí)現(xiàn)類(lèi)。參考答案:List接口中有以下幾個(gè)常用實(shí)現(xiàn)1 ArrayList:實(shí)現(xiàn)了動(dòng)態(tài)數(shù)組的特征。2 LinkedList: 實(shí)現(xiàn)了鏈表的數(shù)據(jù)結(jié)構(gòu),LinkedList也可以用作?;蛘哧?duì)列。3 Vector:向量。4

38、60;ArrayList  Vector類(lèi)的功能 ArrayList都可以實(shí)現(xiàn),區(qū)別在于Vector是現(xiàn)行同步的。6.  Collectioin 和Collections有什么區(qū)別?解析:很多初級(jí)程序員對(duì)Collectioni和Collections容易混淆,二者的名字非常類(lèi)似,本義卻大大不同,Collections類(lèi)與Arrays類(lèi)非常類(lèi)似,都是工具類(lèi),程序員應(yīng)該熟悉掌握。參考答案:Collection是一個(gè)接口的名字,定義了集合類(lèi)型的共同特征。而Collections是一個(gè)類(lèi)的名字,是集合類(lèi)型的工具類(lèi),類(lèi)中定義了大量的靜態(tài)方法,能

39、夠操作及和對(duì)象。7.  如何將一個(gè)Collection轉(zhuǎn)換成數(shù)組?解析:集合和數(shù)組有很多共同的地方,二者都是作為數(shù)據(jù)容器使用, 用來(lái)持有數(shù)據(jù)。數(shù)組的長(zhǎng)度是固定的,集合的長(zhǎng)度卻可以動(dòng)態(tài)擴(kuò)展,數(shù)組由于可以直接通過(guò)索引操作其元素,所以性能和效率較高。實(shí)際應(yīng)用中,可能使用及合作為臨時(shí)變量持有數(shù)據(jù),卻將處理結(jié)果轉(zhuǎn)換成數(shù)組返回。參考答案:Collection接口中定義了toArray(T a)方法來(lái)將集合轉(zhuǎn)換為數(shù)組,其中T是泛型類(lèi)型。8、 集合的作用?集合是可以存儲(chǔ)一批類(lèi)型不同的對(duì)象,針對(duì)集合的實(shí)現(xiàn)類(lèi)有很多,作用都是一樣的,即存儲(chǔ)、傳輸數(shù)據(jù),但存儲(chǔ)的數(shù)據(jù)結(jié)構(gòu)不一樣,

40、其速度、安全性也不一樣。9 、HashMap和TreeMap在性能上有什么樣的差別呢?你比較傾向于使用哪一個(gè)?一個(gè)平衡樹(shù)的性能是O(logn)。Java里的TreeMap用一個(gè)紅黑樹(shù)來(lái)保證key/value的排序。紅黑樹(shù)是平衡二叉樹(shù)。保證二叉樹(shù)的平衡性,使得插入,刪除和查找都比較快,時(shí)間復(fù)雜度都是O(log n)。不過(guò)它沒(méi)有HashMap快,HashMap的時(shí)間復(fù)雜度是O(1),但是TreeMap的優(yōu)點(diǎn)在于它里面鍵值是排過(guò)序的,這樣就提供了一些其他的很有用的功能。 使用無(wú)序的HashSet和HashMap,還是使用有序的TreeSet和TreeMap,主要取決于你的實(shí)際使用

41、場(chǎng)景,一定程度上還和數(shù)據(jù)的大小以及運(yùn)行環(huán)境有關(guān)。比較實(shí)際的一個(gè)原因是,如果插入和更新都比較頻繁的話,那么保證元素的有序可以提高快速和頻繁查找的性能。如果對(duì)于排序操作(例如產(chǎn)生一個(gè)報(bào)表合作者運(yùn)行一個(gè)批處理程序)的要求不是很頻繁的話,那么把數(shù)據(jù)以無(wú)序的方式存儲(chǔ),然后在需要排序的時(shí)候用Collections.sort()來(lái)進(jìn)行排序,會(huì)比用有序的方式來(lái)存儲(chǔ)可能會(huì)更加高效。這個(gè)只是一種可選的方式,沒(méi)人能給你一個(gè)確切的答案。即使是復(fù)雜度的理論,例如O(n),成立的前提也是在n足夠大的情況下。只要在n足夠小的情況下,就算是O(n)的算法也可能會(huì)比O(log n)的算法更加高效。另外,一個(gè)算法可能在AMD處理器上的速度比在Intel處理器上快。如果你的系統(tǒng)有交換區(qū)的話,那么你還要考慮磁盤(pán)的性能。唯一可以確定的性能測(cè)試途徑是用大小合適的數(shù)據(jù)來(lái)測(cè)試和衡量程序的性能和內(nèi)存使用量。在你所選擇的硬件上來(lái)測(cè)試這兩種指標(biāo),是最合適的方法。10、 什么是Iterator迭代器是一種設(shè)計(jì)模式,它是一個(gè)對(duì)象,它可以遍歷并選擇序列中的對(duì)象,而開(kāi)發(fā)人員不需要了解該序列的底層結(jié)構(gòu)。迭代器通常被稱(chēng)為“輕量級(jí)”對(duì)象,因?yàn)閯?chuàng)建它的代價(jià)小。 Java中的Iterator功能比較簡(jiǎn)單,并且只能單向移動(dòng): 

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論