Java this、final等關(guān)鍵字總結(jié)
this
關(guān)鍵字this引用對(duì)象自身。它也可以在構(gòu)造方法內(nèi)部用于調(diào)用同一個(gè)類(lèi)的其他構(gòu)造方法。
隱藏的靜態(tài)變量可以通過(guò)”類(lèi).靜態(tài)變量”來(lái)引用,而隱藏的實(shí)例變量就需要使用”this.實(shí)例變量”來(lái)引用。
調(diào)用一個(gè)重載的構(gòu)造方法this引用是必須的。
this是個(gè)隱式參數(shù),代表當(dāng)前對(duì)象
publie class Student{
private String name;
public void setName(String name){
this.name=name; //this.name為當(dāng)前對(duì)象的成員變量
} }
如果某個(gè)構(gòu)造方法的第一個(gè)語(yǔ)句具有形式this( ••• ),那么這個(gè)構(gòu)造方法將調(diào)用同一類(lèi)中的其他構(gòu)造方法。
注意:
在構(gòu)造器中this(…)必須放在該構(gòu)造器的第一行。
this不能出現(xiàn)在靜態(tài)方法里面
super
super關(guān)鍵字代指父類(lèi),可以用于調(diào)用父類(lèi)的普通方法和構(gòu)造方法。
super()表示調(diào)用父類(lèi)的構(gòu)造器
super.方法來(lái)引用父類(lèi)的方法
super()也和this()一樣必須放在方法的第一句
super()和this()不能同時(shí)出現(xiàn)
super可以屏蔽子類(lèi)屬性和父類(lèi)屬性重名時(shí)帶來(lái)的屬性遮蓋,super. 表示調(diào)用父類(lèi)的方法或?qū)傩?
在子類(lèi)的構(gòu)造器中如果沒(méi)有指定調(diào)用父類(lèi)的哪一個(gè)構(gòu)造器,那么就會(huì)調(diào)用父類(lèi)的無(wú)參構(gòu)造器,即super()
注意:
父類(lèi)的構(gòu)造器不能被子類(lèi)繼承
方法和屬性可以被繼承,權(quán)限不限制能否繼承過(guò)來(lái),限制的是能否直接訪(fǎng)問(wèn)
先構(gòu)造父類(lèi),后構(gòu)造子類(lèi)
instanceof
用法:引用 instanceof 類(lèi)名
判斷這個(gè)引用所指向的對(duì)象是否屬于這個(gè)類(lèi)。
用在強(qiáng)制轉(zhuǎn)換之前,避免類(lèi)型轉(zhuǎn)換異常。
if(a instanceof Dog){
Dog d=(Dog)a;
}
implements
一個(gè)類(lèi)實(shí)現(xiàn)一個(gè)接口必須實(shí)現(xiàn)接口中所有的方法,否則其為抽象類(lèi),并且在實(shí)現(xiàn)類(lèi)中的方法要加上public(不能省略)。
類(lèi)中的默認(rèn)修飾符:default。
接口中的默認(rèn)修飾符:public。
一個(gè)類(lèi)除了繼承另一個(gè)類(lèi)外(只能繼承一個(gè)類(lèi)),還可以實(shí)現(xiàn)多個(gè)接口(接口之間用逗號(hào)分隔)。
static
把對(duì)象相關(guān)的變成類(lèi)相關(guān)的,它可以修飾屬性、方法、代碼塊和內(nèi)部類(lèi).
static修飾屬性(類(lèi)變量):
那么這個(gè)屬性就可以用” 類(lèi)名.屬性名 “來(lái)訪(fǎng)問(wèn),也就是使這個(gè)屬性成為本類(lèi)的類(lèi)變量,為本類(lèi)對(duì)象所共享。
類(lèi)加載的過(guò)程
類(lèi)本身也是保存在文件中(字節(jié)碼文件保存著類(lèi)的信息)的,Java會(huì)通過(guò)I/O流把類(lèi)的文件讀入JVM(java虛擬機(jī)),這個(gè)過(guò)程稱(chēng)為類(lèi)的 加載。
JVM會(huì)通過(guò)類(lèi)路徑(CLASSPATH)來(lái)找字節(jié)碼文件。需要的時(shí)候才會(huì)進(jìn)行類(lèi)加載,生成對(duì)象時(shí)是先加載后構(gòu)造
類(lèi)變量,會(huì)在加載時(shí)自動(dòng)初始化,初始化規(guī)則和實(shí)例變量相同。
注意:
類(lèi)中的實(shí)例變量是在創(chuàng)建對(duì)象時(shí)被初始化的。
static修飾的屬性,是在類(lèi)加載時(shí)被創(chuàng)建并進(jìn)行初始化,類(lèi)加載的過(guò)程只進(jìn)行一次,也就是類(lèi)變量只會(huì)被創(chuàng)建一次。
static修飾方法(靜態(tài)方法):
會(huì)使這個(gè)方法成為整個(gè)類(lèi)所公有的方法,可以用” 類(lèi)名.方法名 “訪(fǎng)問(wèn)。
static修飾的方法,不能直接訪(fǎng)問(wèn)本類(lèi)中的非靜態(tài)成員,但本類(lèi)的非靜態(tài)方法可以訪(fǎng)問(wèn)本類(lèi)的靜態(tài)成員。
在靜態(tài)方法中不能出現(xiàn)this關(guān)鍵字。
父類(lèi)中是靜態(tài)方法,子類(lèi)中不能覆蓋為非靜態(tài)方法,在符合覆蓋規(guī)則的前提下,在父子類(lèi)中,父類(lèi)中的靜態(tài)方法可以被子類(lèi)中的靜態(tài)方法覆蓋,但是沒(méi)有多態(tài)。(在使用對(duì)象調(diào)用靜態(tài)方法時(shí)其實(shí)是調(diào)用編譯時(shí)類(lèi)型的靜態(tài)方法)
java中的main方法必須寫(xiě)成static的原因:
在類(lèi)加載時(shí)無(wú)法創(chuàng)建對(duì)象,而靜態(tài)方法可以不通過(guò)對(duì)象調(diào)用,所以在類(lèi)加載時(shí)就可以通過(guò)main方法入口來(lái)運(yùn)行程序。
static修飾初始代碼塊:
這時(shí)這個(gè)初始代碼塊就叫做靜態(tài)初始代碼塊,這個(gè)代碼塊只在類(lèi)加載時(shí)被執(zhí)行一次。
可以用靜態(tài)初始代碼塊初始化一個(gè)類(lèi)。
動(dòng)態(tài)初始代碼塊,寫(xiě)在類(lèi)體中的“{}”,這個(gè)代碼塊是在生成對(duì)象時(shí)運(yùn)行,這種代碼塊叫動(dòng)態(tài)初始代碼
final
修飾符final:不允許改變,可以修飾變量、方法、類(lèi)。
final修飾變量:
被fianl修飾的變量就會(huì)變成常量,一旦賦值不能改變
常量可以在初始化時(shí)直接賦值,也可以在構(gòu)造方法里賦值,只能在這兩種方法里二選一,不能不為常量賦值
常量不會(huì)有默認(rèn)初始值
鎖定棧,使棧中的數(shù)據(jù)不可以改變
靜態(tài)常量只能在初始化時(shí)直接賦值
final修飾方法:
被final修飾的方法將不能被其子類(lèi)覆蓋,保持方法的穩(wěn)定不能被覆蓋
final修飾類(lèi):
被final修飾的類(lèi)將不能被繼承
final類(lèi)中的方法也都是final的
注意:
final不能用來(lái)修飾構(gòu)造方法
abstract:
修飾符abstract:抽象的,定義框架不去實(shí)現(xiàn),可以修飾類(lèi)和方法
abstract修飾類(lèi):
會(huì)使這個(gè)類(lèi)成為一個(gè)抽象類(lèi),這個(gè)類(lèi)將不能生成對(duì)象實(shí)例,但可以做為對(duì)象變量聲明的類(lèi)型,也就是編譯時(shí)類(lèi)型
抽象類(lèi)就相當(dāng)于一個(gè)類(lèi)的半成品,需要子類(lèi)繼承并覆蓋其中的抽象方法,這時(shí)子類(lèi)才又創(chuàng)建實(shí)例的能力,如果子類(lèi)沒(méi)有實(shí)現(xiàn)父類(lèi)的抽象方法,那么子類(lèi)也要為抽象類(lèi)。
abstract修飾方法:
會(huì)使這個(gè)方法變成抽象方法,也就是只有聲明而沒(méi)有實(shí)現(xiàn),實(shí)現(xiàn)部分以”;”代替,需要子類(lèi)繼承實(shí)現(xiàn)。
抽象方法代表了某種標(biāo)準(zhǔn),定義標(biāo)準(zhǔn),定義功能,在子類(lèi)中去實(shí)現(xiàn)功能
(子類(lèi)繼承了父類(lèi)并需要給出從父類(lèi)繼承的抽象方法的實(shí)現(xiàn))。
方法一時(shí)間想不到怎么被實(shí)現(xiàn),或有意要子類(lèi)去實(shí)現(xiàn)而定義某種標(biāo)準(zhǔn),這個(gè)方法可以被定義為抽象。
注意:
有抽象方法的類(lèi)一定是抽象類(lèi)。但是抽象類(lèi)中不一定都是抽象方法,也可以全是具體方法。
| 關(guān)鍵字 | 描述 |
| int | 32位整型數(shù) |
| boolean | 布爾數(shù)據(jù)類(lèi)型 |
| float | 32-bit單精度浮點(diǎn)數(shù) |
| long | 64位整型數(shù) |
| short | 16位數(shù)字 |
| byte | 8-bit 有符號(hào)數(shù)據(jù)類(lèi)型 |
| double | 64-bit雙精度浮點(diǎn)數(shù) |
| char | 16-bit Unicode字符數(shù)據(jù)類(lèi)型 |
| abstract | 抽象方法,抽象類(lèi)的修飾符 |
| extends | 表示一個(gè)類(lèi)是另一個(gè)類(lèi)的子類(lèi) |
| implements | 表示一個(gè)類(lèi)實(shí)現(xiàn)了接口 |
| assert | 斷言條件是否滿(mǎn)足 |
| break | 跳出循環(huán)或者label代碼段 |
| continue | 不執(zhí)行循環(huán)體剩余部分 |
| case | switch語(yǔ)句的一個(gè)條件 |
| catch | 和try搭配撲捉異常信息 |
| final | 表示一個(gè)值在初始化之后就不能再改變了,表示方法不能被重寫(xiě),或者一個(gè)類(lèi)不能有子類(lèi) |
| finally | try 語(yǔ)句不管是否發(fā)生異常都要執(zhí)行的語(yǔ)句塊 |
| class | 定義類(lèi) |
| const | 未使用 |
| default | switch語(yǔ)句中的默認(rèn)分支 |
| enum | 枚舉類(lèi)型 |
| goto | 未使用 |
| if | 條件語(yǔ)句 |
| import | 導(dǎo)入類(lèi) |
| instanceof | 測(cè)試一個(gè)對(duì)象是否是某個(gè)類(lèi)的實(shí)例 |
| interface | 接口,一種抽象的類(lèi)型,僅有方法和常量的定義 |
| native | 表示方法用非java代碼實(shí)現(xiàn) |
| new | 分配新的類(lèi)實(shí)例 |
| package | 一系列相關(guān)類(lèi)組成一個(gè)包 |
| private | 表示私有字段,或者方法等,只能從類(lèi)內(nèi)部訪(fǎng)問(wèn) |
| protected | 表示字段只能通過(guò)類(lèi)或者其子類(lèi)訪(fǎng)問(wèn),子類(lèi)或者在同一個(gè)包內(nèi)的其他類(lèi) |
| public | 表示共有屬性或者方法 |
| return | 方法返回值 |
| static | 表示在類(lèi)級(jí)別定義,所有實(shí)例共享的 |
| strictfp | 浮點(diǎn)數(shù)比較使用嚴(yán)格的規(guī)則 |
| super | 表示基類(lèi) |
| switch | 選擇語(yǔ)句 |
| synchronized | 表示同一時(shí)間只能由一個(gè)線(xiàn)程訪(fǎng)問(wèn)的代碼塊 |
| this | 表示調(diào)用當(dāng)前實(shí)例,或者調(diào)用另一個(gè)構(gòu)造函數(shù) |
| throw | 拋出異常 |
| throws | 定義方法可能拋出的異常 |
| transient | 修飾不要序列化的字段 |
| try | 表示代碼塊要做異常處理或者和finally配合表示是否拋出異常都執(zhí)行finally中的代碼 |
| void | 標(biāo)記方法不返回任何值 |
| volatile | 標(biāo)記字段可能會(huì)被多個(gè)線(xiàn)程同時(shí)訪(fǎng)問(wèn),而不做同步 |
希望本篇文章可以幫到大家
- Java中final關(guān)鍵字的使用與注意總結(jié)
- 詳解Java中的final關(guān)鍵字
- java多線(xiàn)程關(guān)鍵字final和static詳解
- Java基礎(chǔ)教程之final關(guān)鍵字淺析
- Java中final關(guān)鍵字詳解及實(shí)例
- 學(xué)習(xí)Java的static與final關(guān)鍵字
- Java關(guān)鍵字final、static使用總結(jié)
- 淺析對(duì)Java關(guān)鍵字final和static的理解
- 淺談Java中的final關(guān)鍵字與C#中的const, readonly關(guān)鍵字
- 全面解析java final關(guān)鍵字
相關(guān)文章
5分鐘快速學(xué)會(huì)spring boot整合JdbcTemplate的方法
這篇文章主要給大家介紹了如何通過(guò)5分鐘快速學(xué)會(huì)spring boot整合JdbcTemplate的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用spring boot整合JdbcTemplate具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
Spring實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)源切換的方法總結(jié)
這篇文章主要為大家詳細(xì)介紹了一種Spring實(shí)現(xiàn)動(dòng)態(tài)數(shù)據(jù)源切換的方法,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編一起了解一下2023-06-06
Java方法重載實(shí)現(xiàn)原理及代碼實(shí)例
這篇文章主要介紹了Java方法重載實(shí)現(xiàn)原理及代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
springboot整合mybatis的超詳細(xì)過(guò)程(配置模式+注解模式)
這篇文章主要介紹了springboot整合mybatis的詳細(xì)過(guò)程(配置模式+注解模式),這里我使用的是配置模式+注解模式所以需要配置全局文件,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04
解決SpringBoot2多線(xiàn)程無(wú)法注入的問(wèn)題
這篇文章主要介紹了解決SpringBoot2多線(xiàn)程無(wú)法注入的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08
動(dòng)力節(jié)點(diǎn)_王勇_DRP項(xiàng)目視頻教程完整版292集
該視頻由國(guó)內(nèi)知名講師王勇老師主講,適合掌握J(rèn)ava基礎(chǔ)內(nèi)容的同學(xué)學(xué)習(xí),本視頻共計(jì)292集,學(xué)習(xí)Java Web項(xiàng)目,DRP項(xiàng)目視頻是首選,累計(jì)下載量已經(jīng)達(dá)到上千萬(wàn),很多同學(xué)通過(guò)自學(xué)該視頻找到了軟件開(kāi)發(fā)工作2017-04-04
Java中Final關(guān)鍵字的使用技巧及其性能優(yōu)勢(shì)詳解
這篇文章主要介紹了Java中Final關(guān)鍵字的使用技巧及其性能優(yōu)勢(shì)詳解,Java中的final關(guān)鍵字用于修飾變量、方法和類(lèi),可以讓它們?cè)诙x后不可更改,從而提高程序的穩(wěn)定性和可靠性,此外,final關(guān)鍵字還有一些使用技巧和性能優(yōu)勢(shì),需要的朋友可以參考下2023-10-10

