Java面試題匯總《Java基礎(chǔ)、語法21-25》
21.類和對象的關(guān)系
類是對象的抽象,而對象是類的具體實(shí)例。類是抽象的,不占用內(nèi)存,而對象是具體的,占用存儲空間。類是用于創(chuàng)建對象的藍(lán)圖,它是一個定義包括在特定類型的對象中的方法和變量的軟件模板。
類和對象好比圖紙和實(shí)物的關(guān)系,模具和鑄件的關(guān)系。
比如人類就是一個概念,人類具有身高,體重等屬性。人類可以做吃飯、說話等方法。
小明就是一個具體的人,也就是實(shí)例,他的屬性是具體的身高200cm,體重180kg,他做的方法是具體的吃了一碗白米飯,說了“12345”這樣一句話。
22.面向過程和面向?qū)ο蟮膮^(qū)別
兩者都是軟件開發(fā)思想,先有面向過程,后有面向?qū)ο?。在大型項目中,針對面向過程的不足推出了面向?qū)ο箝_發(fā)思想。

比喻
蔣介石和毛澤東分別是面向過程和面向?qū)ο蟮慕艹龃?,這樣充分說明,在解決復(fù)制問題時,面向?qū)ο笥懈蟮膬?yōu)越性。
面向過程是蛋炒飯,面向?qū)ο笫巧w澆飯。蓋澆飯的好處就是“菜”“飯”分離,從而提高了制作蓋澆飯的靈活性。飯不滿意就換飯,菜不滿意換菜。用軟件工程的專業(yè)術(shù)語就是“可維護(hù)性”比較好,“飯” 和“菜”的耦合度比較低。
區(qū)別
編程思路不同: 面向過程以實(shí)現(xiàn)功能的函數(shù)開發(fā)為主,而面向?qū)ο笠紫瘸橄蟪鲱?、屬性及其方法,然后通過實(shí)例化類、執(zhí)行方法來完成功能。
封裝性:都具有封裝性,但是面向過程是封裝的是功能,而面向?qū)ο蠓庋b的是數(shù)據(jù)和功能。
面向?qū)ο缶哂欣^承性和多態(tài)性,而面向過程沒有繼承性和多態(tài)性,所以面向?qū)ο髢?yōu)勢是明顯。
方法重載和方法重寫(覆蓋)的區(qū)別

23.this和super關(guān)鍵字的作用
this是對象內(nèi)部指代自身的引用,同時也是解決成員變量和局部變量同名問題;this可以調(diào)用成員變量,不能調(diào)用局部變量;this也可以調(diào)用成員方法,但是在普通方法中可以省略this,在構(gòu)造方法中不允許省略,必須是構(gòu)造方法的第一條語句。,而且在靜態(tài)方法當(dāng)中不允許出現(xiàn)this關(guān)鍵字。
super代表對當(dāng)前對象的直接父類對象的引用,super可以調(diào)用直接父類的成員變量(注意權(quán)限修飾符的影響,比如不能訪問private成員)
super可以調(diào)用直接父類的成員方法(注意權(quán)限修飾符的影響,比如不能訪問private成員);super可以調(diào)用直接父類的構(gòu)造方法,只限構(gòu)造方法中使用,且必須是第一條語句。
24.static關(guān)鍵字的作用
static可以修飾變量、方法、代碼塊和內(nèi)部類
static屬性屬于這個類所有,即由該類創(chuàng)建的所有對象共享同一個static屬性??梢詫ο髣?chuàng)建后通過對象名.屬性名和類名.屬性名兩種方式來訪問。也可以在沒有創(chuàng)建任何對象之前通過類名.屬性名的方式來訪問。
static變量和非static變量的區(qū)別(都是成員變量,不是局部變量)
1.在內(nèi)存中份數(shù)不同
不管有多少個對象,static變量只有1份。對于每個對象,實(shí)例變量都會有單獨(dú)的一份
static變量是屬于整個類的,也稱為類變量。而非靜態(tài)變量是屬于對象的,也稱為實(shí)例變量
2.在內(nèi)存中存放的位置不同
2.在內(nèi)存中存放的位置不同
3.訪問的方式不同
實(shí)例變量: 對象名.變量名 stu1.name="小明明";
靜態(tài)變量:對象名.變量名 stu1.schoolName="西二旗小學(xué)"; 不推薦如此使用
類名.變量名 Student.schoolName="東三旗小學(xué)"; 推薦使用
4.在內(nèi)存中分配空間的時間不同
Student.schoolName="東三旗小學(xué)";或者Student stu1 = new Student("小明","男",20,98);
static方法也可以通過對象名.方法名和類名.方法名兩種方式來訪問
static代碼塊。當(dāng)類被第一次使用時(可能是調(diào)用static屬性和方法,或者創(chuàng)建其對象)執(zhí)行靜態(tài)代碼塊,且只被執(zhí)行一次,主要作用是實(shí)現(xiàn)static屬性的初始化。
static內(nèi)部類:屬于整個外部類,而不是屬于外部類的每個對象。不能訪問外部類的非靜態(tài)成員(變量或者方法),.可以訪問外部類的靜態(tài)成員
25.final和abstract關(guān)鍵字的作用
final和abstract是功能相反的兩個關(guān)鍵字,可以對比記憶
abstract可以用來修飾類和方法,不能用來修飾屬性和構(gòu)造方法;使用abstract修飾的類是抽象類,需要被繼承,使用abstract修飾的方法是抽象方法,需要子類被重寫。
final可以用來修飾類、方法和屬性,不能修飾構(gòu)造方法。使用final修飾的類不能被繼承,使用final修飾的方法不能被重寫,使用final修飾的變量的值不能被修改,所以就成了常量。
特別注意:final修飾基本類型變量,其值不能改變,由原來的變量變?yōu)槌A?;但是final修飾引用類型變量,棧內(nèi)存中的引用不能改變,但是所指向的堆內(nèi)存中的對象的屬性值仍舊可以改變。例如
package
?com.bjsxt;
class
?Test {
????
public
?static
?void
?main(String[] args) {
????????
final
?Dog dog =?
new
?Dog(
"歐歐"
);
????????
dog.name =?
"美美"
;
//正確
????????
dog =?
new
?Dog(
"亞亞"
);
//錯誤
????
}
}
資料學(xué)習(xí):
評論“資料”+后臺主動和我打招呼即可