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