java面試題(二)

第二部分   類之間的關係


1.用代碼表示A類關聯B類的情況

解析:一個Java應用中不可能只有一個類,所以瞭解類之間的關係對程序員來說非常重要。關聯關係是最常用的一種關係,如果說A關聯B,那麼就是B作爲A的屬性存在。關聯關係是一種複用的策略,即A關聯B的時候,A可以複用B的行爲。

參考答案:

ClassA{

        Private B b;

Publicvoid setB(B b){

This.b=b;

}

}

 

2.請說明Java語言中數組的基本概念,數組的作用,以及數組的聲明創建方式

解析:數組時任何一門語言裏都常用的類型,Java語言也不例外。程序員瞭解數組,不能僅僅從語法上了解,而應該深入理解數組的作用。數組可以用來存儲類型相同的元素,作爲一種數據容器使用。和數組類似的概念是集合,也能作爲數據容器使用。

參考答案:數組時相同元素的集合,作爲數據容器使用。聲明創建一個int型數組,如下所示:int[]x=new int[3];其中3是數組的長度,該數組能夠存儲3個int型變量。

 

3.使用代碼,創建一個長度爲5的String型數組,並使用增強for循環迭代數組打印出數組中的元素。

解析:增強for循環是JDK5增加的特性,可以方便地遍歷數組或集合。程序員需要了解的是,如果JDK版本低於5.0,則不支持這個功能。另外,並不是說有了增強for循環後,傳統的for循環就不被使用,增強for循環只能用來方便地遍歷數組和集合,其他情況下還要使用傳統的for循環。

 

參考答案:

     String[] sArray = new String[5];

for(Strings:sArray){

  System.out.println(s);

}

 

4.說明Arrays類的作用。

解析:在實際工作中,常常需要對數組中的元素進行處理,例如排序等。初級程序員往往選擇自己編寫算法實現。實際上APV中提供了Arrays類,該類中定義了很多和數組有關的工具方法,能夠方便地處理數組,是程序員必須掌握的類。

 

參考答案:Arrays類是java.util包中的一個類,類中所有的方法都是static方法,這些方法都是數組對象的工具方法,能夠對數組進行處理,如sort方法可以對數組元素進行排序

 

5.請使用簡單代碼展示A類依賴B類的含義。

解析:對於程序員來說,瞭解類和類之間的關係非常必要。依賴關係指的是一種瞬間的關係。如果A依賴B,一般指的是A類的某個行爲,需要B類對象作爲參數。

 

參考答案:

class A{

public void f(B b)

}

 

6.請說明依賴關係和關聯關係的區別。

解析:關聯關係和依賴關係是非常常見的兩種關係,二者的區別也很明顯,程序員瞭解二者的區別能夠更深入的理解面向對象的思想。

參考答案:依賴關係是一種瞬時關係,A依賴B,指的是A的某個行爲的參數是B的類型,也就是說,A要想實現這個行爲,必須依賴B的實例,A關聯B,是一種長久的關係。關聯關係的是B作爲A的屬性存在,只要實例化一個A的對象,就會爲這個A的對象實例化一個B的對象,作爲它的屬性使用,可以在A中任何需要使用B的地方使用B。

 

7.繼承有什麼作用,Java語言中的繼承有什麼特點?

解析:繼承是面嚮對象語言的一大特徵,主要作用是重複使用,子類通過繼承父類,能夠重複使用父類的屬性和方法。指的注意的是,有兩個策略都可使實現重複使用,一個是關聯,一個是繼承,實際編程中,關聯用的更多。因爲子類繼承父類後,相當於父類中的細節將暴露給子類。初級程序員一定不要隨意使用繼承,避免濫用繼承。

參考答案:繼承主要爲了能夠重複使用父類中的成員。Java語言中的繼承是單繼承,也就是說一個類最多隻能繼承一個父類。

 

8、什麼是方法覆蓋(override)?並說明方法覆蓋與方法重載(overioad)的區別。

解析:方法覆蓋是一個非常重要的概念,是多態性的一個體現。方法覆蓋發生再去愛繼承關係中,當子類需要修改從父類繼承到某個方法的方法體時,就可以聲明一個父類同名同參數同返回值的方法,這樣就對父類中的那個方法進行了覆蓋,子類對象調用該方法時將自動綁定到子類中的方法。API中很多類中都進行了方法覆蓋,如String類中的toString方法,就覆蓋了父類Object中的toString方法。

參考答案:覆蓋是發生在繼承關係的子類中,當子類要修改從父類繼承的某個方法的方法體時,就可以在子類中聲明一個與父類同名、同參數並且同返回值類型的方法,這就是方法覆蓋。而重載與繼承沒有關係,指的是在一個類中可以同時聲明多個同名但不同參數的方法,稱爲重載。

 

9、請說明什麼是抽象類?抽象類有什麼作用?

解析:初級程序員往往不需要自己創建抽象類,但是必須瞭解抽象類的概念,並且會使用抽象類。抽象類往往是設計階段的概念,用來定義多個子類的模板,一些具體的實現可以在子類中進行。初級程序員往往需要會創建子類繼承抽象類,實現抽象類中的方法。在API中,抽象類比比皆是。

 

參考答案:抽象類是不能實例化的類,使用abstract修飾。抽象類往往用來做父類使用,定義一些子類的共同屬性或行爲。

 

10、請說明抽象方法的含義,並說明抽象類與抽象方法的關係。

解析:抽象方法都是在抽象類中定義的,是用來定義子類what to do的策略,而具體的how to do都在子類中實現。

 

參考答案:抽象方法是沒有辦法體的方法,使用abstract修飾。抽象類中不一定有抽象方法,但是有抽象方法的類一定是抽象類。

 

11、super關鍵字的兩種用法。

解析:使用一些IDE生成代碼時,常常會在構造方法中見到super這個關鍵字。顧名思義,super是和父類有關的一個關鍵字,熟悉super的用法對熟練掌握繼承很有必要。

 

參考答案:如super():表示調用父類中的每一參考的構造方法:又如super(10);表示調用父類中的具有一個整型參數的構造方法。第二種用法是在子類中調用父類中的成員,如super.f();意思是調用父類中的f()方法。

 

12、final類與final方法有什麼作用?

解析:final修飾符是一個用途非常廣泛的修飾符,可以修飾類,方法,以及屬性。

 

參考答案:final類是不能夠被繼承的類,稱爲終極類,如String類就是final類,不能有子類。final修飾方法後,是終極方法,不能被子類覆蓋,但是可以被子類繼承使用。

 

13.什麼是多態函數?多態函數有什麼用?

解析:多態性是面嚮對象語言的的一大特徵,重載,覆蓋,多態參數是多態性的一種表現形式。多態參數處處可見,例如某方法f(Object o),這個方法的參數類型是Object,使用該方法時,只要傳遞給f的單數類型是Object即可。也就是說,Object類的任意參數可以傳遞給f方法。這就是多態參數。意思是對外形式都一樣,都是Object,具體實現可以是這個類型的任意子類,這就使得該方法比較靈活,Object類即使有了新的子類,卻不需要修改,就能直接作用到那個子類。瞭解多態參數的含義和使用,對於Java的使用特別關鍵。

 

參考答案:多態函數就是參數的類型是某個父類類型,具體爲這個參數賦值的不同以使用該父類的任意子類的對象。使用多態參數,可以使程序的擴展性更好,即使%%%%的子類方法不需要任何修改,就能接受子類類型進行處理。

14.Object類有什麼特點?

解析:Object類是一個非常重要的類,是所有類的父類,包括數組在內,也就是對一個Java類,不管是API中定義的,還是自定義的類,都直接或間接的繼承了Object類。所以,如果有一個方法f(Object o),那麼可以傳遞給這個方法任意一個類的對象,包括%%%%。因爲所有對象都可以說是Object類型。

參考答案:Object類是多有類的直接或間接的父類。

 

15.Object類中的toString方法有什麼用?

解析:Object類是所有類的父類,所以Object類中的方法是所有類都默認具備的。類中的toString 方法可以將任意一個對象作爲字符串返回, API中很多類已經覆蓋了這個方法,將其返回值的格式進行了自定義,如String類中的方法已經覆蓋爲返回字符串的字符序列。toString 方法在很多場合被自動調用,例如打印一個對象時,就自動調用該對象的toString 方法。

參考答案:toString方法可以把對象作爲字符串返回。

 

16.Object類中的equals方法和hashCode 方法。

解析:在Object類中,equals方法比較對象的引用值,也就是隻有物理上是同一對象的兩個引用,在使用equals方法返回true。hashCode方法返回一個對象的內在地址的十六進制值。由於Object類是所有類的父類,所以任意類中都擁有這兩個方法,並都可以進行覆蓋。尤其是操作Set,Map對象時集合元素類的equals方法和hashCode方法非常必要。

參考答案:Oject類中的equals方法用來比較兩個引用值,hashCode用來返回引用的內地址的十六進制數值。在Set以及Map集合中,判斷兩個元素是否重複時,往往需要使用這兩個方法。這兩個方法往往被子類覆蓋,覆蓋的規則是:如果存在x和y兩個對象,調用x.equals(y)返回true時,那麼調用hashCode方法的返回值也該相同;如果x.equals(y)返回false時,那麼調用hashCode方法返回的值可能相同,也可能不同。

 

17.接口有什麼特點,與抽象類有什麼區別?

解析:接口的概念是一個設計層面的概念,初級程序員往往不會自己定義接口,但是會使用接口,理解接口的概念非常必要。接口定義了實現類的規範,即what to do的部分,所有實現類必須按照這個規範進行實現。

 

參考答案:接口的特點是不能定義變量,而且所有方法都是抽象方法。而抽象類中可以有變量,也不強制必須有抽象方法。

 

18.類繼承父類與類實現接口,有什麼區別?

解析:類繼承父類與類實現接口,本質上其實是一樣的。都是將父類或者接口作爲模板,在這個模板上進行擴展或者重寫。程序員在實際編程中,常常需要繼承父類或者實現接口。

 

參考答案:類繼承父類只是單繼承,也就是一個子類最多隻有一個父類;而類實現接口可以多實現,就是一個子類可以同時實現多個接口,並覆蓋所有接口中的所有抽象方法。

 

19.Comparable接口有什麼作用

解析:comparable接口是在實際編程中常常使用的接口,該接口定義了comareTo(Object o)方法,用來定義對象的比較邏輯。這個接口常常在其他API中會強制使用,例如Arrays類的sort(Object[])方法,就強制數組元素必須實現Comparable接口,與這個接口類似的另外一個接口是Comparator。

 

參考答案:Comparable接口定義了compareTo(Object o)方法,可以用來實現對象的比較邏輯,這個接口常常在其他API中強制使用,用來規範對象的比較邏輯。


發佈了19 篇原創文章 · 獲贊 10 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章