筆試題面試題集合_第1頁(yè)
筆試題面試題集合_第2頁(yè)
筆試題面試題集合_第3頁(yè)
筆試題面試題集合_第4頁(yè)
筆試題面試題集合_第5頁(yè)
已閱讀5頁(yè),還剩45頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

Java基礎(chǔ)方面:

1.作用域public,protected,private,以及不寫時(shí)的區(qū)別

作用域當(dāng)前類同一,package子孫類其他package

publicVVVJ

protectedVJVX

friendlyVVXX

privateVXXX

不寫時(shí)默認(rèn)為friendly

2.collection和map

Collection和Collections的區(qū)別

答:Collection是集合類的上級(jí)接口,繼承與他的接口主要有Set和List.

Collections是針對(duì)集合類的一個(gè)幫助類,他提供一系列靜態(tài)方法實(shí)現(xiàn)對(duì)各種集合的搜索、排

序、線程安全化等操作

Set里的元素是不能重復(fù)的,那么用什么方法來(lái)區(qū)分重復(fù)與否呢?是用==還是equals。?它們

有何區(qū)別?

答:Set里的元素是不能重復(fù)的,那么用iterator。方法來(lái)區(qū)分重復(fù)與否。equals。是判斷

兩個(gè)Set是否相等,equals(^l==方法決定引用值是否指向同一對(duì)象equals。在類中被覆蓋,

為的是當(dāng)兩個(gè)分離的對(duì)象的內(nèi)容和類型相配的話,返回真值

List,Set,Map是否繼承自Collection接口

答:List,Set是,Map不是

AmyList和Vector的區(qū)別,HashMap和Hashtable的區(qū)別

答:就ArrayList與Vector主要從二方面來(lái)說(shuō):

1、同步性:Vector是線程安全的,也就是說(shuō)是同步的,而ArrayList是線程序不安全的,

不是同步的

2、數(shù)據(jù)增長(zhǎng):當(dāng)需要增長(zhǎng)時(shí),Vector默認(rèn)增長(zhǎng)為原來(lái)一倍,而ArrayList卻是原來(lái)的一半

就HashMap與HashTable主要從三方面來(lái)說(shuō):

1、歷史原因:Hashtable是基于陳舊的Dictionary類的,HashMap是Java1.2引進(jìn)的Map

接口的一個(gè)實(shí)現(xiàn)

2、同步性:Hashtable是線程安全的,也就是說(shuō)是同步的,而HashMap是線程序不安全

的,不是同步的

3>值:只有HashM叩可以讓你將空值作為一個(gè)表的條目的key或value

介紹JAVA中的CollectionFrameWork(包括如何寫自己的數(shù)據(jù)結(jié)構(gòu))?

答:CollectionFrameWork如下:

Collection

-List

-LinkedList

-ArrayList

^-Vector

Lstack

LSet

Map

-Hashtable

-HashMap

1-WeakHashMap

Collection是最基本的集合接口,一個(gè)Collection代表一組Object,即Collection的元素

(Elements)

Map提供key到value的映射

說(shuō)出ArrayList,Vector,LinkedList的存儲(chǔ)性能和特性

答:ArrayList和Vector都是使用數(shù)組方式存儲(chǔ)數(shù)據(jù),此數(shù)組元素?cái)?shù)大于實(shí)際存儲(chǔ)的數(shù)

據(jù)以便增加和插入元素,它們都允許直接按序號(hào)索引元素,但是插入元素要涉及數(shù)組元素移

動(dòng)等內(nèi)存操作,所以索引數(shù)據(jù)快而插入數(shù)據(jù)慢,Vectcr山于使用了synchronized方法(線程

安全),通常性能上較ArrayList差,而LinkedList使用雙向鏈表實(shí)現(xiàn)存儲(chǔ),按序號(hào)索引數(shù)據(jù)

需要進(jìn)行前向或后向遍歷,但是插入數(shù)據(jù)時(shí)只需要記錄本項(xiàng)的前后項(xiàng)即可,所以插入速度較

快。

HashMap和Hashtable的區(qū)別

答:HashM叩是Hashtable的輕量級(jí)實(shí)現(xiàn)(非線程安全的實(shí)現(xiàn)),他們都完成了M叩接

口,主要區(qū)別在于HashMap允許空(null)鍵值(key),由于非線程安全,效率上可能高于

Hashtable。

HashMap允許將null作為一個(gè)entry的key或者value,而Hashtable不允許。

HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因?yàn)?/p>

contains方法容易讓人引起誤解。

Hashtable繼承自Dictionary類而HashMap是Javal.2引進(jìn)的Mapinterface的一個(gè)實(shí)現(xiàn)。

最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個(gè)線程訪

問(wèn)Hashtable時(shí),不需要自己為它的方法實(shí)現(xiàn)同步,而HashMap就必須為之提供外同步。

Hashtable和HashMap采用的hash/rehash算法都大概一樣,所以性能不會(huì)有很大的差異。

你所知道的集合類都有哪些?主要方法?

答:最常用的集合類是List和Map。List的具體實(shí)現(xiàn)包括ArrayList和Vector,它

們是可變大小的列表,比較適合構(gòu)建、存儲(chǔ)和操作任何類型對(duì)象的元素列表。List適

用于按數(shù)值索引訪問(wèn)元素的情形。

Map提供了一個(gè)更通用的元素存儲(chǔ)方法。Map集合類用于存儲(chǔ)元素對(duì)(稱作“鍵“和“

值”),其中每個(gè)鍵映射到個(gè)值。

List、Map、Set三個(gè)接口,存取元素時(shí),各有什么特點(diǎn)?

答:List以特定次序來(lái)持有元素,可有重復(fù)元素。Set無(wú)法擁有重復(fù)元素,內(nèi)部排序。

Map保存key-value值,value可多值。

介紹Java中的CollectionFrameWork(包括如何寫自己的數(shù)據(jù)結(jié)構(gòu))?如COLLECTION中遺留

類(HASHTABLE、VECTOR)和現(xiàn)有類的區(qū)別?(同步)

3.內(nèi)部類的實(shí)現(xiàn)方式?

Outerclass.Innerclassinclass=Outerlnstance.newInnerclass();

4.垃圾回收機(jī)制,如何優(yōu)化程序?

5.垃圾回收器的基本原理是什么?垃圾回收器可以馬上回收內(nèi)存嗎?有什么辦法主動(dòng)通

知虛擬機(jī)進(jìn)行垃圾回收

答:對(duì)于GC來(lái)說(shuō),當(dāng)程序員創(chuàng)建對(duì)象時(shí),GC就開(kāi)始監(jiān)控這個(gè)對(duì)象的地址、大小以及

使用情況。通常,GC采用有向圖的方式記錄和管理堆(heap)中的所有對(duì)象。通過(guò)這種方式

確定哪些對(duì)象是"可達(dá)的",哪些對(duì)象是"不可達(dá)的"。當(dāng)GC確定一些對(duì)象為“不可達(dá)”時(shí),GC

就有責(zé)任回收這些內(nèi)存空間。可以。程序員可以手動(dòng)執(zhí)行System.gc。,通知GC運(yùn)行,但是

Java語(yǔ)言規(guī)范并不保證GC一定會(huì)執(zhí)行。

6.垃圾回收的優(yōu)點(diǎn)和原理。并考慮2種回收機(jī)制

答:Java語(yǔ)言中一個(gè)顯著的特點(diǎn)就是引入了垃圾回收機(jī)制,使C++程序員最頭疼的內(nèi)存

管理的問(wèn)題迎刃而解,它使得Java程序員在編寫程序的時(shí)候不再需要考慮內(nèi)存管理。垃圾

回收可以有效的防止內(nèi)存泄露,有效的使用可以使用的內(nèi)存。垃圾回收器通常是作為一個(gè)單

獨(dú)的低級(jí)別的線程運(yùn)行,不可預(yù)知的情況下對(duì)內(nèi)存堆中已經(jīng)死亡的或者長(zhǎng)時(shí)間沒(méi)有使用的對(duì)

象進(jìn)行清楚和回收,程序員不能實(shí)時(shí)的調(diào)用垃圾回收器對(duì)某個(gè)對(duì)象或所有對(duì)象進(jìn)行垃圾回

收?;厥諜C(jī)制有分代復(fù)制垃圾回收和標(biāo)記垃圾回收,增量垃圾回收。

7.GC是什么?為什么要有GC

答:GC是垃圾收集的意思(GabageCollection),內(nèi)存處理是編程人員容易出現(xiàn)問(wèn)題的

地方,忘記或者錯(cuò)誤的內(nèi)存回收會(huì)導(dǎo)致程序或系統(tǒng)的不穩(wěn)定甚至崩潰,Java提供的GC功能

可以自動(dòng)監(jiān)測(cè)對(duì)象是否超過(guò)作用域從而達(dá)到自動(dòng)回收內(nèi)存的目的,Java語(yǔ)言沒(méi)有提供釋放已

分配內(nèi)存的顯示操作方法。

8.java內(nèi)存泄露

C/C++的泄漏,是對(duì)象已不可到達(dá),而內(nèi)存又沒(méi)有回收,真正的內(nèi)存黑洞。而Java的泄

漏,則是因?yàn)楦鞣N原因,對(duì)象對(duì)應(yīng)用已經(jīng)無(wú)用,但一直被持有,一直可到達(dá)。

總結(jié)原因包括以下幾方面:

1).被生命周期極長(zhǎng)的集合類不當(dāng)持有,號(hào)稱是Java內(nèi)存泄漏的首因。

這些集合類的生命周期通常極長(zhǎng),而且是一個(gè)輔助管理性質(zhì)的對(duì)象,在一個(gè)業(yè)務(wù)事務(wù)

運(yùn)行完后,如果沒(méi)有將某個(gè)業(yè)務(wù)對(duì)象主動(dòng)的從中清除的話,這個(gè)集合就會(huì)吃越來(lái)越多內(nèi)存,

可以用WeakReference,如WeakHashMap,使得它持有的對(duì)象不增加對(duì)象的引用數(shù)。

2).Scope定義不對(duì),這個(gè)很簡(jiǎn)單了,方法的局部變量定義成類的變量,類的靜態(tài)變量等。

3).異常時(shí)沒(méi)有加finally。來(lái)釋放某些資源,JDBC時(shí)代也是很普遍的事情。

4).另外一些我了解不深的原因,如:Swing里的Listener沒(méi)有顯式remove;內(nèi)部類持有

外部對(duì)象的隱式引用;Finalizers造成關(guān)聯(lián)對(duì)象沒(méi)有被及時(shí)清空等。

9.運(yùn)行時(shí)異常與一般異常有何異同

答:異常表示程序運(yùn)行過(guò)程中可能出現(xiàn)的非正常狀態(tài),運(yùn)行時(shí)異常表示虛擬機(jī)的通常操

作中可能遇到的異常,是一種常見(jiàn)運(yùn)行錯(cuò)誤。java編譯器要求方法必須聲明拋出可能發(fā)生的

非運(yùn)行時(shí)異常,但是并不要求必須聲明拋出未被捕獲的運(yùn)行時(shí)異常。

10.Java中的異常處理機(jī)制的簡(jiǎn)單原理和應(yīng)用。java的事件機(jī)制?

答:當(dāng)JAVA程序違反了JAVA的語(yǔ)義規(guī)則時(shí),JAVA虛擬機(jī)就會(huì)將發(fā)生的錯(cuò)誤表示為

一個(gè)異常。違反語(yǔ)義規(guī)則包括2種情況。一種是JAVA類庫(kù)內(nèi)置的語(yǔ)義檢查。例如數(shù)組下標(biāo)

越界,會(huì)引發(fā)IndexOutOfBoundsException;訪問(wèn)null的對(duì)象時(shí)會(huì)引發(fā)NullPointerExceptiono另

一種情況就是JAVA允許程序員擴(kuò)展這種語(yǔ)義檢查,程序員可以創(chuàng)建自己的異常,并自由選

擇在何時(shí)用throw關(guān)鍵字號(hào)I發(fā)異常。所有的異常都是java.lang.Thowable的子類。

11.JAVA語(yǔ)言如何進(jìn)行異常處理,關(guān)鍵字:throws,throw,try,catch,finally分別代表什么意義?

在try塊中可以拋出異常嗎?

答:Java通過(guò)面向?qū)ο蟮姆椒ㄟM(jìn)行異常處理,把各種不同的異常進(jìn)行分類,并提供了良

好的接口。在Java中,每個(gè)異常都是一個(gè)對(duì)象,它是Throwable類或其它子類的實(shí)例。當(dāng)

一個(gè)方法出現(xiàn)異常后便拋出一個(gè)異常對(duì)象,該對(duì)象中包含有異常信息,調(diào)用這個(gè)對(duì)象的方法

可以捕獲到這個(gè)異常并進(jìn)行處理。Java的異常處理是通過(guò)5個(gè)關(guān)鍵詞來(lái)實(shí)現(xiàn)的:try、catch、

throw、throws和finally。一般情況下是用try來(lái)執(zhí)行一段程序,如果出現(xiàn)異常,系統(tǒng)會(huì)拋出

(throws)一個(gè)異常,這時(shí)候你可以通過(guò)它的類型來(lái)捕捉(catch)它,或最后(finally)由

缺省處理器來(lái)處理。

用try來(lái)指定一塊預(yù)防所有“異?!钡某绦?。緊跟在try程序后面,應(yīng)包含一個(gè)catch子句

來(lái)指定你想要捕捉的"異常"的類型。

throw語(yǔ)句用來(lái)明確地拋出一個(gè)”異常"。

throws用來(lái)標(biāo)明個(gè)成員函數(shù)可能拋出的各種“異常"。拋出多個(gè)異常

Finally為確保一段代碼不管發(fā)生什么"異?!倍急粓?zhí)行一段代碼。

可以在?個(gè)成員函數(shù)調(diào)用的外面寫一個(gè)try語(yǔ)句,在這個(gè)成員函數(shù)內(nèi)部寫另個(gè)try語(yǔ)

句保護(hù)其他代碼。每當(dāng)遇到一個(gè)try語(yǔ)句,“異常”的框架就放到堆棧上面,直到所有的try

語(yǔ)句都完成。如果下一級(jí)的try語(yǔ)句沒(méi)有對(duì)某種“異?!边M(jìn)行處理,堆棧就會(huì)展開(kāi),直到遇到

有處理這種"異常"的try語(yǔ)句。

12.error和exception有什么區(qū)別

答:error表示恢復(fù)不是不可能但很困難的情況下的一種嚴(yán)重問(wèn)題,比如說(shuō)內(nèi)存溢出,

不可能指望程序能處理這樣的情況;exception表示一種設(shè)計(jì)或?qū)崿F(xiàn)問(wèn)題。也就是說(shuō),它表

示如果程序運(yùn)行正常,從不會(huì)發(fā)生的情況

13.try{}里有一個(gè)return語(yǔ)句,那么緊跟在這個(gè)try后的finally{}里的code會(huì)不會(huì)被執(zhí)行,

什么時(shí)候被執(zhí)行,在return前還是后

答:會(huì)執(zhí)行,在return前執(zhí)行

14.內(nèi)部類可以引用他包含類的成員嗎?有沒(méi)有什么限制?

答:一個(gè)內(nèi)部類對(duì)象可以訪問(wèn)創(chuàng)建它的外部類對(duì)象的內(nèi)容

15.AnonymousInnerClass(匿名內(nèi)部類)是否可以extends(繼承)其它類,是否可以

implements(實(shí)現(xiàn))interface(接口)

答:匿名的內(nèi)部類是沒(méi)有名字的內(nèi)部類??梢岳^承抽象(SDK1.5沒(méi)有限制),但一個(gè)內(nèi)

部類可以作為一個(gè)接口,由另一個(gè)內(nèi)部類實(shí)現(xiàn)

16.StaticNestedClass和InnerClass的不同

答:NestedClass(-一般是C++的說(shuō)法),InnerClass(一般是JAVA的說(shuō)法)。Java內(nèi)部

類與C++嵌套類最大的不同就在于是否有指向外部的引用上。

注:靜態(tài)內(nèi)部類(InnerClass)意味著

1創(chuàng)建一個(gè)static內(nèi)部類的對(duì)象,不需要一個(gè)外部類對(duì)象。

2不能從一個(gè)static內(nèi)部類的,?個(gè)對(duì)象訪問(wèn)一個(gè)外部類對(duì)象

17.&和&&的區(qū)別

答:&是位運(yùn)算符,表示按位與運(yùn)算,&&是邏輯運(yùn)算符,表示邏輯與(and)

18.什么時(shí)候用assert

答:assertion(斷言)在軟件開(kāi)發(fā)中是一種常用的調(diào)試方式,很多開(kāi)發(fā)語(yǔ)言中都支持這種

機(jī)制。在實(shí)現(xiàn)中,assertion就是在程序中的■,條語(yǔ)句,它對(duì)一個(gè)boolean表達(dá)式進(jìn)行檢查,

一個(gè)正確程序必須保證這個(gè)boolean表達(dá)式的值為true;如果該值為false,說(shuō)明程序已經(jīng)處

于不正確的狀態(tài)下,系統(tǒng)將給出警告或退出。一般來(lái)說(shuō),assertion用于保證程序最基本、關(guān)

鍵的正確性。assertion檢查通常在開(kāi)發(fā)和測(cè)試時(shí)開(kāi)啟。為了提高性能,在軟件發(fā)布后,assertion

檢查通常是關(guān)閉的

assertexpression

19.Java有沒(méi)有g(shù)oto

答:java中的保留字,現(xiàn)在沒(méi)有在java中使用

20.數(shù)組有沒(méi)有l(wèi)ength。這個(gè)方法?String有沒(méi)有l(wèi)ength。這個(gè)方法

答:數(shù)組沒(méi)有l(wèi)ength。這個(gè)方法,有l(wèi)ength的屬性。String有l(wèi)ength。這個(gè)方法

21.Overload和Override的區(qū)別。Overloaded的方法是否可以改變返回值的類型

答:方法的重寫Overriding和重載Overloading是Java多態(tài)性的不同表現(xiàn)。重寫Overriding

是父類與子類之間多態(tài)性的一種表現(xiàn),重載Overloading是一個(gè)類中多態(tài)性的一種表現(xiàn)。如

果在子類中定義某方法與其父類有相同的名稱和參數(shù),我們說(shuō)該方法被重寫(Overriding)?

子類的對(duì)象使用這個(gè)方法時(shí),將調(diào)用子類中的定義,對(duì)它而言,父類中的定義如同被"屏蔽”

了。如果在一個(gè)類中定義了多個(gè)同名的方法,它們或有不同的參數(shù)個(gè)數(shù)或有不同的參數(shù)類型,

則稱為方法的重載(Overloading)。Overloaded的方法是可以改變返回值的類型

22.給我一個(gè)你最常見(jiàn)到的runtimeexception

答:常見(jiàn)的運(yùn)行時(shí)異常有如下這些ArithmeticException,ArrayStoreException,

BufferOverflowException,BufferUnderflowException,CannotRedoException,

CannotUndoException,ClassCastException,CMMException,ConcurrentModificationException,

DOMException,EmptyStackException,IllegalArgumentException,IllegalMonitorStateException,

IllegalPathStateException,IllegalStateException,ImagingOpException,

IndexOutOfBoundsException,MissingResourceException,NegativeArraySizeException,

NoSuchElementException,NullPointerException,ProfileDataException,ProviderException,

RasterFormatException,SecurityException,SystemException,UndeclaredThrowableException,

UnmodifiableSetException,UnsupportedOperationException

23.abstractclass和interface有什么區(qū)別

答:聲明方法的存在而不去實(shí)現(xiàn)它的類被叫做抽象類(abstractclass),它用于要?jiǎng)?chuàng)建一

個(gè)體現(xiàn)某些基本行為的類,并為該類聲明方法,但不能在該類中實(shí)現(xiàn)該類的情況。不能創(chuàng)建

abstract類的實(shí)例。然而可以創(chuàng)建一個(gè)變量,其類型是一個(gè)抽象類,并讓它指向具體子類的

一個(gè)實(shí)例。不能有抽象構(gòu)造函數(shù)或抽象靜態(tài)方法。Abstract類的子類為它們父類中的所有抽

象方法提供實(shí)現(xiàn),否則它們也是抽象類為。取而代之,在子類中實(shí)現(xiàn)該方法。知道其行為的

其它類可以在類中實(shí)現(xiàn)這些方法

接口(interface)是抽象類的變體。在接口中,所有方法都是抽象的。多繼承性可通過(guò)

實(shí)現(xiàn)這樣的接口而獲得。接口中的所有方法都是抽象的,沒(méi)有一個(gè)有程序體。接口只可以定

義staticfinal成員變量。接口的實(shí)現(xiàn)與子類相似,除了該實(shí)現(xiàn)類不能從接口定義中繼承行為。

當(dāng)類實(shí)現(xiàn)特殊接口時(shí),它定義(即將程序體給予)所有這種接口的方法。然后,它可以在實(shí)

現(xiàn)了該接口的類的任何對(duì)象上調(diào)用接口的方法。由于有抽象類,它允許使用接口名作為引用

變量的類型。通常的動(dòng)態(tài)聯(lián)編將生效。引用可以轉(zhuǎn)換到接口類型或從接口類型轉(zhuǎn)換,

instanceof運(yùn)算符可以用來(lái)決定某對(duì)象的類是否實(shí)現(xiàn)了接口

接口的好處是將實(shí)現(xiàn)與表現(xiàn)分離。抽象類與接口都用于抽象,但是抽象類(Java中)可以

有自己的部分實(shí)現(xiàn),而接口則完全是一個(gè)標(biāo)識(shí)(同時(shí)有多重繼承的功能)。

24.abstract的method是否可同時(shí)是static,是否可同時(shí)是native,是否可同時(shí)是synchronized

答:都不能

25.接口是否可繼承接口?抽象類是否可實(shí)現(xiàn)(implements)接口?抽象類是否可繼承實(shí)體類

(concreteclass)

答:接口可以繼承接口。抽象類可以實(shí)現(xiàn)(implements)接口,抽象類是否可繼承實(shí)體類,

但前提是實(shí)體類必須有明確的構(gòu)造函數(shù)

26.構(gòu)造器Constructor是否可被override

答:構(gòu)造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading

27.是否可以繼承String類

答:String類是final類故不可以繼承

28.兩個(gè)對(duì)象值相同(x.equals(y)==Irue),但卻可有不同的hashcode,這句話對(duì)不對(duì)

答:不對(duì),有相同的hashcode

29.當(dāng)一個(gè)對(duì)象被當(dāng)作參數(shù)傳遞到一個(gè)方法后,此方法可改變這個(gè)對(duì)象的屬性,并可返回變

化后的結(jié)果,那么這里到底是值傳遞還是引用傳遞

答:是值傳遞。Java編程語(yǔ)言只有值傳遞參數(shù)。當(dāng)一個(gè)對(duì)象實(shí)例作為一個(gè)參數(shù)被傳遞

到方法中時(shí),參數(shù)的值就是對(duì)該對(duì)象的引用。對(duì)象的內(nèi)容可以在被調(diào)用的方法中改變,但對(duì)

象的引用是永遠(yuǎn)不會(huì)改變的

30.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上

答:switch(exprl)中,exprl是一個(gè)整數(shù)表達(dá)式。因此傳遞給switch和case語(yǔ)句的

參數(shù)應(yīng)該是int、short,char或者byte。long,string都不能作用于swtich

31.char型變量中能不能存貯一個(gè)中文漢字?為什么?

答:是能夠定義成為一個(gè)中文的,因?yàn)閖ava中以u(píng)nicode編碼,一個(gè)char占16個(gè)比特,

所以放一個(gè)中文是沒(méi)問(wèn)題的

如果用gbk的本地編碼的話可以.如果用utf-8的話,可能不行。

32.抽象類與接口?

答:抽象類與接口都用于抽象,但是抽象類(JAVA中)可以有自己的部分實(shí)現(xiàn),而接口

則完全是一個(gè)標(biāo)識(shí)(同時(shí)有多實(shí)現(xiàn)的功能)。

JAVA類實(shí)現(xiàn)序例化的方法是實(shí)現(xiàn)java.io.Serializable接口

Collection框架中實(shí)現(xiàn)比較要實(shí)現(xiàn)Comparable接口和Comparator接口

33.STRING與STRINGBUFFER的區(qū)別。

答:STRING的長(zhǎng)度是不可變的,STRINGBUFFER的長(zhǎng)度是可變的。如果你對(duì)字符串

中的內(nèi)容經(jīng)常進(jìn)行操作,特別是內(nèi)容要修改時(shí),那么使用StringBuffer,如果最后需要String,

那么使用StringBuffer的toString()方法

34.談?wù)刦inal,finally,finalize的區(qū)別

答:final—修飾符(關(guān)鍵字)如果■個(gè)類被聲明為final,意味著它不能再派生出新的子

類,不能作為父類被繼承。因此一個(gè)類不能既被聲明為abstract的,又被聲明為final的。

將變量或方法聲明為final,可以保證它們?cè)谑褂弥胁槐桓淖?。被聲明為final的變量必須在

聲明時(shí)給定初值,而在以后的引用中只能讀取,不可修改。被聲明為final的方法也同樣只

能使用,不能重載

finally一再異常處理時(shí)提供finally塊來(lái)執(zhí)行任何清除操作。如果拋出一個(gè)異常,那么

相匹配的catch子句就會(huì)執(zhí)行,然后控制就會(huì)進(jìn)入finally塊(如果有的話)

finalize—方法名。Java技術(shù)允許使用finalize()方法在垃圾收集器將對(duì)象從內(nèi)存中清除

出去之前做必要的清理工作。這個(gè)方法是由垃圾收集器在確定這個(gè)對(duì)象沒(méi)有被引用時(shí)對(duì)這個(gè)

對(duì)象調(diào)用的。它是在Object類中定義的,因此所有的類都繼承了它。子類覆蓋finalize()方

法以整理系統(tǒng)資源或者執(zhí)行其他清理工作。finalize()方法是在垃圾收集器刪除對(duì)象之前對(duì)

這個(gè)對(duì)象調(diào)用的

35.面向?qū)ο蟮奶卣饔心男┓矫?/p>

答:主要有以下四方面:

1.抽象:抽象就是忽略一個(gè)主題中與當(dāng)前目標(biāo)無(wú)關(guān)的那些方面,以便更充分地注意與當(dāng)

前目標(biāo)有關(guān)的方面。抽象并不打算了解全部問(wèn)題,而只是選擇其中的?部分,暫時(shí)不用部分

細(xì)節(jié)。抽象包括兩個(gè)方面,一是過(guò)程抽象,二是數(shù)據(jù)抽象。

2.繼承:繼承是一種聯(lián)結(jié)類的層次模型,并且允許和鼓勵(lì)類的重用,它提供了?種明確

表述共性的方法。對(duì)象的一個(gè)新類可以從現(xiàn)有的類中派生,這個(gè)過(guò)程稱為類繼承。新類繼承

了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派

生類可以從它的基類那里繼承方法和實(shí)例變量,并且類可以修改或增加新的方法使之更適合

特殊的需要。

3.封裝:封裝是把過(guò)程和數(shù)據(jù)包圍起來(lái),對(duì)數(shù)據(jù)的訪問(wèn)只能通過(guò)已定義的界面。面向?qū)?/p>

象計(jì)算始于這個(gè)基本概念,即現(xiàn)實(shí)世界可以被描繪成?系列完全自治、封裝的對(duì)象,這些對(duì)

象通過(guò)一個(gè)受保護(hù)的接口訪問(wèn)其他對(duì)象。

4.多態(tài)性:多態(tài)性是指允許不同類的對(duì)象對(duì)同一消息作出響應(yīng)。多態(tài)性包括參數(shù)化多

態(tài)性和包含多態(tài)性。多態(tài)性語(yǔ)言具有靈活、抽象、行為共享、代碼共享的優(yōu)勢(shì),很好的解決

了應(yīng)用程序函數(shù)同名問(wèn)題。

36.String是最基本的數(shù)據(jù)類型嗎

答:不是,基本數(shù)據(jù)類型包括byte、int、char、long、float、double>boolean和short。

java』ang.String類是final類型的,因此不可以繼承這個(gè)類、不能修改這個(gè)類。為了提高效率

節(jié)省空間,我們應(yīng)該用StringBuffer類

37.int和Integer有什么區(qū)別

答:Java提供兩種不同的類型:引用類型和原始類型(或內(nèi)置類型)。

Int是java的原始數(shù)據(jù)類型,Integer是java為int提供的wapper。Java為每個(gè)原始類型

提供了封裝類。

原始類型封裝類:

boolean:Boolean

char:Character

byte:Byte

short:Short

int:Integer

long:Long

float:Float

double:Double

引用類型和原始類型的行為完全不同,并且它們具有不同的語(yǔ)義。引用類型和原始類型

具有不同的特征和用法,它們包括:大小和速度問(wèn)題,這種類型以哪種類型的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ),

當(dāng)引用類型和原始類型用作某個(gè)類的實(shí)例數(shù)據(jù)時(shí)所指定的缺省值。對(duì)象引用實(shí)例變量的缺省

值為null,而原始類型實(shí)例變量的缺省值與它們的類型有關(guān)

38.heap和stack有什么區(qū)別

答:棧是一種線形集合,其添加和刪除元素的操作應(yīng)在同一段完成。棧按照后進(jìn)先出的

方式進(jìn)行處理。堆是棧的一個(gè)組成元素

39.Java的接口和C++的虛類的相同和不同處

答:由于Java不支持多繼承,而有可能某個(gè)類或?qū)ο笠褂梅謩e在幾個(gè)類或?qū)ο罄锩?/p>

的方法或?qū)傩裕F(xiàn)有的單繼承機(jī)制就不能滿足要求。與繼承相比,接口有更高的靈活性,因

為接口中沒(méi)有任何實(shí)現(xiàn)代碼。當(dāng)一個(gè)類實(shí)現(xiàn)了接口以后,該類要實(shí)現(xiàn)接口里面所有的方法和

屬性,并且接口里面的屬性在默認(rèn)狀態(tài)下面都是publicstatic,所有方法默認(rèn)情況下是public.

一個(gè)類可以實(shí)現(xiàn)多個(gè)接口。

40.描述一下JVM加載class文件的原理機(jī)制?

答:JVM中類的裝載是由ClassLoader和它的子類來(lái)實(shí)現(xiàn)的JavaClassLoader是一個(gè)重

要的Java運(yùn)行時(shí)系統(tǒng)組件。它負(fù)責(zé)在運(yùn)行時(shí)查找和裝入類文件的類。

41.排序都有哪幾種方法?請(qǐng)列舉

答:排序的方法有:插入排序(直接插入排序、希爾排序),交換排序(冒泡排序、快

速排序),選擇排序(直接選擇排序、堆排序),歸并排序,分配排序(箱排序、基數(shù)排序)

快速排序的偽代碼。

使用快速排序方法對(duì)a[0:n-1]排序:

從a[0:n-1]中選擇一個(gè)元素作為middle,該元素為支點(diǎn),把余下的元素分割為兩段left

和right,使得left中的元素都小于等于支點(diǎn),而right中的元素都大于等于支點(diǎn)。

遞歸地使用快速排序方法對(duì)left進(jìn)行排序

遞歸地使用快速排序方法對(duì)right進(jìn)行排序

所得結(jié)果為left+middle+right

42.一個(gè)”.java"源文件中是否可以包括多個(gè)類(不是內(nèi)部類)?有什么限制?

答:可以。必須只有一個(gè)類名與文件名相同。

43.java中有幾種類型的流?JDK為每種類型的流提供了一些抽象類以供繼承,請(qǐng)說(shuō)出他們

分別是哪些類?

答:字節(jié)流,字符流。字節(jié)流繼承于InputStreamOutputstream,字符流繼承于

InputStreamReaderOutputStreamWriter。在java.io包中還有許多其他的流,主要是為了提高

性能和使用方便。

44.java中實(shí)現(xiàn)多態(tài)的機(jī)制是什么?

答:方法的重寫Overriding和重載Overloading是Java多態(tài)性的不同表現(xiàn)。重寫Overriding

是父類與子類之間多態(tài)性的一種表現(xiàn),重載Overloading是一個(gè)類中多態(tài)性的一種表現(xiàn)。

45.靜態(tài)變量和實(shí)例變量的區(qū)別?

46.什么是java序列化,如何實(shí)現(xiàn)java序列化?

答:序列化就是?種用來(lái)處理對(duì)象流的機(jī)制,所謂對(duì)象流也就是將對(duì)象的內(nèi)容進(jìn)行流化。

可以對(duì)流化后的對(duì)象進(jìn)行讀寫操作,也可將流化后的對(duì)象傳輸于網(wǎng)絡(luò)之間。序列化是為了解

決在對(duì)對(duì)象流進(jìn)行讀寫操作時(shí)所引發(fā)的問(wèn)題。

序列化的實(shí)現(xiàn):將需要被序列化的類實(shí)現(xiàn)Serializable接口,該接口沒(méi)有需要實(shí)現(xiàn)的方

法,implementsSerializable只是為了標(biāo)注該對(duì)象是可被序列化的,然后使用一個(gè)輸出流(如:

FileOutputStream)來(lái)構(gòu)造一個(gè)ObjectOulputStream(對(duì)象流)對(duì)象,接著,使用

ObjectOutputStream對(duì)象的writeObject(Objectobj)方法就可以將參數(shù)為obj的對(duì)象寫出(即保

存其狀態(tài)),要恢復(fù)的話則用輸入流。

47.是否可以從一個(gè)static方法內(nèi)部發(fā)出對(duì)非static方法的調(diào)用?

答:不可以,如果其中包含對(duì)象的method();不能保證對(duì)象初始化.

48.寫clone。方法時(shí),通常都有一行代碼,是什么?

答:Clone有缺省行為,super.clone。;他負(fù)責(zé)產(chǎn)生正確大小的空間,并逐位復(fù)制。

49.在JAVA中,如何跳出當(dāng)前的多重嵌套循環(huán)?

答:用break;return方法。

50.說(shuō)出一些常用的類,包,接口,請(qǐng)各舉5個(gè)

答:常用的類:BufferedReaderBufferedWriterFileReaderFileWirterStringInteger

常用的包:java.langjava.awtjava.iojava.utiljava.sql

常用的接口:RemoteListMapRunnableSerializableActionListener

51.BS與CS的聯(lián)系與區(qū)別。

答:C/S是Client/Server的縮寫.服務(wù)器通常采用高性能的PC、工作站或小型機(jī),并采

用大型數(shù)據(jù)庫(kù)系統(tǒng),如Oracle、Sybase、Informix或SQLServer.客戶端需要安裝專用的客戶

端軟件.

B/S是Brower/Server的縮寫,客戶機(jī)上只要安裝一個(gè)瀏覽器(Browser),如Netscape

Navigator或InternetExplorer,服務(wù)器安裝Oracle、Sybase、Inform汰或SQLServer等數(shù)據(jù)庫(kù).

在這種結(jié)構(gòu)下,用戶界面完全通過(guò)WWW瀏覽器實(shí)現(xiàn),一部分事務(wù)邏輯在前端實(shí)現(xiàn),但是主要

事務(wù)邏輯在服務(wù)器端實(shí)現(xiàn).瀏覽器通過(guò)WebServer同數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)交互.

C/S與B/S區(qū)別:

1.硬件環(huán)境不同:

C/S一般建立在專用的網(wǎng)絡(luò)上,小范圍里的網(wǎng)絡(luò)環(huán)境,局域網(wǎng)之間再通過(guò)專門服務(wù)器提

供連接和數(shù)據(jù)交換服務(wù).

B/S建立在廣域網(wǎng)之上的,不必是專門的網(wǎng)絡(luò)硬件環(huán)境,例與電話上網(wǎng),租用設(shè)備.信息

自己管理.有比C/S更強(qiáng)的適應(yīng)范圍,?般只要有操作系統(tǒng)和瀏覽器就行

2.對(duì)安全要求不同

C/S?般面向相對(duì)固定的用戶群,對(duì)信息安全的控制能力很強(qiáng).一般高度機(jī)密的信息系

統(tǒng)采用C/S結(jié)構(gòu)適宜.可以通過(guò)B/S發(fā)布部分可公開(kāi)信息.

B/S建立在廣域網(wǎng)之上,對(duì)安全的控制能力相對(duì)弱,可能面向不可知的用戶.

3.對(duì)程序架構(gòu)不同

C/S程序可以更加注重流程,可以對(duì)權(quán)限多層次校驗(yàn),對(duì)系統(tǒng)運(yùn)行速度可以較少考慮.

B/S對(duì)安全以及訪問(wèn)速度的多重的考慮,建立在需要更加優(yōu)化的基礎(chǔ)之上.比C/S有更

高的要求B/S結(jié)構(gòu)的程序架構(gòu)是發(fā)展的趨勢(shì),從MS的.Net系列的BizTalk2000Exchange

2000等,全面支持網(wǎng)絡(luò)的構(gòu)件搭建的系統(tǒng).SUN和IBM推的JavaBean構(gòu)件技術(shù)等,使B/S

更加成熟.

4.軟件重用不同

C/S程序可以不可避免的整體性考慮,構(gòu)件的重用性不如在B/S要求下的構(gòu)件的重用性

好.

B/S對(duì)的多重結(jié)構(gòu),要求構(gòu)件相對(duì)獨(dú)立的功能.能夠相對(duì)較好的重用.就入買來(lái)的餐桌可

以再利用,而不是做在墻上的石頭桌子

5.系統(tǒng)維護(hù)不同

C/S程序由于整體性,必須整體考察,處理出現(xiàn)的問(wèn)題以及系統(tǒng)升級(jí).升級(jí)難.可能是

再做一個(gè)全新的系統(tǒng)

B/S構(gòu)件組成,方面構(gòu)件個(gè)別的更換,實(shí)現(xiàn)系統(tǒng)的無(wú)縫升級(jí).系統(tǒng)維護(hù)開(kāi)銷減到最小.用戶

從網(wǎng)上自己下載安裝就可以實(shí)現(xiàn)升級(jí).

6.處理問(wèn)題不同

C/S程序可以處理用戶面固定,并且在相同區(qū)域,安全要求高需求,與操作系統(tǒng)相關(guān).

應(yīng)該都是相同的系統(tǒng)

B/S建立在廣域網(wǎng)上,面向不同的用戶群,分散地域,這是C/S無(wú)法作到的.與操作系

統(tǒng)平臺(tái)關(guān)系最小.

7.用戶接口不同

C/S多是建立的Window平臺(tái)上,表現(xiàn)方法有限,對(duì)程序員普遍要求較高

B/S建立在瀏覽器上,有更加豐富和生動(dòng)的表現(xiàn)方式與用戶交流.并且大部分難度減低,

減低開(kāi)發(fā)成本.

8.信息流不同

C/S程序一般是典型的中央集權(quán)的機(jī)械式處理,交互性相對(duì)低

B/S信息流向可變化,B-BB-CB-G等信息、流向的變化,更像交易中心.

52.說(shuō)出一些常用的類,包,接口,請(qǐng)各舉5個(gè)

答:常用的類:BufferedReaderBufferedWriterFileReaderFileWirterStringInteger

常用的包:java.langjava.awtjava.iojava.utiljava.sql

常用的接口:RemoteListM叩DocumentNodeList

基礎(chǔ)題

1.float型floatf=3.4是否正確?

不正確。精度不準(zhǔn)確,應(yīng)該用強(qiáng)制類型轉(zhuǎn)換,如下所示:floatf=(float)3.4

Inti=newint(5);Long1=newLong(5)-〉貝iji.equals(l)為false;i.equals(5)為true

2.Strings=newString("xyz”);創(chuàng)建了幾個(gè)StringObject

答:“xyz”本身作為字符常量,在匯編語(yǔ)言中應(yīng)該作為常量放在數(shù)據(jù)段,Java有一

個(gè)類似數(shù)據(jù)段的constantpool保存這個(gè)常量,在classloader加載這個(gè)類的時(shí)候就把“xyz”和

這個(gè)類的其他一些信息放在constantpoolnewString(“xyz")根據(jù)常量“xyz”在heap上創(chuàng)建

String對(duì)象所以,一共兩個(gè)對(duì)象。?個(gè)對(duì)象+?個(gè)引用;

String(Stringoriginal)InitializesanewlycreatedStringobjectsothatit

representsthesamesequenceofcharactersastheargument;inotherwords,t

henewlycreatedstringisacopyoftheargumentstring.

3.Math.round(l1.5)等於多少?Math.round(-11.5)等於多少

答:Math.round(l1.5)==12;Math.round(-11.5)==-ll;round方法返回與參數(shù)最接近的長(zhǎng)整

數(shù),參數(shù)加1/2后求其floor

4.shortsi=1;si=si+1;有什么錯(cuò)?shortsi=l;sl+=1;有什么錯(cuò)

答:shortsi=1;si=si+1;(sl+1運(yùn)算結(jié)果是int型,需要強(qiáng)制轉(zhuǎn)換類型)shortsi=1;

si+=1;(可以正確編譯)分析java的|'|動(dòng)類型轉(zhuǎn)換?默認(rèn)是血型。

5.用最有效率的方法算出2乘以8等於幾

答:2?3

6.以下哪一個(gè)不是賦值符號(hào)?

A.+=B.?=C.?<=D.?>=

參考答案:

A彳艮明顯是賦值符號(hào)

8.<<=左移賦值

C.不是

D.?>=無(wú)符號(hào)右移賦值,左邊空出的位以。填充

<<=左移賦值;>>=右移賦值

例1:

vartemp;

temp=-14?>2

結(jié)果為:1073741820。變量temp的值-14(即二進(jìn)制的111111111111111111111111

11110010),右移兩位后等于1073741820(即二進(jìn)制的001111111111111111111111

11111100)?

例2:

vartemp;

temp=-14;

temp?=2

結(jié)果:temp的值為-4:因?yàn)?4(即二進(jìn)制的11110010)右移兩位后等于-4(即二進(jìn)制

的11111100)o

7.繼承時(shí)類的執(zhí)行順序問(wèn)題,先后打印順序。

publicclassParent{

//1

staticinta=1;

U2

static

{

a=10;

System.out.println("parentstaticcode");

)

//4

publicParent(){

System.out.println("Parentconstructor”);

System.out.println("Parenta="+a);

)

publicstaticvoidmain(String[]args){

System.out.println("*****************");

Parentc=newChild();

)

)

publicclassChildextendsParent{

staticinta=2;

//3

static{

a=20;

System.out.println("childstaticcode");

)

publicChild(){

System.out.println("Childconstructor");

System.out.println("Childvara="+a);

}

)

輸出結(jié)果:

parentstaticcode

*****************

childstaticcode

Parentconstructor

Parenta=10

Childconstructor

Childvara=20

由此可看出在還沒(méi)有實(shí)例化類的時(shí)候(注意*號(hào))已經(jīng)執(zhí)行了static代碼塊。順序

是先父類后子類.然后才調(diào)用父類的構(gòu)造方法,再調(diào)用子類的構(gòu)造方法.就是這個(gè)

順序了.

8.內(nèi)部類的實(shí)現(xiàn)方式

publicclassOuterClass{

staticinta;

intb;

privateclasslnnerClass{

publiclnnerClass(){

System.out.println("lnnerClasscreate:"+a);

)

)

publicOuterClass(){

InnerClassic=newlnnerClass();

System.out.println("OuterClasscreate");

)

publicstaticvoidmain(String[]args){

OuterClassoc=newOuterClass();

)

)

總結(jié):

一.靜態(tài)內(nèi)部類可以有靜態(tài)成員,而非靜態(tài)內(nèi)部類則不能有靜態(tài)成員。

二.靜態(tài)內(nèi)部類的非靜態(tài)成員可以訪問(wèn)外部類的靜態(tài)變量,而不可訪問(wèn)外部類的

非靜態(tài)變量;

三.非靜態(tài)內(nèi)部類的非靜態(tài)成員可以訪問(wèn)外部類的非靜態(tài)變量

9.float

publicclassTest2

EHS{

publicstaticvoidmain(String[]args)

軸(

floata=3.4;

L}

這個(gè)簡(jiǎn)單的程序能不能編譯通過(guò)呢?

其實(shí)是不能的。原因是精度問(wèn)題,應(yīng)該用強(qiáng)制類型轉(zhuǎn)換.

floata=(float)3.4;

再來(lái)看看這個(gè)能不能編譯通過(guò)

publicclassTest2

□E(

publicstaticvoidmain(String[]args)

由由{

Floata=newFloat(3.4);

卜}

L}

其實(shí)是沒(méi)問(wèn)題的。

我們來(lái)看看Float類的源代碼吧:

日田publicFloat(doublevalue){

this.value=(float)value;

L}

其中有一個(gè)構(gòu)造方法在方法里已經(jīng)進(jìn)行了向下轉(zhuǎn)型。

所以這樣寫是沒(méi)有問(wèn)題的.

publicclassTest2

(

publicstaticvoidmain(String[]args)

Floata=newFloat(3.4);

System.out.println(a.SIZE);

a=newFloat(34000);

System.out.println(a.SIZE);

)

)

輸出為:32(float值的字節(jié)數(shù))

我們先來(lái)看看JDK的解釋吧.

publicstaticfinalintSIZE

Thenumberofbitsusedtorepresentafloatvalue.

意思是說(shuō):通常去描述一個(gè)float值的位數(shù).

這個(gè)是一個(gè)常量,來(lái)看看源碼吧:

publicstaticfinalintSIZE=32;

finalint變量一旦被定義就不能被改變

10.繼承重寫訪問(wèn)權(quán)限

classA{

protectedintmethodi(inta,intb){return0;}

}

WhichtwoarevalidinaclassthatextendsclassA?(Choosetwo)

A.publicintmethodi(inta,intb){return0;}

B.privateintmethodi(inta,intb){return0;}

C.privateintmethodi(inta,longb){return0;}

D.publicshortmethodi(inta,intb){return0;}

E.staticprotectedintmethod1(inta,intb){return0;}

此題考查的是繼承重寫問(wèn)題.

當(dāng)一個(gè)子類重寫父類的方法時(shí),重寫的方法的訪問(wèn)權(quán)限

必須大于等于父類的訪問(wèn)權(quán)限.

在此題中父類中的方法訪問(wèn)權(quán)限為protected,子類只能是

protected或public.這時(shí)A是符合題意的.

由于選項(xiàng)C的形參和父類的不一樣,沒(méi)有重寫的效果,所以

在子類出現(xiàn)也是沒(méi)問(wèn)題的.

所以此題選:AC

11.繼承重寫

publicclassA{

//3

publicA(){

a1();

)

publicvoida1(){

System.out.println("A-a1");

)

)

publicclassBextendsA{

intbb=0;

//2

publicB(){

//5

bb=1000;

)

//4

publicvoida1(){

System.out.println("bbisn+bb);

System.out.println("B-a1");

)

publicstaticvoidmain(String[]args){

newB();

)

)

答案:

bbis0

B-al

看看執(zhí)行順序就明白了.

在方法被al()被重寫的情況下,父類的al是沒(méi)有機(jī)會(huì)

被調(diào)用的.

12.繼承&&訪問(wèn)權(quán)限〃選111能正確賦值的:

publicclassA{

privateinta;

publicintchange(intm){

returnm;

)

)

publicclassBextendsA{

publicintb;

publicstaticvoidmain(String[]args){

Aaa=newA();

Bbb=newB();

intk;

//px

在px處可以正確賦值的有:

Ak=m;

Bk=b;//b是static時(shí)可以

Ck=aa.a;〃當(dāng)a是非Private修飾時(shí)可以

Dk=bb.change(30);

Ek=bb.a〃當(dāng)a是非Private修飾時(shí)可以

選D

13.for語(yǔ)句執(zhí)行順序

publicclassForTest

(

staticbooleanfoo(charc)

(

System.out.println(c);

returntrue;

)

publicstaticvoidmain(String[]args)

(

inti=0;

for(foo(,A');foo('B,)&&(i<2);foo('C'))

(

i++;

foo(D');

此題結(jié)果為:ABDCBDCB

這道題考查的for循環(huán)的執(zhí)行順序.

for(inti=0;i<10;i++){}

首先先執(zhí)行inti=0;注意這個(gè)只是初始化一次,

就是在第一次的時(shí)候.接著執(zhí)行iv10;

然后執(zhí)行方法體{}里面的內(nèi)容,最后才執(zhí)行i++;

第二次及以后就直接執(zhí)行ivlO;然后方法體;最后

i++;如此順序直到結(jié)束為止.

14.實(shí)例化非static內(nèi)部類

1.publicclassOuter{

2.publicvoidsomeOuterMethod(){

3.//Line3

4.)

5.publicclassInner{}

6.publicstaticvoidmain(String[]argv){

7.Outero=newOuter();

8.//Line8

9.)

10.}

WhichinstantiatesaninstanceofInner?

A.newInner();//Atline3

B.newInner();//Atline8

C.newo.Inner();//Atline8//o.newInner();

D.newOuter.Inner();//Atline8〃靜態(tài)內(nèi)部類

出:題選A.

15.內(nèi)部類的幾種實(shí)例化方法

內(nèi)部類的實(shí)例化可以在普通方法里也可以在static方法里實(shí)例化.

如下:

publicclassOuter

(

Inneri=newOuter.Inner();

publicvoidmethod()

(

newInner();

)

publicclassInner{

}

publicstaticvoidmain(String[Jargs)

(

Outero=newOuter();

Inneri=o.newInner();

}

staticvoida()

(

Outero=newOuter();

Inneri=o.newInner();

16.構(gòu)造函數(shù)與方法

publicclassJtest{

intm=l;

inti=3;

voidJtest(){

m=2;

i=4;

)

publicstaticvoidmain(String[]args){

Jtestapp=newJtest();

System.out.println(app.m+",,,+app.i);

)

)

寫出輸出.

結(jié)果是1,3;

因?yàn)樵谶@里voidJtest();并沒(méi)有并調(diào)用,它只是一個(gè)方法,而非構(gòu)造方法,這樣的編寫是有警告

的,不過(guò)可以運(yùn)行.

17.沒(méi)有類型修飾的構(gòu)造函數(shù)

publicclassJtest{

intm=l;

inti=3;

Jtest(){

m=2;

i=4;

}

publicstaticvoidmain(String[]args){

Jtestapp=newJtest();

System.out.println(app.m+H,H+app.i);

)

)

寫出輸出:

結(jié)果是2,4;

調(diào)用了構(gòu)造方法,不加修飾符,默認(rèn)訪問(wèn)權(quán)限是packageaccess,在Java里沒(méi)有關(guān)鍵字表示,就是

包內(nèi)的能訪問(wèn),包外就不行了(即使導(dǎo)入也不行).

18.函數(shù)參數(shù)傳遞一臨時(shí)變量

publicclassTest

(

staticvoidoper(intb)

(

b=b+100;

)

publicstaticvoidmain(StringlJargs)

inta=99;

oper(a);

System.out.println(a);

輸出為99.

我們來(lái)分析一下內(nèi)存:

inta=99;首先在棧里面開(kāi)辟一塊空間保存a比如axxxx然后調(diào)用oper(a);這時(shí)把a(bǔ)的值99

賦給intb;b在內(nèi)存里也開(kāi)辟了自己的空間,此時(shí)值也是99.然后執(zhí)行oper(a);方法體,b=b+

100;此時(shí)b的值為199,a的值為99.

19.concatString

publicclassTest{

publicstaticvoidmain(String[]args){

Stringa=newString(nAu);

Stringb=newString("Bu);

oper(a,b);

System.out.print(a+'\"+b);

}

staticvoidoper(Stringc,Stringd){

c.concat(uBn);

d=c;

)

}

此程序輸出:A,B.

原因就是String是final類型的.并不會(huì)被改變.

publicclassTest

(

publicstaticvoidmain(Stringf]args)

(

Stringa=newStringC'A");

Stringb=newString(MBH);

a.concat(,'aa");

System.out.println(a++b);

這個(gè)還是會(huì)輸出A,B

原因同上.

publicclassTest

(

publicstaticvoidmain(String[Jargs)

{

Stringa=newString(*'Au);

Stringb=newString("BH);

a=a.concat("aan);

System.out.println(a++b);

輸出的是Aaa,B。

因?yàn)镾tring是final類型的.所以執(zhí)行到a=a.concat("aa”);會(huì)在heap里新創(chuàng)建一個(gè)對(duì)象,而a

指向它.這是一新的地址洞Stringa這個(gè)已經(jīng)不同了.所以輸出的是后一個(gè).即改變后的值.

20.StringBuffer的append方法

publicclassTest

(

staticvoidoper(StringBufferc,StringBufferd)

(

d=c.append(”B");

}

publicstaticvoidmain(String[]args)

(

StringBuffera=newStringBuffer(nA");

StringBufferb=newStringBuffer("B");

oper(a,b);

System.out.println(a++b);

}

)

此程序會(huì)輸出:AB,B

21.多態(tài)

publicclassTest

(

publicstaticvoidmain(String[]args)

(

Aa=newB();

a.print();

)

)

classA

(

privateinti=1;

publicA()

inti=2;

publicvoidprint()

(

System.out.println(nTheresultis:"+i);

)

)

classBextendsA

(

privateinti=3;

publicB()

(

inti=6;

}

publicvoidprint()

(

System.out.println("Theresultis:"+i);

)

)

輸出結(jié)果是:3

此題考查的是多態(tài)。在這里是父類的引用指向子類的對(duì)象。父類的引用只能訪問(wèn)子類和父類

共有的方法.

執(zhí)行順序是這樣的:

publicclassTest

(

publicstaticvoidmain(Stringf]args)

(

Aa=newB();

a.print();

}

}

classA

(

//2

privateinti=1;

//3

publicA()

(

inti=2;

)

publicvoidprint()

System.out.println(nTheresultis

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論