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),限制的是能否直接訪問(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)訪問(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ò)程稱為類(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)名.方法名 “訪問(wèn)。
static修飾的方法,不能直接訪問(wèn)本類(lèi)中的非靜態(tài)成員,但本類(lèi)的非靜態(tài)方法可以訪問(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 | 斷言條件是否滿足 |
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)部訪問(wèn) |
protected | 表示字段只能通過(guò)類(lèi)或者其子類(lèi)訪問(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è)線程訪問(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è)線程同時(shí)訪問(wèn),而不做同步 |
希望本篇文章可以幫到大家
- Java中final關(guān)鍵字的使用與注意總結(jié)
- 詳解Java中的final關(guān)鍵字
- java多線程關(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)文章
Java中使用Preconditions來(lái)檢查傳入?yún)?shù)介紹
這篇文章主要介紹了Java中使用Preconditions來(lái)檢查傳入?yún)?shù)介紹,本文只是作為一個(gè)簡(jiǎn)單的用法介紹,需要的朋友可以參考下2015-06-06基于HttpServletResponse 相關(guān)常用方法的應(yīng)用
本篇文章小編為大家介紹,基于HttpServletResponse 相關(guān)常用方法的應(yīng)用,需要的朋友參考下2013-04-04springboot配置mysql數(shù)據(jù)庫(kù)spring.datasource.url報(bào)錯(cuò)的解決
這篇文章主要介紹了springboot配置mysql數(shù)據(jù)庫(kù)spring.datasource.url報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01Spring實(shí)例化bean過(guò)程解析及完整代碼示例
這篇文章主要介紹了Spring實(shí)例化bean過(guò)程解析及完整代碼示例,簡(jiǎn)單分析實(shí)例化bean過(guò)程并且分享了相關(guān)實(shí)例,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01舉例講解Java中synchronized關(guān)鍵字的用法
這篇文章主要介紹了Java中synchronized關(guān)鍵字的用法,針對(duì)synchronized修飾方法的使用作出了簡(jiǎn)單講解和演示,需要的朋友可以參考下2016-04-04