static/final/abstract
面試題

談?wù)剬?duì)多態(tài)性的理解:
實(shí)現(xiàn)代碼的通用性
例子
Object類中定義的public boolean equals(Object obj) {} ;
JDBC:使用java操作mysql、Oracle
3.抽象類、接口的使用肯定體現(xiàn)了多態(tài)性。(抽象類、接口不能實(shí)例化);
static
實(shí)例變量:我們創(chuàng)建了類的多個(gè)對(duì)象,每個(gè)對(duì)象都獨(dú)立的擁有一套類中的非靜態(tài)屬性。當(dāng)修改其中一個(gè)對(duì)象中的非靜態(tài)屬性時(shí),不會(huì)導(dǎo)致其他對(duì)象中同樣的屬性值的修改。
靜態(tài)變量:我們創(chuàng)建了類的多個(gè)對(duì)象,多個(gè)對(duì)象共享同一個(gè)靜態(tài)變量。當(dāng)通過一個(gè)對(duì)象修改靜態(tài)變量時(shí),會(huì)導(dǎo)致其他對(duì)象調(diào)用此靜態(tài)變量時(shí),是修改過的。
靜態(tài)變量隨著類的加載而加載??梢酝ㄟ^“類.靜態(tài)變量”的方式進(jìn)行調(diào)用。
靜態(tài)變量的加載要早于對(duì)象的創(chuàng)建。
由于類只會(huì)加載一次,則靜態(tài)變量在內(nèi)存中也只會(huì)存在一份;存在方法區(qū)的靜態(tài)域中。
在靜態(tài)的方法內(nèi),不能使用this關(guān)鍵字、super關(guān)鍵字
開發(fā)中,如何確定一個(gè)屬性是否要聲明為static的?
屬性是可以被多個(gè)對(duì)象所共享的,不會(huì)隨著對(duì)象的不同而不同的。
類中的常量也常常聲明為static ? ?// 比如pi
開發(fā)中,如何確定一個(gè)方法是否要聲明為static的?
操作靜態(tài)屬性的方法,通常設(shè)置為static的
工具類中的方法,習(xí)慣上聲明為static的。比如Math、Arrays、Collections
單例模式
餓漢式:壞處:對(duì)象加載時(shí)間過長。好處:線程安全。
懶漢式:好處:延遲對(duì)象的創(chuàng)建。目前的寫法壞處:不安全;
代碼塊
如果有修飾的話,只能使用static
靜態(tài)代碼塊,
隨著類的加載而執(zhí)行。
內(nèi)部可以有輸出語句
作用:初始化類的信息
如果一個(gè)類中定義了多個(gè)靜態(tài)代碼塊,則按照聲明的先后順序執(zhí)行
靜態(tài)比非靜態(tài)先執(zhí)行
靜態(tài)代碼塊內(nèi)只能調(diào)用靜態(tài)的屬性、靜態(tài)的方法,不能調(diào)用非靜態(tài)的結(jié)構(gòu)
非靜態(tài)代碼塊
隨著對(duì)象的創(chuàng)建而執(zhí)行。
內(nèi)部可以有輸出語句
每創(chuàng)建一個(gè)對(duì)象,就執(zhí)行一次非靜態(tài)代碼塊
作用:可以在創(chuàng)建對(duì)象時(shí),對(duì)對(duì)象的屬性等進(jìn)行初始化。
非靜態(tài)代碼塊內(nèi)可以都調(diào)用 。
final
final可以用來修飾一個(gè)類:此類不能被其他類所繼承。
比如:String類、System類、StringBuffer類
final 用來修飾方法:表明此方法不可以被重寫。
比如:Object類中的getClass();
final 用來修飾變量:此時(shí)的“變量”就是一個(gè)常量
修飾屬性:可以考慮賦值的位置有,顯式初始化、代碼塊中初始化、構(gòu)造器中初始化(多個(gè)構(gòu)造器時(shí),都需要進(jìn)行賦值)
修飾局部變量:尤其是使用final修飾形參時(shí),表明此形參是一個(gè)常量。當(dāng)我們調(diào)用此方法時(shí),給常量形參賦一個(gè)實(shí)參。一旦賦值以后,就只能在方法體內(nèi)使用此形參,但不能重新賦值。
抽象類
abstract
修飾類
此類不能實(shí)例化;
抽象類中一定有構(gòu)造器,便于子類實(shí)例化時(shí)調(diào)用(涉及:子類實(shí)例化的全過程)
不能修飾final的類
修飾方法
抽象方法只有方法的聲明,沒有方法體
包含抽象方法的類,一定是一個(gè)抽象類。反之,抽象類中可以沒有抽象方法。
若子類重寫了父類中的所有抽象方法后,子類方可實(shí)例化;若子類沒有重寫全部的抽象方法,那么這個(gè)子類也需要是一個(gè)抽象類。
不能用來修飾私有方法、靜態(tài)方法
匿名子類:重寫comparator方法