1、 什么是類?什么是對象?JAVA中類的定義形式
類是具有相同屬性和服務的一組對象的集合,它為屬于該類的所有對象提供了統一的抽象描述,其內部包括屬性和服務兩個主要部分。在面向對象的編程語言中,類是一個獨立的程序單位,它應該有一個類名并包括屬性說明和方法說明兩個主要部分。類與對象的關系就如模具和鑄件的關系,類的實例化結果就是對象,而對一類對象的抽象就是類。
從面向對象的角度出發,客觀世界中的一切實體都是對象。
JAVA中定義類的形式:
public class ClassName{
//定義類的屬性
//定義類的對象的屬性
//定義構造器
//定義類的方法
//定義對類的對象的屬性訪問的方法
//定義類的對象的方法
}
2、 什么是構造方法?其作用是什么?構造方法的特點
在類中用來建立對象的方法是類的構造方法。其作用就是用來創建類的對象,使得類的對象的屬性都獲取到相應的值。構造方法的特點是:
(1) 名稱與類名稱相同;
(2) 沒有返回值,但是不需要使用void修飾。
3、 關于接口
接口是抽象類的一種,只包含常量和方法的定義,而沒有變量和方法的實現,且其方法都是抽象方法。它的用處體現在下面幾個方面:
◇ 通過接口實現不相關類的相同行為,而無需考慮這些類之間的關系。
◇ 通過接口指明多個類需要實現的方法。
◇ 通過接口了解對象的交互界面,而無需了解對象所對應的類。
1)接口的定義
接口的定義包括接口聲明和接口體。
接口聲明的格式如下:
[public] interface interfaceName[extends listOfSuperInterface] { … }
extends 子句與類聲明的extends子句基本相同,不同的是一個接口可有多個父接口,用逗號隔開,而一個類只能有一個父類。
接口體包括常量定義和方法定義
常量定義格式為:type NAME=value; 該常量被實現該接口的多個類共享; 具有public ,final, static的屬性。
方法體定義格式為:(具有 public和abstract屬性)
returnType methodName([paramlist]);
2)接口的實現
在類的聲明中用implements子句來表示一個類使用某個接口,在類體中可以使用接口中定義的常量,而且必須實現接口中定義的所有方法。一個類可以實現多個接口,在implements子句中用逗號分開。
3) 接口類型的使用
接口作為一種引用類型來使用。任何實現該接口的類的實例都可以存儲在該接口類型的變量中,通過這些變量可以訪問類所實現的接口中的方法。
4、 JAVA中的訪問控制
java語言中有四種不同的限定詞,提供了四種不同的訪問權限。
1) private
類中限定為private的成員,只能被這個類本身訪問。
如果一個類的構造方法聲明為private,則其它類不能生成該類的一個實例。
2) default
類中不加任何訪問權限限定的成員屬于缺省的(default)訪問狀態,可以被這個類本身和同一個包中的類所訪問。
3) protected
類中限定為protected的成員,可以被這個類本身、它的子類(包括同一個包中以及不同包中的子類)和同一個包中的所有其他的類訪問。
4) public
類中限定為public的成員,可以被所有的類訪問。
5、 什么是抽象類?什么是抽象方法?
java語言中,用abstract 關鍵字來修飾一個類時,這個類叫做抽象類,用abstract 關鍵字來修飾一個方法時,這個方法叫做抽象方法。格式如下:
abstract class abstractClass{ …} //抽象類
abstract returnType abstractMethod([paramlist]) //抽象方法
抽象類必須被繼承,抽象方法必須被重寫。抽象方法只需聲明,無需實現;抽象類不能被實例化,抽象類不一定要包含抽象方法。若類中包含了抽象方法,則該類必須被定義為抽象類。
6、什么是接口?接口和抽象類的異同?
接口是JAVA中的特殊的一個類,由于在JAVA中不支持多重繼承,而要解決類的擴充問題時,就需要使用接口來實現。接口中定義了一組常量或者一些抽象方法。處于不同層次的類要實現功能的擴充時,只要通過實現接口,就可以直接調用接口中定義的常量或者通過覆蓋掉接口中定義過的抽象方法來實現具體的功能。
接口和抽象類的相同之處在于:他們從本質上描述的都是類的繼承關系,接口和抽象類中都包含抽象方法。主要的不同之處在于:抽象類中可以包含抽象方法,也可以包含普通方法,但是接口中的方法一定是抽象方法。抽象類中可以包含變量和類的屬性,而接口中只能包含常量。
7、什么是方法的重載?什么是方法的覆蓋?在實現方法的覆蓋時要注意什么問題?
方法的重載指的是在JAVA中的類中,允許出現方法名稱相同,但是方法的參數序列不同的方法。參數序列不同指的是參數的類型、個數、順序都不相同。在類中使用方法重載主要是為了擴充類的功能。
方法的覆蓋指的是在父類和子類中定義了兩個名稱及其參數序列都相同的方法。這種情況叫方法的覆蓋,因為在調用這些方法時,子類對象把父類中的方法給隱藏掉了。
在進行方法覆蓋時需要注意的問題是:方法的覆蓋與方法的返回類型有關系,即要求不但方法的名稱和參數序列要相同,而且返回類型也要相同。在子類中對方法的訪問限制不能超過父類中定義的訪問限制。
8、JAVA的安全性如何保證?
JAVA代碼的安全性可以從以下四個方面得到保證:
(1) JAVA語言自身提供的安全機制,比如對內存的自動管理,取消了指針操作等,保證了程序在運行過程中不會發生內存泄漏。
(2) 編譯器提供的安全。JAVA的源文件經過JVM的編譯器編譯后,會形成標準格式的類文件,這個類文件是一個字節碼文件。
(3) 字節碼校驗。JAVA的類文件在被JVM執行時首先要被類加載器加載,然后通過字節碼校驗器校驗,校驗通過后才能交給硬件系統去執行,如何類文件經過竄改,在校驗時就會被校驗器檢查出來,這是JAVA的解釋器就會拒絕執行程序。
(4) 類裝載。類裝載通過將本機類與網絡資源分開,來保證安全性。因為在調入類時,總是要對類進行檢查。
9、面向對象程序設計的特點是什么?
封裝性,繼承性,多態性。
封裝:封裝性就是把對象的屬性和方法結合成一個獨立的相同單位,并盡可能隱蔽對象的內部細節,包含兩個含義:
(1)把對象的全部屬性和全部方法結合在一起,形成一個不可分割的獨立單位(即對象)。
(2)信息隱蔽,即盡可能隱蔽對象的內部細節,對外形成一個邊界〔或者說形成一道屏障〕,只保留有限的對外接口使之與外部發生聯系。
封裝的原則在軟件上的反映是:要求使對象以外的部分不能隨意存取對象的內部數據(屬性),從而有效的避免了外部錯誤對它的"交叉感染",使軟件錯誤能夠局部化,大大減少查錯和排錯的難度。
繼承:特殊類的對象擁有其一般類的全部屬性與方法,稱作特殊類對一般類的繼承。例如,輪船、客輪;人、大人。一個類可以是多個一般類的特殊類,它從多個一般類中繼承了屬性與服務,這稱為多繼承。例如,客輪是輪船和客運工具的特殊類。在java語言中,通常我們稱一般類為父類(superclass,超類),特殊類為子類(subclass)。
多態:對象的多態性是指在一般類中定義的屬性或服務被特殊類繼承之后,可以具有不同的數據類型或表現出不同的行為。這使得同一個屬性或服務在一般類及其各個特殊類中具有不同的語義。例如:"幾何圖形"的"繪圖"方法,"橢圓"和"多邊形"都是"幾何圖"的子類,其"繪圖"方法功能不同。
10、異常是什么?我們在編寫程序時,為什么要處理異常?在處理異常是,請寫出處理異常的代碼框架,并詳細描述一下各部分的作用?
異常表示的是程序中不正常的內容。或者需要程序員和用戶特別關注的內容。我們在編寫程序時使用異常處理主要是保證程序在發生問題時不致于異常中止執行,而是能夠正常執行結束,但是可以提示程序員用戶程序中出現了什么問題,便于程序員找出程序中存在的潛在的錯誤。
在JAVA中異常處理的框架是:
try{
//有問題的代碼需要用try塊處理,拋出異常
}catch(Exception1 e){
//使用catch來捕獲程序中的異常,或者有問題的代碼
}catch(Exception2 e){
}finally{
//無論程序中有無異常,finally中的代碼總是能夠被執行
}
|
11、談談final, finally, finalize的區別。
final修飾符(關鍵字):如果一個類被聲明為final,意味著它不能再派生出新的子類,不能作為父類被繼承。因此一個類不能既被聲明為 abstract的,又被聲明為final的。將變量或方法聲明為final,可以保證它們在使用中不被改變。被聲明為final的變量必須在聲明時給定初值,而在以后的引用中只能讀取,不可修改。被聲明為final的方法也同樣只能使用,不能重載
finally關鍵字:在異常處理時提供 finally 塊來執行任何清除操作。如果拋出一個異常,那么相匹配的 catch 子句就會執行,然后控制就會進入 finally 塊(如果有的話)。
finalize方法名。Java 技術允許使用 finalize() 方法在垃圾收集器將對象從內存中清除出去之前做必要的清理工作。這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。它是在 Object 類中定義的,因此所有的類都繼承了它。子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理工作。finalize() 方法是在垃圾收集器刪除對象之前對這個對象調用的。