JAVA面試題

數(shù)組和集合的區(qū)別

一、數(shù)組聲明了它容納的元素的類型,而集合不聲明。


二、數(shù)組是靜態(tài)的,一個(gè)數(shù)組實(shí)例具有固定的大小,一旦創(chuàng)建了就無(wú)法改變?nèi)萘苛?。而集合是可以?dòng)態(tài)擴(kuò)展容量,可以根據(jù)需要?jiǎng)討B(tài)改變大小,集合提供更多的成員方法,能滿足更多的需求。


三、數(shù)組的存放的類型只能是一種(基本類型/引用類型),集合存放的類型可以不是一種(不加泛型時(shí)添加的類型是Object)。


[if !supportLists]四、[endif]數(shù)組是java語(yǔ)言中內(nèi)置的數(shù)據(jù)類型,是線性排列的,執(zhí)行效率或者類型檢查都是最快的

集合的集成體系


Map集合能否迭代器遍歷

[if !supportLists]1.?[endif]在map中雖然不能直接實(shí)例化迭代器,但map集合提供了keySet()方法和value()方法,可以通過(guò)先將鍵值輸出到一個(gè)集合,可意識(shí)list集合或者map集合。

2.通過(guò)鍵的集合就可以直接實(shí)例化迭代器。

3.在進(jìn)行迭代操作時(shí),可以通過(guò)get()方法,找出每個(gè)鍵對(duì)應(yīng)的值,輸出即可。

Vector & ArrayList區(qū)別

1) ?Vector的方法都是同步的(Synchronized),是線程安全的(thread-safe),而ArrayList的方法不是,由于線程的同步必然要影響性能,因此,ArrayList的性能比Vector好。

2) 當(dāng)Vector或ArrayList中的元素超過(guò)它的初始大小時(shí),Vector會(huì)將它的容量翻倍,而ArrayList只增加50%的大小,這樣,ArrayList就有利于節(jié)約內(nèi)存空間。

LinkedList和ArrayList底層如何實(shí)現(xiàn),如何選擇使用

ArrayList的內(nèi)部實(shí)現(xiàn)是基于內(nèi)部數(shù)組Object[],所以從概念上講,它更象數(shù)組,但LinkedList的內(nèi)部實(shí)現(xiàn)是基于一組連接的記錄,所以,它更象一個(gè)鏈表結(jié)構(gòu),所以,它們?cè)谛阅苌嫌泻艽蟮牟顒e: 從上面的分析可知,在ArrayList的前面或中間插入數(shù)據(jù)時(shí),你必須將其后的所有數(shù)據(jù)相應(yīng)的后移,這樣必然要花費(fèi)較多時(shí)間,所以,當(dāng)你的操作是在一列 數(shù)據(jù)的后面添加數(shù)據(jù)而不是在前面或中間,并且需要隨機(jī)地訪問(wèn)其中的元素時(shí),使用ArrayList會(huì)提供比較好的性能; 而訪問(wèn)鏈表中的某個(gè)元素時(shí),就必須從鏈表的一端開(kāi)始沿著連接方向一個(gè)一個(gè)元素地去查找,直到找到所需的元素為止,所以,當(dāng)你的操作是在一列數(shù)據(jù)的前面或中 間添加或刪除數(shù)據(jù),并且按照順序訪問(wèn)其中的元素時(shí),就應(yīng)該使用LinkedList了。

TreeSet中成員如何確定比較算法

A:自然排序:要在自定義類中實(shí)現(xiàn)Comparerable<T>接口 ?,并且重寫compareTo方法

B:比較器排序:在自定義類中實(shí)現(xiàn)Comparetor<t>接口,重寫compare方法


Hashtable & HashMap

Hashtable和HashMap它們的性能方面的比較類似 Vector和ArrayList,比如Hashtable的方法是同步的,而HashMap的不是。

?

HashSet不能添加重復(fù)的元素,當(dāng)調(diào)用add(Object)方法時(shí)候,

首先會(huì)調(diào)用Object的hashCode方法判hashCode是否已經(jīng)存在,如不存在則直接插入元素;

如果已存在則調(diào)用Object對(duì)象的equals方法判斷是否返回true,如果為true則說(shuō)明元素已經(jīng)存在,如為false則插入元素。

Entry是什么,如何理解

接口Entry是Map<K,V>的內(nèi)部接口,該接口是用來(lái)表示一個(gè)鍵值對(duì)的,一個(gè)這樣的實(shí)例就包含K類型的鍵和V類型的值。包含獲取Key、獲取value以及設(shè)置value的方法,同時(shí)需要重寫equals和hashCode方法。

該接口有四中方式獲取比較器:


1:多態(tài)是什么,前提是什么?

多態(tài)分為編譯時(shí)多態(tài)和運(yùn)行時(shí)多態(tài)。其中編譯時(shí)多態(tài)是靜態(tài)的,主要是指方法的重載,它是根據(jù)參數(shù)列表的不同來(lái)區(qū)分不同的方法。通過(guò)編譯之后會(huì)變成兩個(gè)不同的方法,在運(yùn)行時(shí)談不上多態(tài)。而運(yùn)行時(shí)多態(tài)是動(dòng)態(tài)的,它是通過(guò)動(dòng)態(tài)綁定來(lái)實(shí)現(xiàn)的,也就是大家通常所說(shuō)的多態(tài)性。

繼承:在多態(tài)中必須存在有繼承關(guān)系的子類和父類。

重寫:子類對(duì)父類中某些方法進(jìn)行重新定義,在調(diào)用這些方法時(shí)就會(huì)調(diào)用子類的方法。

向上轉(zhuǎn)型:在多態(tài)中需要將子類的引用賦給父類對(duì)象,只有這樣該引用才既能可以調(diào)用父類的方法,又能調(diào)用子類的方法。

2:多態(tài)中成員訪問(wèn)的特點(diǎn)?

成員變量? ?

成員方法

靜態(tài)方法

多態(tài)中的成員訪問(wèn)特點(diǎn):

A:成員變量

編譯看左邊,運(yùn)行看左邊。

B:構(gòu)造方法

? ? 創(chuàng)建子類對(duì)象的時(shí)候,訪問(wèn)父類的構(gòu)造方法,對(duì)父類的數(shù)據(jù)進(jìn)行初始化。

C:成員方法

? ? ? ? 編譯看左邊,運(yùn)行看右邊。

D:靜態(tài)方法

編譯看左邊,運(yùn)行看左邊。

(靜態(tài)和類相關(guān),算不上重寫,所以,訪問(wèn)還是左邊的)

由于成員方法存在方法重寫,所以它運(yùn)行看右邊。

3:多態(tài)的好處及弊端?

好處:提高了代碼的擴(kuò)展性。

弊端:前期建立父類的引用雖然可以接收后期所有該類的子類對(duì)象。

? 但是只能使用父類中的功能,不能使用子類中的特有功能,

? 因?yàn)榍捌诘某绦驘o(wú)法知道后期的子類的特有內(nèi)容的。

? 但是前期的程序可以使用子類覆蓋了父類的方法的內(nèi)容。

4:什么是向上轉(zhuǎn)型?什么是向下轉(zhuǎn)型?

子類引用的對(duì)象轉(zhuǎn)換為父類類型稱為向上轉(zhuǎn)型。通俗地說(shuō)就是是將子類對(duì)象轉(zhuǎn)為父類對(duì)象。此處父類對(duì)象可以是接口。

向下轉(zhuǎn)型是把父類對(duì)象轉(zhuǎn)為子類對(duì)象

5:抽象類概述及其特點(diǎn)?

抽象類的特點(diǎn)

a:抽象類和抽象方法必須用abstract關(guān)鍵字修飾

abstract class 類名 {}

public abstract void eat();

b:抽象類不一定有抽象方法,有抽象方法的類一定是抽象類或者是接口

c:抽象類不能實(shí)例化那么,抽象類如何實(shí)例化呢?

按照多態(tài)的方式,由具體的子類實(shí)例化。其實(shí)這也是多態(tài)的一種,抽象類多態(tài)。

d:抽象類的子類

要么是抽象類

要么重寫抽象類中的所有抽象方法

6:抽象類成員特點(diǎn)?

A:抽象類的成員特點(diǎn)

a.成員變量:既可以是變量,也可以是常量。abstract是否可以修飾成員變量?不能修飾成員變量

b.構(gòu)造方法:有。

用于子類訪問(wèn)父類數(shù)據(jù)的初始化。

c.成員方法:既可以是抽象的,也可以是非抽象的。

B:

抽象類的成員特點(diǎn)

C:抽象類的成員方法特性:

a.抽象方法 強(qiáng)制要求子類做的事情。(子類必須對(duì)其重寫)

b.非抽象方法 子類繼承的事情,提高代碼復(fù)用性。


1.有一個(gè)類A,有以下兩個(gè)構(gòu)造方法

public A(){}

public A(){

super();

}

沒(méi)有區(qū)別,因?yàn)閟uper中調(diào)用的也是父類中的無(wú)參構(gòu)造器,而第一個(gè)構(gòu)造器也是系統(tǒng)默認(rèn)調(diào)用該構(gòu)造器

上述兩個(gè)構(gòu)造器有沒(méi)有區(qū)別,為什么?

2.有一個(gè)類A,有以下兩個(gè)構(gòu)造方法

public A(){

A("Hello")

}

public A(String s){

System.out.println(s);

}

測(cè)試類Test

public class Test{

public static void main(String[] args){

A a = new A();

}

}

問(wèn):輸出結(jié)果?為什么?

Hello 因?yàn)橛妙悇?chuàng)建對(duì)象時(shí)并沒(méi)有參數(shù),所以調(diào)用A的無(wú)參構(gòu)造器

3.

public class Test3 {

new B();

}

class A {

public A(String s) {

System.out.println(s);

}

}

class B extends A{

}

問(wèn):輸出結(jié)果?為什么?

? 編譯錯(cuò)誤,因?yàn)锳中沒(méi)有無(wú)參構(gòu)造器,但又自己定義了構(gòu)造器,所以沒(méi)有默認(rèn)的無(wú)參構(gòu)造器,B得寫super(s)才能調(diào)用,并且創(chuàng)建B對(duì)象是也沒(méi)有參數(shù);

4.this關(guān)鍵字和super關(guān)鍵字分別代表什么?以及他們各自的使用場(chǎng)景和作用。

通過(guò)上課、習(xí)題以及自己測(cè)試,理解總結(jié),盡量詳細(xì)。

this:本類對(duì)象的引用

super:父類存儲(chǔ)空間的標(biāo)識(shí)(父類對(duì)象的引用)

? ? 使用場(chǎng)景

? ? ? ? ? ? 成員變量:

? ? ? ? ? ? ? ? ? ? this.變量 本類的成員變量。

? ? ? ? ? ? ? ? ? ? super.變量 父類的成員變量。

? ? ? ? ? 構(gòu)造方法:

? ? ? ? ? ? ? ? ? ? ? this()本類的構(gòu)造方法

? ? ? ? ? ? ? ? ? ? ? super()父類的構(gòu)造方法

? ? ? ? ? ? 成員方法:

? ? ? ? ? ? ? ? ? ? ? this.方法名()本類的成員方法

? ? ? ? ? ? ? ? ? ? ? super.方法名()父類的成員方法

5.重寫和重載的區(qū)別。

通過(guò)上課、習(xí)題以及自己測(cè)試,完善之前總結(jié)的。

重載不需要看返回值是否一致,而重寫需要,重載值是通過(guò)參數(shù)列表來(lái)調(diào)用不同方法,而重寫是對(duì)方法的不同實(shí)現(xiàn)。

Overload(重載)

(1) 重載Overload是一個(gè)類中多態(tài)性的一種表現(xiàn)。是編譯時(shí)的多態(tài)性。方法重載是讓類以統(tǒng)一的方式處理不同類型數(shù)據(jù)的一種手段。重載發(fā)生在一個(gè)類中,同名的方法如果有不同的參數(shù)列表(參數(shù)類型不同、參數(shù)個(gè)數(shù)不同或者二者都不同)則視為重載。

(2) Java的方法重載,就是在類中可以創(chuàng)建多個(gè)方法,它們具有相同的名字,但具有不同的參數(shù)列表。調(diào)用方法時(shí)通過(guò)傳遞給它們的不同參數(shù)個(gè)數(shù)和參數(shù)類型來(lái)決定具體使用哪個(gè)方法, 這就是多態(tài)性。

(3) 重載的時(shí)候,返回值類型可以相同也可以不相同。無(wú)法以返回型別作為重載函數(shù)的區(qū)分標(biāo)準(zhǔn)。

(4) 不能通過(guò)訪問(wèn)權(quán)限、返回類型、拋出的異常進(jìn)行重載;

(5) 方法的異常類型和數(shù)目不會(huì)對(duì)重載造成影響;

Override(重寫、覆蓋)

(1) 父類與子類之間的多態(tài)性,對(duì)父類的函數(shù)進(jìn)行重新定義。是運(yùn)行時(shí)的多樣性。如果在子類中定義某方法與其父類有相同的名稱和參數(shù),我們說(shuō)該方法被重寫 (Override)。在Java中,子類可繼承父類中的方法,而不需要重新編寫相同的方法。但有時(shí)子類并不想原封不動(dòng)地繼承父類的方法,而是想作一定的修改,這就需要采用方法的重寫。方法重寫又稱方法覆蓋。

(2)若子類中的方法與父類中的某一方法具有相同的方法名、參數(shù)列表和兼容的返回類型,則新方法將覆蓋原有的方法。如需父類中原有的方法,可使用super關(guān)鍵字,該關(guān)鍵字引用了當(dāng)前類的父類。

(3)子類函數(shù)的訪問(wèn)修飾權(quán)限不能少于父類的。

6.為什么main()寫法固定?

從修飾符、返回值類型、方法名、參數(shù)列表等角度說(shuō)明。

public static void main(String[] args)? public : 說(shuō)明訪問(wèn)權(quán)限? static :說(shuō)明只要加載該類,該模塊先執(zhí)行? main是程序的入口 。 參數(shù)列表是一個(gè)String 類型的數(shù)組,如果編譯時(shí)后加輸入,則可以按照普通String類型數(shù)組理解

7.

public class Test7 {

public static void main(String[] args) {

Y y1 = new Y();

Y y2 = new Y();

}

}

class X {

static {

System.out.println("X的靜態(tài)代碼塊");

}

{

System.out.println("X的構(gòu)造代碼塊");

}

public X() {

System.out.println("X的無(wú)參構(gòu)造器");

}

}

class Y extends X{

static {

System.out.println("Y的靜態(tài)代碼塊");

}

{

System.out.println("Y的構(gòu)造代碼塊");

}

public Y() {

System.out.println("Y的無(wú)參構(gòu)造器");

}

}

問(wèn):輸出結(jié)果?為什么?

X的靜態(tài)代碼塊

Y的靜態(tài)代碼塊

X的構(gòu)造代碼塊

X的構(gòu)造代碼塊

Y的構(gòu)造代碼塊

Y的無(wú)參構(gòu)造器

X的構(gòu)造代碼塊

X的構(gòu)造代碼塊

Y的構(gòu)造代碼塊

Y的無(wú)參構(gòu)造器

4.1整型數(shù)據(jù)

30 ?int和Integer有什么區(qū)別?


31 ?int的取值范圍


32如何使用八進(jìn)制和十六進(jìn)制來(lái)表示整型數(shù)據(jù)


33 ?long的取值范圍


4.2實(shí)型數(shù)據(jù)

34 ?float和double的取值范圍

Float型,內(nèi)存分配4個(gè)字節(jié),占32位

Double型,內(nèi)存分配8個(gè)字節(jié)


35實(shí)型與整型的相互轉(zhuǎn)換


36如何用BigDecimal類進(jìn)行精確計(jì)算


4.3布爾型數(shù)據(jù)

37 ?Java可以用非0來(lái)代表true嗎?


38 ?boolean和它的包裝類的區(qū)別在哪里?


4.4字符型數(shù)據(jù)

39 ?char的取值范圍


40 ?char能否存儲(chǔ)漢字


41如何使用轉(zhuǎn)義字符


4.5 String型數(shù)據(jù)(重點(diǎn)背誦)

42字符串字面量是否自動(dòng)生成一個(gè)String對(duì)象


43字符串對(duì)象池的作用是什么


44 ?StringBuffer和StringBuilder存在的作用是什么


45如何輸出反轉(zhuǎn)過(guò)后的字符串


46如何使用指定的字符集創(chuàng)造String對(duì)象


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)自:http://blog.csdn.net/jackfrued/article/details/4492194...
    王帥199207閱讀 8,806評(píng)論 3 93
  • 接口/抽象類意義規(guī)范、擴(kuò)展、回調(diào)為其子類提供一個(gè)公共的類型 封裝子類中得重復(fù)內(nèi)容 定義抽象方法,子類雖然有不同的實(shí)...
    MigrationUK閱讀 2,348評(píng)論 1 28
  • 小編費(fèi)力收集:給你想要的面試集合 1.C++或Java中的異常處理機(jī)制的簡(jiǎn)單原理和應(yīng)用。 當(dāng)JAVA程序違反了JA...
    八爺君閱讀 5,220評(píng)論 1 114
  • 1 以下屬于面向?qū)ο蟮奶卣鞯氖牵ǎ?答:面向?qū)ο蟮奶卣髦饕牵悍庋b、繼承、多態(tài)。而多態(tài)的實(shí)現(xiàn)主要是函數(shù)方法的重載和...
    apollooo閱讀 6,565評(píng)論 1 2
  • 八月了, 時(shí)間的河把你沖過(guò)來(lái), 蟬鳴聽(tīng)起來(lái)也少了些許氣力, 巴掌大的葉子上滿是熟絡(luò)。 這夏末的時(shí)節(jié), 陽(yáng)光透射的葉...
    納宛閱讀 446評(píng)論 2 8

友情鏈接更多精彩內(nèi)容