coreJava部分面試題_第1頁
coreJava部分面試題_第2頁
coreJava部分面試題_第3頁
coreJava部分面試題_第4頁
coreJava部分面試題_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第一部分 Java的類1. 請解釋Java語言的跨平臺特性。解析:雖然不知道什么是跨平臺也可以使用Java語言進行編程,但是對于一個Java編程員來說,理解跨平臺特性能夠更深入掌握J(rèn)ava語言,所以企業(yè)中往往要求應(yīng)聘者至少理解這個特性。參考答案:Java的跨平臺特性也被稱為可移植性、平臺無關(guān)性,或者一次編寫處處運行。他的意思就是如果用Java語言編寫一個應(yīng)用,那么就可以在不同平臺上運行,而不需要為不同平臺單獨運行開發(fā)。之所以能實現(xiàn)跨平臺的特性。主要得益于Java虛擬機(JVM),JVM解釋器在運行Java應(yīng)用時根據(jù)當(dāng)前平臺進行解釋,解釋成符合當(dāng)前平臺規(guī)范的機器碼,所以可以實現(xiàn)同樣的應(yīng)用在不同平

2、臺上都能運行。2.請列舉JAVA語言的主要特點解析:了解一門語言,往往從熟悉該語言的主要特點開始入手,所以企業(yè)也常常通過應(yīng)聘者對JAVA語言特點的掌握程度而判斷其語言基礎(chǔ)是否扎實。參考答案:JAVA語言有很多特點,主要包括跨平臺性:一個應(yīng)用可以不經(jīng)過修改直接運行到不同的平臺上。面向?qū)ο螅篔AVA語言是一門面向?qū)γ娴恼Z言,可以使用對象的屬性和行為,可以使用面向?qū)ο蟮乃枷脒M行分析設(shè)計,并實現(xiàn)整個應(yīng)用。解釋執(zhí)行JAVA應(yīng)用時,JVM中的解釋器將解釋類文件,生成符合當(dāng)前平臺的字節(jié)碼。自動回收:JAVA應(yīng)用中的垃圾回收是自動進行的,JVM中的后臺線程將監(jiān)視內(nèi)存中數(shù)據(jù)的使用,當(dāng)內(nèi)存中的數(shù)據(jù)不再被引用時,將

3、被作為垃圾回收,而不需要程序員動手回收。3.請說明一個JAVA類中主要包含哪幾個元素?并說明每種元素的作用。解析:無論簡單還是復(fù)雜的JAVA應(yīng)用,都是由若干個類組成,所以類是JAVA應(yīng)用的組成單位。了解一個類中包含的主要元素能夠?qū)︻愑幸粋€清晰的認(rèn)識。一個類中往往會有五種元素,即屬性、方法、構(gòu)造方法、塊以及內(nèi)部類、其實塊和內(nèi)部類比較少見。參考答案:JAVA類中主要包含屬性、方法、構(gòu)造方法、塊以及內(nèi)部類。屬性用來定義對象的數(shù)據(jù);方法用來定義對象的行為;構(gòu)造方法可以用來創(chuàng)建對象;塊能夠用來在類加載時執(zhí)行操作或者在每次實例化前執(zhí)行通用操作;內(nèi)部類作為類的一個成員存在,能夠訪問外部類的屬性和方法。4、請

4、說明構(gòu)造方法的作用和特征解析:類是對象的模板,使用類往往都需要首先對類進行實例化,即創(chuàng)建對象。要創(chuàng)建對象必須使用new關(guān)鍵字調(diào)用構(gòu)造方法(constructor)才能完成,構(gòu)造方法中往往對屬性進行實例化,也可以實現(xiàn)其他必要的功能,如讀取屬性文件等。構(gòu)造方法有獨特的特征:名字必須與類名相同且大小寫敏感,而且構(gòu)造方法不能聲明返回值,這兩個特征缺一不可。使用Eclipse工具時,可以使用菜單Generate Constructor自動生成不同的構(gòu)造方法。參考答案:構(gòu)造方法的作用是用來創(chuàng)建對象,使用new關(guān)鍵字調(diào)用。構(gòu)造方法的名字必須與類的名字相同,并且大小寫敏感,同時構(gòu)造方法不能聲明返回值類型,可以

5、使用任意一種訪問修飾符,但是不能使用其他修飾符進行修飾,如static、final、abstract等修飾符都可以修飾構(gòu)造方法。5、什么事方法重載(overload)?解析:如果一個類的某個行為,會有不同的算法和邏輯,例如,Math類的計算絕對值的方法,既可以計算int類型數(shù)值的絕對值,也可以計算double類型數(shù)值的絕對值。這種情況下,每種類型都定義一個不同的方法名,如abInt、absDouble,那么類的可讀性就較差,使用時,必須熟悉處理每種類型參數(shù)所對應(yīng)的方法名。然而,如果使用同一個方法名,而使用不同的形式參數(shù)來區(qū)別這些方法,那么就具有很好的可讀性,如abs(int i)、abs(do

6、uble d)等??勺x性強的代碼是企業(yè)對開發(fā)人員的基本要求,方法重載能夠使得代碼有很好的可讀性。參考答案:方法重載指的是在一個類中可以聲明多個相同名字的方法,而方法的形式參數(shù)有區(qū)別。調(diào)用這些同名的方法時,JVM會根據(jù)實際參數(shù)的不同綁定到不同的方法。6、請列舉Java語言中的權(quán)限訪問修飾符,并說明每種權(quán)限的含義。解析:正確使用權(quán)限訪問修飾符,能夠有效控制類以及類成員的安全性,Java語言中有四種訪問修飾符,包括public、同包、protected以及private,一般情況下,應(yīng)用中的類多是public權(quán)限,屬性多是private權(quán)限,方法多是public權(quán)限。參考答案:Java語言中有四種權(quán)

7、限訪問修飾符,即public、protected、同包以及private,public表示公共權(quán)限,即任何包中都可以訪問:protected表示受保護權(quán)限,即同包中可以訪問,同包中的子類可以訪問:同包權(quán)限是默認(rèn)權(quán)限,即不顯示指明權(quán)限修飾符的時候就是同包權(quán)限,表示只有同包中可以訪問:private是私有權(quán)限,表示只能在本類中訪問。7、請列舉Java語言中的八種基本數(shù)據(jù)類型,并說明每種數(shù)據(jù)類型的含義及長度。解析:數(shù)據(jù)類型在任何一門編程語言中都是很重要的知識點,屬性、方法參數(shù)、方法返回值要指定各自的數(shù)據(jù)類型。Java語言雖然是一門面向?qū)ο蟮恼Z言。但是也定義了基本數(shù)據(jù)類型,基本數(shù)據(jù)類型可以直接賦值,不

8、需要使用new關(guān)鍵字創(chuàng)建,可以直接使用運算符進行運算,編程中經(jīng)常被使用,而且Java語言中的基本數(shù)據(jù)類型的長度固定,不會隨著平臺的不同而不同。參考答案:Java語言的八種基本數(shù)據(jù)類型有:byte字節(jié)型,8位長度:short短整型,16位長度,int整型,32位長度:long長整型,64位長度:float單精度浮點型。32位長度:double雙精度浮點型,64位長度:char字符型,16位長度:boolean型,表示邏輯值,有true和false兩個值,分別表示真和假.8.什么叫引用類型,引用類型和基本數(shù)據(jù)類型有什么區(qū)別?解析:很多初級程序員都能夠理解int i=20;中的int是一種類型,稱為

9、整型。而對于類似Employee e=new Employee();這樣表達式中的Employee卻感覺無所適從。其實,任何一個類都是一種類型,如Employee就是一種類型,可以說變量e的類型就是Employee。Java語言中將類的類型稱為引用類型,即reference type??梢哉f,除了八種基本數(shù)據(jù)類型之外的類型都是引用類型,包括API中所有的類、自定義的所有類,也包括數(shù)組。引用類型和基本數(shù)據(jù)類型的直觀區(qū)別就是引用類型的變量需要使用new調(diào)用構(gòu)造方法來賦值,而基本數(shù)據(jù)類型可以直接使用“=”號賦值。但是,引用類型中的String比較特殊,既可以使用new關(guān)鍵字賦值,也可以直接使用“=”

10、賦值,一般情況下都使用“=”直接賦值。參考答案:Java語言中除了基本數(shù)據(jù)類型之外的類型,都稱為引用類型。引用類型就是類的類型,所有的對象都是引用類型,包括數(shù)組對象。引用類型必須使用new調(diào)用構(gòu)造方法進行賦值,引用類型的變量擁有自己的屬性和方法,可以使用圓點調(diào)用自己的屬性和方法?;緮?shù)據(jù)類型直接使用=號進行賦值,且沒有自己的屬性和方法,往往都在聲明屬性或方法時使用。9.對于String對象,可以使用“=”賦值,也可以使用new關(guān)鍵字賦值,兩種方式有什么區(qū)別?解析:String類型是實際工作中經(jīng)常使用到的類型,從數(shù)據(jù)類型上劃分,String是一個引用類型,是API中定義的一個類。所以String

11、類型的對象可以使用new創(chuàng)建,例如String name=new String(“ORACLE”);為變量name進行賦值,值為“ORACLE”。然而,String類比起其他類 有些特殊,可以使用“=”直接賦值,如String name=“ORACLE”,也是為變量name進行賦值,值為“ORACLE”。這兩種賦值方式是有差別的,使用new賦值,永遠(yuǎn)都是創(chuàng)建一個新對象,在新的內(nèi)存空間初始化了字符串的值;而使用“=”賦值,不會每次都初始化新的字符串,而是從一個“字符串實例池”中去查找有沒有要賦值的字符串,如有則直接引用;如不存在,則初始化一個字符串,并放入“字符串實例池”。在實際編程中,往往使用

12、“=”好對String類型變量進行賦值。參考答案:使用“=”賦值不一定每次都創(chuàng)建一個新的字符串,而是從“字符串實例池”中查找字符串。使用new進行賦值,則每次都創(chuàng)建一個新的字符串。10.String類是一個“不可變類”,請解釋“不可變類”的含義。解析:String類是一個不可變類,即immutable類。所謂不可變,意思是當(dāng)一個字符串被初始化后,它的值就不會被改變。例如,String s=new String(“hello”)為將初始化一個值為hello的字符串,如果調(diào)用 s.toUpperCase()看起來是把hello變?yōu)榇髮懙腍ELLO,然而事實上并不會把已有的hello變?yōu)镠ELLO,

13、而是在新的空間初始化一個HELLO字符串。也正因為有這種不可變性,所以才能支持“字符串實例池”的使用。參考答案:所謂的不可變類,就是當(dāng)字符串初始化后,就不能夠被改變。11.String類和StringBuffer類有什么區(qū)別?解析:String類是不可變類,字符串一旦初始化后,就不能被改變。而StringBuffer類是可變類,字符串值可以唄改變。常常在實際應(yīng)用中看到累死這樣的代碼:String s=new(“hello”);s+=”world”,這兩句代碼首先創(chuàng)建一個字符hello,然后將world追加到hello結(jié)尾并重新賦值給變量s。然后,這個過程實際上是這樣的:首先創(chuàng)建一個String

14、Buffer對象,然后用StringBuffer類的append方法追加字符串,最后對StringBuffer對象調(diào)用toString方法合成字符串返回??梢?,使用+號連接字符串時,本質(zhì)上是使用了可變的StringBuffer類,經(jīng)變動肯定性能效率受到影響,所以建議需要追加字符串時,可以考慮直接使用StringBuffer類。參考答案:String類是不可變類,即字符串值一旦初始化后就不可能改變。StringBuffer是可變字符串類,類似String的緩沖區(qū),可以修改字符串的值。12StringBuffer和StringBuilder類有什么區(qū)別?解析: StringBuffer是JDK5中

15、增加的一個新類,在以前版本中不存在這個類。StringBuilder中的方法和StringBuffer中的方法基本相同,但是StringBuffer是線程安全的,而StringBuilder不是線程安全的,因此在不考慮同步的情況下,StringBuilder有更好的性能。參考答案:StringBuffer是線程安全的字符串緩沖,而StringBuilder不是線程安全的。13.包裝器類型包括哪些類,有什么作用?解析:初級程序員常常對float和Float或者double和Double感到混淆。在Java語言中,有八中基本數(shù)據(jù)類型,即byte、int、long、float、double、char

16、、boolean。對應(yīng)這八種基本數(shù)據(jù)類型,API中定義了八個類,能把這些基本類型轉(zhuǎn)換成引用類型,分別是Byte、Short、Int、Long、Double、Character、Boolean。這八個類被統(tǒng)稱為包裝器類。JDK5之后,包裝器類和基本數(shù)據(jù)類型之間可以直接轉(zhuǎn)換,稱為自動的裝箱拆箱(boxing/unboxing)。例如integer it=3;it+;雖然寫法上可以像使用基本數(shù)據(jù)類型一樣使用包裝器類型,但是本質(zhì)上依*行了類似 it= new Integer(3)的轉(zhuǎn)換,因此,不要輕易使用包裝器類的自動裝箱拆箱,以優(yōu)化的性能。能夠使用基本類型就使用基本類型。參考答案:包裝類器包括Byt

17、e、Short、Integer、Long、Float、Double、Character、Boolean等類,主要用來對byte、short、integer、long、float、double、character、boolean這八種基本數(shù)據(jù)類型進行包裝,使其稱為引用類型。14. 請說明Java語言中的值傳遞規(guī)則。解析:值傳遞時編寫應(yīng)用時不可避免的操作。例如某方法聲明形式是public void f(int x),寫方法是,必須為其傳遞一個int類型的實際參數(shù),如f(10)。又如public void g(Employee)。那么使用該方法時,必須為其傳遞一個Employee類型的實際參數(shù),例如

18、g(new Employee()。所以,對于初級程序員來說,了解Java語言的值傳遞規(guī)則非常重要。Java語言是本類型傳遞的值,例如f(10),僅僅把10復(fù)制給形式參數(shù)x,是值的拷貝。而引用類的傳遞時引用,即虛地址,例如g(new Employee()是把實際參數(shù)的虛地址傳遞給形式參數(shù)e,也就是說實際參數(shù)和形式參數(shù)的虛地址相同,物理上是同一個對象。參考答案:基本數(shù)據(jù)類型傳遞的是值,引用類型傳遞的是引用,即虛地址。15.使用static修飾屬性或方法后,屬性和方法有什么特征?解析:static修飾符是一個非常常見并重要的修飾符,稱為靜態(tài)。靜態(tài)不是指值不能改變,很多初級程序員容易容易望文生義的地方

19、。Static常常用來修飾類的屬性或者方法。當(dāng)一個屬性或者方法和對象沒有關(guān)系,或者說是任何對象共享的時候,那么就應(yīng)該用static進行修飾。列如某類中的計數(shù)器,用來計算實例的個數(shù)。那么這個計數(shù)器屬性就是所有對象共享的屬性,就應(yīng)該用static修飾。又例如Math類中的abs(int)方法,用來返回參數(shù)的絕對值,這個方法和Math類的對象沒有關(guān)系,Math類對象可以共享這個方法,那么這個方法就可以用static修飾。程序員必須深入理解static修飾符的使用。參考答案:static修飾屬性或方法后,屬性和方法不在屬于某個特定的對象,而是所有共享,也可以說是static成員不依賴某個對象,在類加載

20、時就被初始化。Static修飾的屬性或方法,可以直接使用類名調(diào)用,而不用先實例化對象再調(diào)用。16.使用final修飾屬性后,屬性有什么特征?解析:屬性可以是變量也可以是常量,如果是常量,就需要使用final修飾。如果使用final修飾了某個屬性,那么該屬性值一旦被賦值,就不能被修改,實際中常常有這個樣的碼:private static final int ERROR=0;也就是說,常常會生命靜態(tài)的常量。靜態(tài)常量的命名規(guī)范非常特殊,往往都是用大寫字母,如果包含多個單詞,每個單詞之間使用下劃線連接。靜態(tài)常量的意思是,該類所有的對象都擁有一個不變的常量ERROR,作為0.API中很多類都定義了很多的

21、靜態(tài)常量,使用時直接使用類名調(diào)用即可。參考答案:fianl修飾屬性后,屬性就成為一個常量。常量只要被賦值,就不能被改變。17.請說明操作符=的作用。解析:實際編程中,=是非常常用的操作符。很多初級程序員會使用這樣的代碼if(s=”save”0,結(jié)果會發(fā)現(xiàn),即使當(dāng)字符串s的值為save時,if條件依然不能被執(zhí)行。是=在比較引用類型時,比較的是兩個對象的虛地址,而不是內(nèi)容。要比較兩個對象的內(nèi)容是否相同,往往需要使用equal方法,例如if(s.equals(“save”)。=比較基本類型時,將比值的二進制是否相等,例如(x=0.5)。值得注意的是,與空指針null值進行比較,往往用=進行,例如if

22、(s=null|s.equals(“”),表示如果字符串是空指針或者空串。參考答案:=可以用來比較基本類型或者引用類型。比較基本類型時,=用來比較二進制的值,比較引用類型時,用來比較對象的虛地址。18請說明&與&的區(qū)別和聯(lián)系解析:實際編程中,常常需要使用“與”或者“或”的邏輯。其中&和&存在一定區(qū)別&可能發(fā)生各路問題,例如if(s!=null&s.length()=6)中,如果要的值為null,那么第一表達式的值為false,返回值肯定是false,不會計算第二個表達式的值,這就是短路。然而使用&,例如if(s!=null&s.length()=6),假設(shè)s的值為,null,返回值肯定是fal

23、se,但是會判斷第二個表達式的值,將發(fā)生空指針異常。實際工作中,經(jīng)常使用&操作符。參考答案:&會發(fā)生短路問題,當(dāng)?shù)谝粋€表達式的值為false時,將直接返回結(jié)果為false而不會判斷第二個表達式的值。而&不會發(fā)生短路問題,即使第一個表達式的值是false,會判斷第二個表達式的值。19請列舉Java語言中的幾種位運算符,并說明位運算符的作用。解析:位運算符是對二進制數(shù)值進行運算,左移一位相當(dāng)于乘2運算,右移一位相當(dāng)運算。位移運算符效率較高,往往在游戲開發(fā)中經(jīng)常使用。參考答案:java語言中有三種位移運算符,分別是;有符號右移,右移一位相當(dāng)于除2;;無符號右移,忽略符號位,空位都以0補齊。20. b

24、reak語句能在什么場景使用。解析:break語句表示中斷,不能夠隨便使用,只能在循環(huán)語句中或者switch語句中使用。初級工程師往往容易將break和return混淆。Return是可以再方法體中任意位置使用,可以帶值返回頁可以不帶值返回,執(zhí)行return語句后,該方法將返回,也就是方法執(zhí)行結(jié)束。而break只能在循環(huán)體中或者switch的case語句中使用,不能隨意使用。參考答案:break語句可以再循環(huán)體中使用,也可以在switch的case語句中使用。21.for循環(huán)中的break語句和continue語句的使用。解析:很多時候,循環(huán)是為了查找某些符合條件的數(shù)據(jù),只要找到就沒有必要繼續(xù)

25、下去,稱為中斷循環(huán),break語句就可以用來中斷循環(huán)。而continue語句恰恰相反,是用來繼續(xù)下一次循環(huán)。值得注意的是,java語言中可以再循環(huán)前面加標(biāo)號,即label,然后可以使用break或continue中斷或繼續(xù)標(biāo)號的循環(huán)。參考答案:break可以用來中斷循環(huán),continue可以用來繼續(xù)下一次循環(huán)。第二部分 類之間的關(guān)系1. 用代碼表示A類關(guān)聯(lián)B類的情況。解析:一個Java應(yīng)用中不可能只有一個類,所以了解類之間的關(guān)系對程序員來說非常重要。關(guān)聯(lián)關(guān)系是最常用的一種關(guān)系,如果說A關(guān)聯(lián)B,那么就是B作為A的屬性存在。關(guān)聯(lián)關(guān)系是一種復(fù)用的策略,即A關(guān)聯(lián)B的時候,A可以復(fù)用B的行為。參考答案:

26、Class A Private B b;Public void setB(B b)This.b=b;2請說明Java語言中數(shù)組的基本概念,數(shù)組的作用,以及數(shù)組的聲明創(chuàng)建方式。解析:數(shù)組時任何一門語言里都常用的類型,Java語言也不例外。程序員了解數(shù)組,不能僅僅從語法上了解,而應(yīng)該深入理解數(shù)組的作用。數(shù)組可以用來存儲類型相同的元素,作為一種數(shù)據(jù)容器使用。和數(shù)組類似的概念是集合,也能作為數(shù)據(jù)容器使用。參考答案:數(shù)組時相同元素的集合,作為數(shù)據(jù)容器使用。聲明創(chuàng)建一個int型數(shù)組,如下所示:intx=new int3;其中3是數(shù)組的長度,該數(shù)組能夠存儲3個int型變量。3.使用代碼,創(chuàng)建一個長度為5的S

27、tring型數(shù)組,并使用增強for循環(huán)迭代數(shù)組打印出數(shù)組中的元素。解析:增強for循環(huán)是JDK5增加的特性,可以方便地遍歷數(shù)組或集合。程序員需要了解的是,如果JDK版本低于5.0,則不支持這個功能。另外,并不是說有了增強for循環(huán)后,傳統(tǒng)的for循環(huán)就不被使用,增強for循環(huán)只能用來方便地遍歷數(shù)組和集合,其他情況下還要使用傳統(tǒng)的for循環(huán)。參考答案: String sArray = new String5;For(String s:sArray) System.out.println(s);4.說明Arrays類的作用。解析:在實際工作中,常常需要對數(shù)組中的元素進行處理,例如排序等。初級程序員

28、往往選擇自己編寫算法實現(xiàn)。實際上APV中提供了Arrays類,該類中定義了很多和數(shù)組有關(guān)的工具方法,能夠方便地處理數(shù)組,是程序員必須掌握的類。參考答案:Arrays類是java.util包中的一個類,類中所有的方法都是static方法,這些方法都是數(shù)組對象的工具方法,能夠?qū)?shù)組進行處理,如sort方法可以對數(shù)組元素進行排序.5.請使用簡單代碼展示A類依賴B類的含義。解析:對于程序員來說,了解類和類之間的關(guān)系非常必要。依賴關(guān)系指的是一種瞬間的關(guān)系。如果A依賴B,一般指的是A類的某個行為,需要B類對象作為參數(shù)。參考答案:Class APublic void f(B b)6.請說明依賴關(guān)系和關(guān)聯(lián)關(guān)系

29、的區(qū)別。解析:關(guān)聯(lián)關(guān)系和依賴關(guān)系是非常常見的兩種關(guān)系,二者的區(qū)別也很明顯,程序員了解二者的區(qū)別能夠更深入的理解面向?qū)ο蟮乃枷?。參考答案:依賴關(guān)系是一種瞬時關(guān)系,A依賴B,指的是A的某個行為的參數(shù)是B的類型,也就是說,A要想實現(xiàn)這個行為,必須依賴B的實例,A關(guān)聯(lián)B,是一種長久的關(guān)系。?的是B作為A的屬性存在,只要實例化一個A的對象,就會為這個A的對象實例化一個B的對象,作為它的屬性使用,可以在A中任何需要使用B的地方使用B。7.繼承有什么作用,Java語言中的繼承有什么特點?解析:繼承是面向?qū)ο笳Z言的一大特征,主要作用是重復(fù)使用,子類通過繼承父類,能夠重復(fù)使用父類的屬性和方法。指的注意的是,有兩

30、個策略都可使實現(xiàn)重復(fù)使用,一個是關(guān)聯(lián),一個是繼承,實際編程中,關(guān)聯(lián)用的更多。因為子類繼承父類后,相當(dāng)于父類中的細(xì)節(jié)將暴露給子類。初級程序員一定不要隨意使用繼承,避免濫用繼承。 參考答案:繼承主要為了能夠重復(fù)使用父類中的成員。Java語言中的繼承是單繼承,也就是說一個類最多只能繼承一個父類。8、什么是方法覆蓋(override)?并說明方法覆蓋與方法重載(overioad)的區(qū)別。 解析:方法覆蓋是一個非常重要的概念,是多態(tài)性的一個體現(xiàn)。方法覆蓋發(fā)生再去愛繼承關(guān)系中,當(dāng)子類需要修改從父類繼承到某個方法的方法體時,就可以聲明一個父類同名同參數(shù)同返回值的方法,這樣就對父類中的那個方法進行了覆蓋,子類

31、對象調(diào)用該方法時將自動綁定到子類中的方法。中很多類中都進行了方法覆蓋,如String類中的toString方法,就覆蓋了父類Object中的toString方法。參考答案:覆蓋是發(fā)生在繼承關(guān)系的子類中,當(dāng)子類要修改從父類繼承的某個方法的方法體時,就可以在子類中聲明一個與父類同名、同參數(shù)并且同返回值類型的方法,這就是方法覆蓋。而重載與繼承沒有關(guān)系,指的是在一個類中可以同時聲明多個同名但不同參數(shù)的方法,稱為重載。9、請說明什么是抽象類?抽象類有什么作用?解析:初級程序員往往不需要自己創(chuàng)建抽象類,但是必須了解抽象類的概念,并且會使用抽象類。抽象類往往是設(shè)計階段的概念,用來定義多個子類的模板,一些具體

32、的實現(xiàn)可以在子類中進行。初級程序員往往需要會創(chuàng)建子類繼承抽象類,實現(xiàn)抽象類中的方法。在API中,抽象類比比皆是。 參考答案:抽象類是不能實例化的類,使用abstract修飾。抽象類往往用來做父類使用,定義一些子類的共同屬性或行為。10、請說明抽象方法的含義,并說明抽象類與抽象方法的關(guān)系。解析:抽象方法都是在抽象類中定義的,是用來定義子類what to do的策略,而具體的how to do都在子類中實現(xiàn)。參考答案:抽象方法是沒有辦法體的方法,使用abstract修飾。抽象類中不一定有抽象方法,但是有抽象方法的類一定是抽象類。11、super關(guān)鍵字的兩種用法。 解析:使用一些IDE生成代碼時,常

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

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

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

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

37、方法和hashCode 方法。解析:在Object類中,equals方法比較對象的引用值,也就是只有物理上是同一對象的兩個引用,在使用equals方法返回true。hashCode方法返回一個對象的內(nèi)在地址的十六進制值。由于Object類是所有類的父類,所以任意類中都擁有這兩個方法,并都可以進行覆蓋。尤其是操作Set,Map對象時集合元素類的equals方法和hashCode方法非常必要,因為Set和Map判斷元素是否重%是依靠這兩個方法進行。一般的原則是:如果存在X和Y兩個對象,調(diào)用X.equals(Y)相同時,那么調(diào)用hashCode方法返回值也應(yīng)該相同;如果X.equals(Y)返回fa

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

39、e時,那么調(diào)用hashCode方法返回的值可能相同,也可能不同。17.接口有什么特點,與抽象類有什么區(qū)別?解析:接口的概念是一個設(shè)計層面的概念,初級程序員往往不會自己定義接口,但是會使用接口,理解接口的概念非常必要。接口定義了實現(xiàn)類的規(guī)范,即what to do的部分,所有實現(xiàn)類必須按照這個規(guī)范進行實現(xiàn)。參考答案:接口的特點是不能定義變量,而且所有方法都是抽象方法。而抽象類中可以有變量,也不強制必須有抽象方法。18.類繼承父類與類實現(xiàn)接口,有什么區(qū)別?解析:類繼承父類與類實現(xiàn)接口,本質(zhì)上其實是一樣的。都是將父類或者接口作為模板,在這個模板上進行擴展或者重寫。程序員在實際編程中,常常需要繼承父類

40、或者實現(xiàn)接口。參考答案:類繼承父類只是單繼承,也就是一個子類最多只有一個父類;而類實現(xiàn)接口可以多實現(xiàn),就是一個子類可以同時實現(xiàn)多個接口,并覆蓋所有接口中的所有抽象方法。19.Comparable接口有什么作用解析:comparable接口是在實際編程中常常使用的接口,該接口定義了comareTo(Object o)方法,用來定義對象的比較邏輯。這個接口常常在其他API中會強制使用,例如Arrays類的sort(Object)方法,就強制數(shù)組元素必須實現(xiàn)Comparable接口,與這個接口類似的 另外一個接口是Comparator。參考答案:Comparable接口定義了compareTo(Ob

41、ject o)方法,可以用來實現(xiàn)對象的比較邏輯,這個接口常常在其他API中強制使用,用來規(guī)范對象的比較邏輯第三部分 異常處理1 .什么是異常?異常和錯誤有什么區(qū)別?解析:異常處理是面向?qū)ο笳Z言比起過程式語言的一大改進。對于Java程序員來說,必須了解異常處理,才能順利編程。參考答案:異常是一些不正常的事件,能夠中斷程序的正常執(zhí)行例如才除0計算就是異常。和錯誤不同,異常是可以被處理的,而錯誤往往是不能夠處理的,如內(nèi)存溢出錯誤。2 .nullPointException是什么異常?什么情況發(fā)生該異常?解析:程序員必須能夠了解常見的異常的發(fā)生原因,并能夠處理。NullPointerException

42、就是特別常見的運行期異常。參考答案:NullPointerExcepiton是空指針異常,當(dāng)一個引用沒喲被賦值,就是一null值如果這種情況下, 使用該引用調(diào)用其屬性或者方法, 就會發(fā)生NullPointerException異常。3.說明try/catch/finally語句塊的作用解析:編寫Java程序,避免不了需要處理異常。Java中處理異常使用try/catch/finally來實現(xiàn)。尤其其中的finally語句非常值得程序員關(guān)注,可以用來執(zhí)行必須實現(xiàn)的功能,例如數(shù)據(jù)庫的鏈接等操作。參考答案:try語句塊用來包含可能發(fā)生異常的語句,catch塊用來捕獲異常,finally用來包含必須執(zhí)

43、行的語句。4如何使用語句拋出異常,拋出異常后如何處理?解析:某些業(yè)務(wù)邏輯的非正常事件流,可以使用拋出異常來標(biāo)記。拋出的異常必須是有意義的異常類型,建議不要使用API中的標(biāo)準(zhǔn)異常類,避免混淆。參考答案:使用throw語句就可以拋出異常,如throw new XXXException()。拋出異常時一般情況下會在聲明方法處使用throws聲明該類型的異常,調(diào)用該方法是編譯器將提示異常。5. throws 關(guān)鍵字和 throw 關(guān)鍵字有什么區(qū)別和聯(lián)系?解析:throws和throw是異常處理時兩個常見的關(guān)鍵字,初級程序員常常容易正確理解throw和throws的作用和區(qū)別,說明已經(jīng)能比較深入理解異常

44、處理。Throw用來拋出異常,如果執(zhí)行了throw語句,程序?qū)l(fā)生異常,進入到異常處理機制。Throws用來聲明異常,說明這個方法可能會發(fā)生某些類型的異常,那么編譯器將強制在調(diào)用這個方法的時候處理異常。API中的很多方法都使用了throws聲明了異常,所以使用這些方法時編譯器會提示需要處理異常。參考答案:throw用來在方法體內(nèi)拋出異常,而throws用來在方法聲明處聲明異常。這兩個關(guān)鍵字有著一定的聯(lián)系。如果一個方法中使用了throw關(guān)鍵字拋出了異常,那么要么立即用try/catch語句進行捕獲,要么就是用throws進行聲明,否則將出現(xiàn)編譯錯誤。然而,并不是只有使用了throw關(guān)鍵字之后才能

45、使用throws關(guān)鍵字,語法上來說,任何一個方法都可以直接使用throws關(guān)鍵字,抽象方法也可以使用。6. 什么是自定義異常類?為什么要自定義異常類?解析:企業(yè)應(yīng)用中,往往會自定義一系列的異常類,標(biāo)記一些非正常的事件流。然而,這些自定義異常類不會讓每個程序員都自定義,而是會由專人定義,分發(fā)給程序員使用。參考答案:自定義異常類區(qū)別于API中的標(biāo)準(zhǔn)異常類,指的是開發(fā)人員自己創(chuàng)建的異常類。只要繼承API中某個異常類就可以自定義一個異常類,常常集成Exception類。自定義異常類主要是為了標(biāo)記業(yè)務(wù)邏輯中非正常事件流,避免與API中的標(biāo)準(zhǔn)異?;煜?。第四部分核心API1. 請畫出Java集合框架的主要接

46、口和類的繼承關(guān)系。解析:集合石非常重要的類型, 也是企業(yè)考察員工編程能力時常常關(guān)注的知識點。程序員應(yīng)該熟悉Java集合框架的主要繼承關(guān)系, 掌握常用集合類的用法和特點2. Collection接口和Map接口分別定義了什么集合類型?有什么區(qū)別?解析:Collection和Map是Java集合框架中兩個基本集合類型,要區(qū)別不同的集合首先要從Collection和Map開始。參考答案:Collection接口是傳統(tǒng)的集合接口,可以把單個對象存儲進來。而Map接口是映射接口,存儲的是鍵值對。3. 用簡單代碼演示創(chuàng)建一個泛型類為Customer類的List對象,并使用增強for循環(huán)迭代集合。解析:JD

47、K5以后,集合框架中的接口和類都是泛型類及泛型接口,并可以使用增強for循環(huán)迭代集合。程序員需要確認(rèn)開發(fā)平臺的JDK版本,如果低于5.0則不能使用這些功能。參考答案:ArrayList list = new ArrayList();For(Customer c : list)4. List和Set集合有什么區(qū)別?解析:List和Set是Collection接口的兩個子接口,也是使用最多的兩種集合類型。程序員應(yīng)該熟悉這兩個接口的基本特征,能夠更準(zhǔn)確地選擇正確的集合類型。參考答案:List實現(xiàn)了列表類型的集合,List中的元素是有序(ordered)的,每個元素根據(jù)放入集合的順序而對應(yīng)一個索引值,

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

49、st Vector類的功能 ArrayList都可以實現(xiàn),區(qū)別在于Vector是現(xiàn)行同步的。6. Collectioin 和Collections有什么區(qū)別?解析:很多初級程序員對Collectioni和Collections容易混淆,二者的名字非常類似,本義卻大大不同,Collections類與Arrays類非常類似,都是工具類,程序員應(yīng)該熟悉掌握。參考答案:Collection是一個接口的名字,定義了集合類型的共同特征。而Collections是一個類的名字,是集合類型的工具類,類中定義了大量的靜態(tài)方法,能夠操作及和對象。7. 如何將一個Collection轉(zhuǎn)換成數(shù)組?解析:集合和數(shù)組有很

50、多共同的地方,二者都是作為數(shù)據(jù)容器使用, 用來持有數(shù)據(jù)。數(shù)組的長度是固定的,集合的長度卻可以動態(tài)擴展,數(shù)組由于可以直接通過索引操作其元素,所以性能和效率較高。實際應(yīng)用中,可能使用及合作為臨時變量持有數(shù)據(jù),卻將處理結(jié)果轉(zhuǎn)換成數(shù)組返回。參考答案:Collection接口中定義了toArray(T a)方法來將集合轉(zhuǎn)換為數(shù)組,其中T是泛型類型。8. 假設(shè)存在文本文件oracle.doc,請用代碼展示將文件按行讀出,并打印輸出到控制臺。解析:能夠使用java.io包進行文件的輸入輸出操作是一個程序員必備的技能,使用io中類操作的步驟都基本類似,都需要經(jīng)歷IO選擇、創(chuàng)建流對象、進行讀寫操作、關(guān)閉流對象的

51、過程,程序員應(yīng)該熟悉常用的IO流, 能夠根據(jù)需要選擇適當(dāng)?shù)腎O類。參考答案:File file = new File(“oracle.doc”);tryFileReader fr = new FileReader(File);BufferedReader br = new BufferedReader(fr);String line = br.readLine();while(line = null) System.out.println(line); Line = br.readLine();catch(FileNotFoundException e)e.printStackTrace();

52、catch(IOException e) e.printStackTrace();9. 請說明AWT、Swing以及SWT的區(qū)別和聯(lián)系解析:目前使用Java開發(fā)GUI的應(yīng)用比較少,然而程序員至少應(yīng)該了解Java進行GUI變成中的主要概念。 參考答案:AWT(Abstract Windows Toolkit)是Java語言中最原始的GUI工具包;Java Swing是Java Foundation Classes(JFC)的一部分,是在AWT基礎(chǔ)上發(fā)展而來的GUI API ; AWT 和Swing都是原Sun公司推出的Java GUI 工具包,而SWT 是Eclipse 組織為了開發(fā)Eclips

53、e IDE環(huán)境所斌寫的一組底層GUI API。 10. 假設(shè)GUI只能怪存在一個按鈕 Button, 請使用匿名內(nèi)部類對該按鈕注冊監(jiān)聽器,使得點擊恩牛后應(yīng)用能夠退出。 解析:使用Java語言進行GUI開發(fā)的應(yīng)用較少,只要進行GUI開發(fā),事件處理都是非常重要的知識點。GUI的事件處理,很多時候都是用匿名類實現(xiàn),程序員至少需要熟悉匿名內(nèi)部類的語法。 參考答案: button.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e) System.exit(0););11.使用java語言如何創(chuàng)建

54、線程對象?請列出常用的兩種方法。解析:Java 語言能夠支持多線程編程,將線程封裝成Thread類型的對象,只要創(chuàng)建Thread類型的對象,就能夠便捷地啟動線程、執(zhí)行線程體。程序員首先必須掌握創(chuàng)建線程的常用方法。 參考答案:Java語言中經(jīng)常使用兩種方法創(chuàng)建線程。創(chuàng)建Thread類的子類,在子類中覆蓋Thread類的run方法,實現(xiàn)線程的運行體,只要創(chuàng)建該子類對象就是線程對象。創(chuàng)建Runable接口的實現(xiàn)類,在實現(xiàn)類中覆蓋接口中的run方法,實現(xiàn)線程的運行體。使用Thread(Runable)構(gòu)造方法可以創(chuàng)建線程對象,參數(shù)是Runable接口實現(xiàn)類的實例。 12.關(guān)鍵字synchronized

55、有什么作用?用簡單代碼展示synchronized的方法。解析:線程可以共享數(shù)據(jù),而共享數(shù)據(jù)時,可能會因為多個線程并發(fā)處理共享數(shù)據(jù)而導(dǎo)致數(shù)據(jù)不一致。這種時候,線程同步就費城關(guān)鍵。程序員必須掌握同步的用法,尤其不能隨意將代碼進行同步,因為同步將降低性能,所以一定不能把不需要同步的代碼進行同步,而是只把必須同步的代碼進行同步。參考答案:synchronized可以將某個代碼塊或者某個方法進行線程同步,被同步的代碼塊在一個時刻只能被一個線程訪問,只有當(dāng)前線程處理結(jié)束后,方能被其他線程訪問。例如:public void run()for(int i=0;i50;i+)synchronized(this

56、)System,out,println(Thread.currentThread().getName()+”:x=”+x);X+;13. 線程之間通信的方法有哪幾個?分別起到什么作用?解析:如果多個線程共享了某些數(shù)據(jù),同時線程之間有存在一定的“依賴”關(guān)系,即執(zhí)行某類線程必須依賴另一類的執(zhí)行結(jié)果,如消費者必須等待生產(chǎn)者生產(chǎn)了商品才能消費。這種情況下,線程之間就需要通信。必須在同步代碼塊中調(diào)用線程通信的方法。參考答案:線程通信的方法有三個,在Object類中定義。wait方法:使得線程進入等待狀態(tài)。notify 方法:隨意通知等待池中的某一個線程。notifyAll 方法:通知等待池中所有線程。1

57、4. 基于TCP協(xié)議的網(wǎng)絡(luò)編程,如何在客戶端和服務(wù)器端傳輸數(shù)據(jù)?解析:使用Java語言進行網(wǎng)絡(luò)編程,主要是針對傳輸層進行編程。傳輸層主要有兩種協(xié)議,即TCP和UDP?;赥CP協(xié)議的網(wǎng)絡(luò)編程,主要使用Socket和ServerSocket。程序員應(yīng)該掌握基于TCP協(xié)議網(wǎng)絡(luò)編程的連接方式以及通訊方式等。參考答案:基于TCP協(xié)議的網(wǎng)絡(luò)編程,主要使用Socket類獲得輸入流和輸出流,進一步在客戶端和服務(wù)器端進行輸入輸出操作。15.基于UDP協(xié)議的網(wǎng)絡(luò)編程,如何在客戶端和服務(wù)器端傳輸數(shù)據(jù)?解析:除了TCP協(xié)議外,傳輸層還可以使用UDP協(xié)議。基于UDP協(xié)議的網(wǎng)絡(luò)編程,主要使用數(shù)據(jù)報傳輸數(shù)據(jù)。參考答案:基于UDP協(xié)議的網(wǎng)絡(luò)編程,主要使用數(shù)據(jù)報傳輸數(shù)據(jù),Java語言API中定義了DatagramPa

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論