Java基礎15-final、static關鍵字和Object類
一、final關鍵字
1.什麽是final關鍵字
繼承的出現提高了代碼的復用性,並方便開發。但隨之也有問題,有些類在描述完之後,不想被繼承,或者有些類中的部分方法功能是固定的,不想讓子類重寫。可是當子類繼承了這些特殊類之後,就可以對其中的方法進行重寫,那怎麽解決呢?
要解決上述的這些問題,需要使用到一個關鍵字final,final的意思為最終,不可變。final是個修飾符,它可以用來修飾類,類的成員,以及局部變量。
2.final的特點
①修飾類不可以被繼承,但可以繼承其他類
②final修飾的方法不可以被覆蓋,但父類中沒有被final修飾方法,子類覆蓋後可以加final。
③修飾的變量稱為常量,這些變量只能賦值一次。
④引用類型的變量值為對象地址值,地址值不能更改,但是地址內的對象屬性值可以修改。
⑤ 修飾成員變量,需要在創建對象前賦值,否則報錯。(當沒有顯式賦值時,多個構造方法的均需要為其賦值。)
二、static關鍵字
1.什麽是static
當在定義類的時候,類中都會有相應的屬性和方法。而屬性和方法都是通過創建本類對象調用的。當在調用對象的某個方法時,這個方法沒有訪問到對象的特有數據時,方法創建這個對象有些多余。可是不創建對象,方法又調用不了,這時就會想,那麽我們能不能不創建對象,就可以調用方法呢?
以上問題就可以通過static關鍵字來實現。static它是靜態修飾符,一般用來修飾類中的成員。
2.static的特點
①被static修飾的成員變量屬於類,不屬於這個類的某個對象。
②被static修飾的成員可以並且建議通過類名直接訪問。
訪問靜態成員的格式:
類名.靜態成員變量名
類名.靜態成員方法名(參數)
註意:
靜態內容是優先於對象存在,只能訪問靜態,不能使用this/super。靜態修飾的內容存於靜態區。
同一個類中,靜態成員只能訪問靜態成員
這是因為,static修飾的方法和變量,屬於類,先進方法區,非靜態的變量在他們進方法區時還沒有產生。
main方法為靜態方法僅僅為程序執行入口,它不屬於任何一個對象,可以定義在任意類中。
3.靜態常量
上邊我們知道,final修飾的變量是常量
那final和static共同修飾的就是靜態常量了
定義格式:
public static final 數據類型 變量名 = 值;
當我們想使用類的靜態成員時,不需要創建對象,直接使用類名來訪問即可。
註意:
接口中的每個成員變量都默認使用public static final修飾。
所有接口中的成員變量已是靜態常量,由於接口沒有構造方法,所以必須顯示賦值。可以直接用接口名訪問。
interface Inter { public static final int COUNT = 100; }
三、Object類
Object是java中所有類的根類,是祖宗級的。
1.Object為什麽是所有類的根類,到底什麽是Object類?
* object本身指對象的意思。我們發現所有的對象都具有某一些共同的行為,所以,我們抽象出一個類object對象類,其他都會繼承於object類,也擁有object類中的方法
* 引用數據類型:類/接口/數組,引用類型又稱為對象類,所謂數組的數組變量名稱,應該指數組對象。
2.Object類常見方法
* 1.protected void finalize():垃圾回收器再回首某一個對象之前,會調用該方法,做掃尾操作,該方法我們不要去調用
* 2.getclass(),返回當前對象的真實類型。在反射中用的多。
* 3.hashcode(),返回對象的哈希碼值,hashcode決定了對象在哈希表中的存儲位置。不同對象的hashcode是不一樣的
* 4.equals(),拿當前對象(this)和參數obj作比較,
* 在object類中的equals方法,本身和==符號相同,都是比較對象的內存地址
* 官方建議:每個類都應該覆蓋equals方法,不要比較內存地址,而失去比較我們關心的數據
* 5.toString():把一個對象轉換為字符串。
* 默認情況下打印對象,打印的是對象的十六進制的hashCode值
* 官方建議我們:應該每個類都應該覆蓋toString返回我們關心的數據
Java基礎15-final、static關鍵字和Object類