您好,登錄后才能下訂單哦!
這篇文章給大家介紹深入淺析Java中的this、final關(guān)鍵字,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
this
關(guān)鍵字this引用對象自身。它也可以在構(gòu)造方法內(nèi)部用于調(diào)用同一個類的其他構(gòu)造方法。
隱藏的靜態(tài)變量可以通過”類.靜態(tài)變量”來引用,而隱藏的實例變量就需要使用”this.實例變量”來引用。
調(diào)用一個重載的構(gòu)造方法this引用是必須的。
this是個隱式參數(shù),代表當(dāng)前對象
publie class Student{ private String name; public void setName(String name){ this.name=name; //this.name為當(dāng)前對象的成員變量 } }
如果某個構(gòu)造方法的第一個語句具有形式this( ••• ),那么這個構(gòu)造方法將調(diào)用同一類中的其他構(gòu)造方法。
注意:
在構(gòu)造器中this(…)必須放在該構(gòu)造器的第一行。
this不能出現(xiàn)在靜態(tài)方法里面
super
super關(guān)鍵字代指父類,可以用于調(diào)用父類的普通方法和構(gòu)造方法。
super()表示調(diào)用父類的構(gòu)造器
super.方法來引用父類的方法
super()也和this()一樣必須放在方法的第一句
super()和this()不能同時出現(xiàn)
super可以屏蔽子類屬性和父類屬性重名時帶來的屬性遮蓋,super. 表示調(diào)用父類的方法或?qū)傩?
在子類的構(gòu)造器中如果沒有指定調(diào)用父類的哪一個構(gòu)造器,那么就會調(diào)用父類的無參構(gòu)造器,即super()
注意:
父類的構(gòu)造器不能被子類繼承
方法和屬性可以被繼承,權(quán)限不限制能否繼承過來,限制的是能否直接訪問
先構(gòu)造父類,后構(gòu)造子類
instanceof
用法:引用 instanceof 類名
判斷這個引用所指向的對象是否屬于這個類。
用在強制轉(zhuǎn)換之前,避免類型轉(zhuǎn)換異常。
if(a instanceof Dog){ Dog d=(Dog)a; } implements
一個類實現(xiàn)一個接口必須實現(xiàn)接口中所有的方法,否則其為抽象類,并且在實現(xiàn)類中的方法要加上public(不能省略)。
類中的默認修飾符:default。
接口中的默認修飾符:public。
一個類除了繼承另一個類外(只能繼承一個類),還可以實現(xiàn)多個接口(接口之間用逗號分隔)。
static
把對象相關(guān)的變成類相關(guān)的,它可以修飾屬性、方法、代碼塊和內(nèi)部類.
static修飾屬性(類變量):
那么這個屬性就可以用” 類名.屬性名 “來訪問,也就是使這個屬性成為本類的類變量,為本類對象所共享。
類加載的過程
類本身也是保存在文件中(字節(jié)碼文件保存著類的信息)的,Java會通過I/O流把類的文件讀入JVM(java虛擬機),這個過程稱為類的 加載。
JVM會通過類路徑(CLASSPATH)來找字節(jié)碼文件。需要的時候才會進行類加載,生成對象時是先加載后構(gòu)造
類變量,會在加載時自動初始化,初始化規(guī)則和實例變量相同。
注意:
類中的實例變量是在創(chuàng)建對象時被初始化的。
static修飾的屬性,是在類加載時被創(chuàng)建并進行初始化,類加載的過程只進行一次,也就是類變量只會被創(chuàng)建一次。
static修飾方法(靜態(tài)方法):
會使這個方法成為整個類所公有的方法,可以用” 類名.方法名 “訪問。
static修飾的方法,不能直接訪問本類中的非靜態(tài)成員,但本類的非靜態(tài)方法可以訪問本類的靜態(tài)成員。
在靜態(tài)方法中不能出現(xiàn)this關(guān)鍵字。
父類中是靜態(tài)方法,子類中不能覆蓋為非靜態(tài)方法,在符合覆蓋規(guī)則的前提下,在父子類中,父類中的靜態(tài)方法可以被子類中的靜態(tài)方法覆蓋,但是沒有多態(tài)。(在使用對象調(diào)用靜態(tài)方法時其實是調(diào)用編譯時類型的靜態(tài)方法)
java中的main方法必須寫成static的原因:
在類加載時無法創(chuàng)建對象,而靜態(tài)方法可以不通過對象調(diào)用,所以在類加載時就可以通過main方法入口來運行程序。
static修飾初始代碼塊:
這時這個初始代碼塊就叫做靜態(tài)初始代碼塊,這個代碼塊只在類加載時被執(zhí)行一次。
可以用靜態(tài)初始代碼塊初始化一個類。
動態(tài)初始代碼塊,寫在類體中的“{}”,這個代碼塊是在生成對象時運行,這種代碼塊叫動態(tài)初始代碼
final
修飾符final:不允許改變,可以修飾變量、方法、類。
final修飾變量:
被fianl修飾的變量就會變成常量,一旦賦值不能改變
常量可以在初始化時直接賦值,也可以在構(gòu)造方法里賦值,只能在這兩種方法里二選一,不能不為常量賦值
常量不會有默認初始值
鎖定棧,使棧中的數(shù)據(jù)不可以改變
靜態(tài)常量只能在初始化時直接賦值
final修飾方法:
被final修飾的方法將不能被其子類覆蓋,保持方法的穩(wěn)定不能被覆蓋
final修飾類:
被final修飾的類將不能被繼承
final類中的方法也都是final的
注意:
final不能用來修飾構(gòu)造方法
abstract:
修飾符abstract:抽象的,定義框架不去實現(xiàn),可以修飾類和方法
abstract修飾類:
會使這個類成為一個抽象類,這個類將不能生成對象實例,但可以做為對象變量聲明的類型,也就是編譯時類型
抽象類就相當(dāng)于一個類的半成品,需要子類繼承并覆蓋其中的抽象方法,這時子類才又創(chuàng)建實例的能力,如果子類沒有實現(xiàn)父類的抽象方法,那么子類也要為抽象類。
abstract修飾方法:
會使這個方法變成抽象方法,也就是只有聲明而沒有實現(xiàn),實現(xiàn)部分以”;”代替,需要子類繼承實現(xiàn)。
抽象方法代表了某種標(biāo)準(zhǔn),定義標(biāo)準(zhǔn),定義功能,在子類中去實現(xiàn)功能
(子類繼承了父類并需要給出從父類繼承的抽象方法的實現(xiàn))。
方法一時間想不到怎么被實現(xiàn),或有意要子類去實現(xiàn)而定義某種標(biāo)準(zhǔn),這個方法可以被定義為抽象。
注意:
有抽象方法的類一定是抽象類。但是抽象類中不一定都是抽象方法,也可以全是具體方法。
關(guān)鍵字 | 描述 |
int | 32位整型數(shù) |
boolean | 布爾數(shù)據(jù)類型 |
float | 32-bit單精度浮點數(shù) |
long | 64位整型數(shù) |
short | 16位數(shù)字 |
byte | 8-bit 有符號數(shù)據(jù)類型 |
double | 64-bit雙精度浮點數(shù) |
char | 16-bit Unicode字符數(shù)據(jù)類型 |
abstract | 抽象方法,抽象類的修飾符 |
extends | 表示一個類是另一個類的子類 |
implements | 表示一個類實現(xiàn)了接口 |
assert | 斷言條件是否滿足 |
break | 跳出循環(huán)或者label代碼段 |
continue | 不執(zhí)行循環(huán)體剩余部分 |
case | switch語句的一個條件 |
catch | 和try搭配撲捉異常信息 |
final | 表示一個值在初始化之后就不能再改變了,表示方法不能被重寫,或者一個類不能有子類 |
finally | try 語句不管是否發(fā)生異常都要執(zhí)行的語句塊 |
class | 定義類 |
const | 未使用 |
default | switch語句中的默認分支 |
enum | 枚舉類型 |
goto | 未使用 |
if | 條件語句 |
import | 導(dǎo)入類 |
instanceof | 測試一個對象是否是某個類的實例 |
interface | 接口,一種抽象的類型,僅有方法和常量的定義 |
native | 表示方法用非java代碼實現(xiàn) |
new | 分配新的類實例 |
package | 一系列相關(guān)類組成一個包 |
private | 表示私有字段,或者方法等,只能從類內(nèi)部訪問 |
protected | 表示字段只能通過類或者其子類訪問,子類或者在同一個包內(nèi)的其他類 |
public | 表示共有屬性或者方法 |
return | 方法返回值 |
static | 表示在類級別定義,所有實例共享的 |
strictfp | 浮點數(shù)比較使用嚴格的規(guī)則 |
super | 表示基類 |
switch | 選擇語句 |
synchronized | 表示同一時間只能由一個線程訪問的代碼塊 |
this | 表示調(diào)用當(dāng)前實例,或者調(diào)用另一個構(gòu)造函數(shù) |
throw | 拋出異常 |
throws | 定義方法可能拋出的異常 |
transient | 修飾不要序列化的字段 |
try | 表示代碼塊要做異常處理或者和finally配合表示是否拋出異常都執(zhí)行finally中的代碼 |
void | 標(biāo)記方法不返回任何值 |
volatile | 標(biāo)記字段可能會被多個線程同時訪問,而不做同步 |
關(guān)于深入淺析Java中的this、final關(guān)鍵字就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。