1. 程式人生 > >java 面向物件面試題,問答題,構造方法,抽象類,繼承,多型,介面,異常總結;

java 面向物件面試題,問答題,構造方法,抽象類,繼承,多型,介面,異常總結;

一,構造方法的特點

面向物件的思想是如何在java展現的呢? 就是通過類和物件

類是一組相關的屬性和行為的集合。是一個抽象的概念。

物件是該類事物的具體表現形式。具體存在的個體。

一、抽象類的抽象方法的特點是什麼?

被abstract修飾的類稱為抽象類

特點:

1、抽象類不能有物件(不能用new關鍵字來例項化物件)

2、抽象方法一定是在抽象類的,但是抽象類不一定有抽象方法

3、子類繼承抽象類必須重寫抽象類中的抽象方法

4、使用extends關鍵字來繼承

要注意的是抽象方法沒有方法體

二、抽象類的抽象方法的特點是什麼?

一、使用abstract修飾符修飾的類被稱為抽象類;

        抽象類不能例項化物件,只能被繼承;

二、使用abstract修飾符修飾的方法被稱為抽象方法;

 抽象方法不能有方法體,子類必須重寫抽象類中所有的抽象方法;

 

三、抽象類中不一定包含抽象方法,但包含抽象方法的類一定是抽象類;

三、方法過載的方法重寫是什麼?有什麼區別?

重寫是子類的方法覆蓋父類的方法,要求方法名和引數都相同

過載是在同一個類中的兩個或兩個以上的方法,擁有相同的方法名,但是引數卻不相同,方法體也不相同,最常見的過載的例子就是類的建構函式,可以參考API幫助文件看看類的構造方法

四、使用繼承有什麼特點?繼承的優點是什麼?

子類是一種特殊的型別,而不只是父類的一個角色

子類的例項不需要變成另一個類的物件

子類擴充套件,而不是覆蓋或者使父類的功能失效

 優點

新的實現很容易,因為大部分是繼承而來的

很容易修改和擴充套件已有的實現

缺點

打破了封裝,因為基類向子類暴露了實現細節

白盒重用,因為基類的內部細節通常對子類是可見的

當父類的實現改變時可能要相應的對子類做出改變

不能在執行時改變由父類繼承來的實現

五、多型的特點?有什麼優點?

多型的特點:

一、要有繼承;
二、要有重寫;
三、父類引用指向子類物件

多型的優點:
1.可替換性(substitutability)。多型對已存在程式碼具有可替換性。例如,多型對圓Circle類工作,對其他任何圓形幾何體,如圓環,也同樣工作。
2.可擴充性(extensibility)。多型對程式碼具有可擴充性。增加新的子類不影響已存在類的多型性、繼承性,以及其他特性的執行和操作。實際上新加子類更容易獲得多型功能。例如,在實現了圓錐、半圓錐以及半球體的多型基礎上,很容易增添球體類的多型性。

3.介面性(interface-ability)。多型是超類通過方法簽名,向子類提供了一個共同介面,由子類來完善或者覆蓋它而實現的。如圖8.3 所示。圖中超類Shape規定了兩個實現多型的介面方法,computeArea()以及computeVolume()。子類,如Circle和Sphere為了實現多型,完善或者覆蓋這兩個介面方法。
4.靈活性(flexibility)。它在應用中體現了靈活多樣的操作,提高了使用效率。
5.簡化性(simplicity)。多型簡化對應用軟體的程式碼編寫和修改過程,尤其在處理大量物件的運算和操作時,這個特點尤為突出和重要。

六、多型的實現方式是什麼?

使用父類作為方法形參實現多型

使用父類作為方法返回值實現多型

七、如何編寫介面?

編寫介面:   public interface UsbInterface {

              /**

              * USB介面提供服務。

               */

             void service();

}

實現介面:   public class UDisk implements UsbInterface {

             public void service() {

             System.out.println("連線USB口,開始傳輸資料。");

             }

}

使用介面:    UsbInterface uDisk = new UDisk();

uDisk.service();

八、介面的作用是什麼?

介面是一種協議。例如兩個開發者,開發時間完全不一致,那麼需要兩個人的配合開發,則需要一個人講介面寫好,定義好其中所有的變數命名規範、函式定義規範。具體實現類的開發人員則只需要按照介面實現相應功能即可。

介面更像是一種定義的規範

九、介面和抽象類有什麼異同?

相同點:

1.都不能被例項化

2.介面的實現類或者抽象的子類都必須實現類介面或者繼承了抽象才可以被例項化

不同點:

1.介面只有定義,方法不能再介面中實現,實現介面的類要實現介面中的所有方法;抽象類可以有定義與實現方法可以在抽象類中實現

2.介面要實現,抽象要繼承,一個類可以實現多個介面,但只能繼承一個抽象類

3.介面強調設計理念“has-a”的關係,抽象類強調“is-a”關係

4.介面中定義變數預設為public、static、final且要設定初始值方法必須是publicstatic只能是這兩個抽象類可以有自己的成員變數也可以有非抽象的成員方法,成員預設值為:default

5.介面被運用於比較常用的功能,抽象更傾向於充當公共類的角色

6.介面是定義規範的,抽象是對公共部分的抽取

十、什麼是異常,你是如何理解的?

一、執行時異常:我們可以不處理,當出現這種的異常時,總是由虛擬機器接管;

二、檢查時異常:我們經常遇到的IO異常及SQL異常就屬於檢查式異常;java編譯器要求我們必須對出現的這些異常進行catch所以面對這種異常不管我們是否願意,只能自己去寫一堆catch來捕捉這些異常。

十一、如何處理異常,異常的關鍵字是什麼?

Try:執行可能產生異常的程式碼

Catch:捕獲異常;

Finally:無論是否發生異常,程式碼總能執行;

宣告異常 throws:宣告方法可能要丟擲的各種異常;

丟擲異常 throw:手動丟擲異常;

十二、常見的異常種類有哪些?

Exception 異常層次結構的根類;

ArithmeticException 算術錯誤情形,如以零作除數;

ArrayIndexOutOfBoundsException 陣列下標越界

NullPointerException 嘗試訪問 null 物件成員

ClassNotFoundException 不能載入所需的類

IllegalArgumentException 方法接收到非法引數

ClassCastException 物件強制型別轉換出錯

NumberFormatException 數字格式轉換異常,如把"abc"轉換成數字

 

十三、方法過載的方法重寫是什麼?有什麼區別?

過載:一個類中有一個方法A,你又在這個類中建立了一個方法B,方法B的名字和A一樣,返回值型別也一  

樣,但是引數的型別或個數不同,此時B過載了A。

重寫:一個類M繼承另一個類N,N中有一個方法A,這時你在M寫了一個方法B,方法B的名字、返回值以及引數都和A一樣,此時B重寫了A。

方法重寫與方法過載的相同點:

(1)方法的名稱相同

(2)都可以用於抽象方法和非抽象方法之間。

方法重寫與方法過載的不同點:

(1)方法重寫要求引數簽名必須相同,而方法的過載要求引數簽名必須不同。

(2)方法重寫要求返回型別必須相同,而方法過載對此沒有限制。

(3)方法重寫只能用於子類重寫父類的方法,而方法的過載用於同一個類的所有方法(包括從父類中繼承的方法)

(4)方法重寫對方法的訪問許可權和丟擲的異常有特殊的要求,而方法的過載對此沒有任何限制

(5)父類的一個方法只能被子類重寫一次,而一個方法在所在的類中可以被多次過載。

十四、多型的特點?有什麼優點?

特點:

1.可替換性(substitutability)。多型對已存在程式碼具有可替換性。例如,多型對圓Circle類工作,對其他任何圓形幾何體,如圓環,也同樣工作。
2.可擴充性(extensibility)。多型對程式碼具有可擴充性。增加新的子類不影響已存在類的多型性、繼承性,以及其他特性的執行和操作。實際上新加子類更容易獲得多型功能。例如,在實現了圓錐、半圓錐以及半球體的多型基礎上,很容易增添球體類的多型性。
3.介面性(interface-ability)。多型是超類通過方法簽名,向子類提供了一個共同介面,由子類來完善或者覆蓋它而實現的。如圖8.3 所示。圖中超類Shape規定了兩個實現多型的介面方法,computeArea()以及computeVolume()。子類,如Circle和Sphere為了實現多型,完善或者覆蓋這兩個介面方法。
4.靈活性(flexibility)。它在應用中體現了靈活多樣的操作,提高了使用效率。
5.簡化性(simplicity)。多型簡化對應用軟體的程式碼編寫和修改過程,尤其在處理大量物件的運算和操作時,這個特點尤為突出和重要。

優點:

減少類中程式碼量

提高程式碼的可擴充套件性和可維護性

 

十五、多型的實現方式是什麼?

使用父類作為方法形參實現多型

使用父類作為方法返回值實現多型

十六、如何編寫介面?

public interface MyInterface {

    public void foo();

    //其他方法

}

十七、介面的作用是什麼?

1.可以被多繼承

2.設計和實現完全分離

3.更自然的使用多型

4.更容易搭建程式框架

5.更容易更換實現

 

十八、介面和抽象類有什麼異同?

相同點:

1.都不能被例項化

2.介面的實現類或者抽象的子類都必須實現類介面或者繼承了抽象才可以被例項化

不同點:

1.介面只有定義,方法不能再介面中實現,實現介面的類要實現介面中的所有方法;抽象類可以有定義與實現方法可以在抽象類中實現

2.介面要實現,抽象要繼承,一個類可以實現多個介面,但只能繼承一個抽象類

3.介面強調設計理念“has-a”的關係,抽象類強調“is-a”關係

4.介面中定義變數預設為public、static、final且要設定初始值方法必須是publicstatic只能是這兩個抽象類可以有自己的成員變數也可以有非抽象的成員方法,成員預設值為:default

5.介面被運用於比較常用的功能,抽象更傾向於充當公共類的角色

6.介面是定義規範的,抽象是對公共部分的抽取

十九、如何使用log4j記錄日誌?

1. 定義配置檔案

2. 配置日誌資訊輸出目的地APPender

3. 配置日誌資訊格式

二十、常見的集合有哪些?他們有什麼常用方法?

ArraysList

Boolean add (Object o)

Void add (int index, Object o)

Int size()

Object get(int index)

Boolean contains(Object o)

Boolean remove(Object o)

Object remove(int index)

LinkedList

void addFirst(Object o)

void addLast(Object o)

Object getFirst()

Object getLast()

Object removeFirst()

Object removeLast()

 

二十一、list, set , map各有什麼異同?

list:儲存一組不唯一,有序的物件

set:儲存一組唯一,無序的物件

map:儲存一組成對的鍵-值物件,key不要求有序,不允許重複,value不要求有序,但允許重複

二十二、和陣列型別採用相同結構的是哪個集合?

ArraysList

二十三、什麼是foreach迴圈?

foreach 語句為陣列或物件集合中的每個元素重複一個嵌入語句組

二十四、執行緒與程序的區別?

程序:是併發執行的程式在執行過程中分配和管理資源的基本單位,是一個動態概念,競爭計算機系統資源的基本單位。

執行緒:是程序的一個執行單元,是程序內科排程實體。比程序更小的獨立執行的基本單位。執行緒也被稱為輕量級程序。

區別:

地址空間:同一程序的執行緒共享本程序的地址空間,而程序之間則是獨立的地址空間。

資源擁有:同一程序內的執行緒共享本程序的資源如記憶體、I/O、cpu等,但是程序之間的資源是獨立的。

執行過程:每個獨立的程序程有一個程式執行的入口、順序執行序列和程式入口。但是執行緒不能獨立執行,必須依存在應用程式中,由應用程式提供多個執行緒執行控制。

執行緒是處理器排程的基本單位,但是程序不是。

兩者均可併發執行。

二十五、實現執行緒有哪幾種方法?

繼承Tread類

Runnable介面

實現Callable介面通過FutureTask包裝來建立Tread執行緒

使用ExecutorService,Callable,Future實現有返回結果的多執行緒

二十六、執行緒的生命週期是什麼?

建立狀態   就緒狀態   阻塞狀態  執行狀態   死亡狀態

二十七、簡單解釋-一下執行緒休眠,執行緒強制執行,執行緒禮讓.以及他們的實現方法

線性休眠:進入不可執行狀態

sleep()方法

線性強制執行:暫停執行

join()方法

執行緒禮讓:允許其他先執行

yeild()方法

二十八、什麼情況下需要執行緒同步?

兩個或多個執行緒需要訪問同一資源時

二十九、什麼是流?流的常見種類有哪些?使用流的過程中需要注意哪些問題?

流是指一連串流動的字元,是以先進先出方式傳送資訊的通道

位元組流:

輸出流:FileInputStream

輸入流:FileOutputStream

字元流:

輸入流:FileWriter

輸出流:FileReader

緩衝流:

輸入流:BufferedWriter

輸出流:BufferedReader

注意事項:

建立了記得關閉流

注意執行緒安全的問題

先關閉輸入流再關閉輸出流

執行緒同步

三十、髒讀,漏讀,幻讀

髒讀:

所謂髒讀是指一個事務中訪問到了另外一個事務未提交的資料

漏讀:

不可重複讀:指在一個事務內根據同一個條件對行記錄進行多次查詢,但是搜出來的結果卻不一致

幻讀:指同一個事務內多次查詢返回的結果集不一樣

三十一、HashMap,Hashmap和hashtable?

HashMap和Hashtable的區別:

Hashtable是執行緒安全,而HashMap則非執行緒安全

HashMap可以使用null作為key,而Hashtable則不允許null作為key

HashMap是對Map介面的實現,HashTable實現了Map介面和Dictionary抽象類

ashMap的初始容量為16,Hashtable初始容量為11

Hashtable計算hash是直接使用key的,hashcode對table陣列的長度直接進行取模

HashSet不是key value結構,僅僅是儲存不重複的元素,相當於簡化版的HashMap,只是包含HashMap中的key而已

 

構造方法的特點

面向物件的思想是如何在java展現的呢? 就是通過類和物件

類是一組相關的屬性和行為的集合。是一個抽象的概念。

物件是該類事物的具體表現形式。具體存在的個體。

一、抽象類的抽象方法的特點是什麼?

被abstract修飾的類稱為抽象類

特點:

1、抽象類不能有物件(不能用new關鍵字來例項化物件)

2、抽象方法一定是在抽象類的,但是抽象類不一定有抽象方法

3、子類繼承抽象類必須重寫抽象類中的抽象方法

4、使用extends關鍵字來繼承

要注意的是抽象方法沒有方法體

二、抽象類的抽象方法的特點是什麼?

一、使用abstract修飾符修飾的類被稱為抽象類;

        抽象類不能例項化物件,只能被繼承;

二、使用abstract修飾符修飾的方法被稱為抽象方法;

 抽象方法不能有方法體,子類必須重寫抽象類中所有的抽象方法;

 

三、抽象類中不一定包含抽象方法,但包含抽象方法的類一定是抽象類;

三、方法過載的方法重寫是什麼?有什麼區別?

重寫是子類的方法覆蓋父類的方法,要求方法名和引數都相同

過載是在同一個類中的兩個或兩個以上的方法,擁有相同的方法名,但是引數卻不相同,方法體也不相同,最常見的過載的例子就是類的建構函式,可以參考API幫助文件看看類的構造方法

四、使用繼承有什麼特點?繼承的優點是什麼?

子類是一種特殊的型別,而不只是父類的一個角色

子類的例項不需要變成另一個類的物件

子類擴充套件,而不是覆蓋或者使父類的功能失效

 

優點

新的實現很容易,因為大部分是繼承而來的

很容易修改和擴充套件已有的實現

缺點

打破了封裝,因為基類向子類暴露了實現細節

白盒重用,因為基類的內部細節通常對子類是可見的

當父類的實現改變時可能要相應的對子類做出改變

不能在執行時改變由父類繼承來的實現

五、多型的特點?有什麼優點?

多型的特點:

一、要有繼承;
二、要有重寫;
三、父類引用指向子類物件

多型的優點:
1.可替換性(substitutability)。多型對已存在程式碼具有可替換性。例如,多型對圓Circle類工作,對其他任何圓形幾何體,如圓環,也同樣工作。
2.可擴充性(extensibility)。多型對程式碼具有可擴充性。增加新的子類不影響已存在類的多型性、繼承性,以及其他特性的執行和操作。實際上新加子類更容易獲得多型功能。例如,在實現了圓錐、半圓錐以及半球體的多型基礎上,很容易增添球體類的多型性。
3.介面性(interface-ability)。多型是超類通過方法簽名,向子類提供了一個共同介面,由子類來完善或者覆蓋它而實現的。如圖8.3 所示。圖中超類Shape規定了兩個實現多型的介面方法,computeArea()以及computeVolume()。子類,如Circle和Sphere為了實現多型,完善或者覆蓋這兩個介面方法。
4.靈活性(flexibility)。它在應用中體現了靈活多樣的操作,提高了使用效率。
5.簡化性(simplicity)。多型簡化對應用軟體的程式碼編寫和修改過程,尤其在處理大量物件的運算和操作時,這個特點尤為突出和重要。

六、多型的實現方式是什麼?

使用父類作為方法形參實現多型

使用父類作為方法返回值實現多型

七、如何編寫介面?

編寫介面:   public interface UsbInterface {

              /**

              * USB介面提供服務。

               */

             void service();

}

實現介面:   public class UDisk implements UsbInterface {

             public void service() {

             System.out.println("連線USB口,開始傳輸資料。");

             }

}

使用介面:    UsbInterface uDisk = new UDisk();

uDisk.service();

 

 

八、介面的作用是什麼?

介面是一種協議。例如兩個開發者,開發時間完全不一致,那麼需要兩個人的配合開發,則需要一個人講介面寫好,定義好其中所有的變數命名規範、函式定義規範。具體實現類的開發人員則只需要按照介面實現相應功能即可。

介面更像是一種定義的規範

九、介面和抽象類有什麼異同?

相同點:

1.都不能被例項化

2.介面的實現類或者抽象的子類都必須實現類介面或者繼承了抽象才可以被例項化

不同點:

1.介面只有定義,方法不能再介面中實現,實現介面的類要實現介面中的所有方法;抽象類可以有定義與實現方法可以在抽象類中實現

2.介面要實現,抽象要繼承,一個類可以實現多個介面,但只能繼承一個抽象類

3.介面強調設計理念“has-a”的關係,抽象類強調“is-a”關係

4.介面中定義變數預設為public、static、final且要設定初始值方法必須是publicstatic只能是這兩個抽象類可以有自己的成員變數也可以有非抽象的成員方法,成員預設值為:default

5.介面被運用於比較常用的功能,抽象更傾向於充當公共類的角色

6.介面是定義規範的,抽象是對公共部分的抽取

十、什麼是異常,你是如何理解的?

一、執行時異常:我們可以不處理,當出現這種的異常時,總是由虛擬機器接管;

二、檢查時異常:我們經常遇到的IO異常及SQL異常就屬於檢查式異常;java編譯器要求我們必須對出現的這些異常進行catch所以面對這種異常不管我們是否願意,只能自己去寫一堆catch來捕捉這些異常。

十一、如何處理異常,異常的關鍵字是什麼?

Try:執行可能產生異常的程式碼

Catch:捕獲異常;

Finally:無論是否發生異常,程式碼總能執行;

宣告異常 throws:宣告方法可能要丟擲的各種異常;

丟擲異常 throw:手動丟擲異常;

十二、常見的異常種類有哪些?

Exception 異常層次結構的根類;

ArithmeticException 算術錯誤情形,如以零作除數;

ArrayIndexOutOfBoundsException 陣列下標越界

NullPointerException 嘗試訪問 null 物件成員

ClassNotFoundException 不能載入所需的類

IllegalArgumentException 方法接收到非法引數

ClassCastException 物件強制型別轉換出錯

NumberFormatException 數字格式轉換異常,如把"abc"轉換成數字

 

十三、方法過載的方法重寫是什麼?有什麼區別?

過載:一個類中有一個方法A,你又在這個類中建立了一個方法B,方法B的名字和A一樣,返回值型別也一  

樣,但是引數的型別或個數不同,此時B過載了A。

重寫:一個類M繼承另一個類N,N中有一個方法A,這時你在M寫了一個方法B,方法B的名字、返回值以及引數都和A一樣,此時B重寫了A。

方法重寫與方法過載的相同點:

(1)方法的名稱相同

(2)都可以用於抽象方法和非抽象方法之間。

方法重寫與方法過載的不同點:

(1)方法重寫要求引數簽名必須相同,而方法的過載要求引數簽名必須不同。

(2)方法重寫要求返回型別必須相同,而方法過載對此沒有限制。

(3)方法重寫只能用於子類重寫父類的方法,而方法的過載用於同一個類的所有方法(包括從父類中繼承的方法)

(4)方法重寫對方法的訪問許可權和丟擲的異常有特殊的要求,而方法的過載對此沒有任何限制

(5)父類的一個方法只能被子類重寫一次,而一個方法在所在的類中可以被多次過載。

十四、多型的特點?有什麼優點?

特點:

1.可替換性(substitutability)。多型對已存在程式碼具有可替換性。例如,多型對圓Circle類工作,對其他任何圓形幾何體,如圓環,也同樣工作。
2.可擴充性(extensibility)。多型對程式碼具有可擴充性。增加新的子類不影響已存在類的多型性、繼承性,以及其他特性的執行和操作。實際上新加子類更容易獲得多型功能。例如,在實現了圓錐、半圓錐以及半球體的多型基礎上,很容易增添球體類的多型性。
3.介面性(interface-ability)。多型是超類通過方法簽名,向子類提供了一個共同介面,由子類來完善或者覆蓋它而實現的。如圖8.3 所示。圖中超類Shape規定了兩個實現多型的介面方法,computeArea()以及computeVolume()。子類,如Circle和Sphere為了實現多型,完善或者覆蓋這兩個介面方法。
4.靈活性(flexibility)。它在應用中體現了靈活多樣的操作,提高了使用效率。
5.簡化性(simplicity)。多型簡化對應用軟體的程式碼編寫和修改過程,尤其在處理大量物件的運算和操作時,這個特點尤為突出和重要。

優點:

減少類中程式碼量

提高程式碼的可擴充套件性和可維護性

 

十五、多型的實現方式是什麼?

使用父類作為方法形參實現多型

使用父類作為方法返回值實現多型

十六、如何編寫介面?

public interface MyInterface {

    public void foo();

    //其他方法

}

十七、介面的作用是什麼?

1.可以被多繼承

2.設計和實現完全分離

3.更自然的使用多型

4.更容易搭建程式框架

5.更容易更換實現

 

十八、介面和抽象類有什麼異同?

相同點:

1.都不能被例項化

2.介面的實現類或者抽象的子類都必須實現類介面或者繼承了抽象才可以被例項化

不同點:

1.介面只有定義,方法不能再介面中實現,實現介面的類要實現介面中的所有方法;抽象類可以有定義與實現方法可以在抽象類中實現