this
關(guān)鍵字this引用對象自身。它也可以在構(gòu)造方法內(nèi)部用于調(diào)用同一個(gè)類的其他構(gòu)造方法。
隱藏的靜態(tài)變量可以通過”類.靜態(tài)變量”來引用,而隱藏的實(shí)例變量就需要使用”this.實(shí)例變量”來引用。
調(diào)用一個(gè)重載的構(gòu)造方法this引用是必須的。
this是個(gè)隱式參數(shù),代表當(dāng)前對象
1
2
3
4
5
|
publie class Student{ private String name; public void setName(String name){ this .name=name; //this.name為當(dāng)前對象的成員變量 } } |
如果某個(gè)構(gòu)造方法的第一個(gè)語句具有形式this( ••• ),那么這個(gè)構(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()不能同時(shí)出現(xiàn)
super可以屏蔽子類屬性和父類屬性重名時(shí)帶來的屬性遮蓋,super. 表示調(diào)用父類的方法或?qū)傩?/p>
在子類的構(gòu)造器中如果沒有指定調(diào)用父類的哪一個(gè)構(gòu)造器,那么就會(huì)調(diào)用父類的無參構(gòu)造器,即super()
注意:
父類的構(gòu)造器不能被子類繼承
方法和屬性可以被繼承,權(quán)限不限制能否繼承過來,限制的是能否直接訪問
先構(gòu)造父類,后構(gòu)造子類
instanceof
用法:引用 instanceof 類名
判斷這個(gè)引用所指向的對象是否屬于這個(gè)類。
用在強(qiáng)制轉(zhuǎn)換之前,避免類型轉(zhuǎn)換異常。
1
2
3
4
|
if (a instanceof Dog){ Dog d=(Dog)a; } implements |
一個(gè)類實(shí)現(xiàn)一個(gè)接口必須實(shí)現(xiàn)接口中所有的方法,否則其為抽象類,并且在實(shí)現(xiàn)類中的方法要加上public(不能省略)。
類中的默認(rèn)修飾符:default。
接口中的默認(rèn)修飾符:public。
一個(gè)類除了繼承另一個(gè)類外(只能繼承一個(gè)類),還可以實(shí)現(xiàn)多個(gè)接口(接口之間用逗號分隔)。
static
把對象相關(guān)的變成類相關(guān)的,它可以修飾屬性、方法、代碼塊和內(nèi)部類.
static修飾屬性(類變量):
那么這個(gè)屬性就可以用” 類名.屬性名 “來訪問,也就是使這個(gè)屬性成為本類的類變量,為本類對象所共享。
類加載的過程
類本身也是保存在文件中(字節(jié)碼文件保存著類的信息)的,Java會(huì)通過I/O流把類的文件讀入JVM(java虛擬機(jī)),這個(gè)過程稱為類的 加載。
JVM會(huì)通過類路徑(CLASSPATH)來找字節(jié)碼文件。需要的時(shí)候才會(huì)進(jìn)行類加載,生成對象時(shí)是先加載后構(gòu)造
類變量,會(huì)在加載時(shí)自動(dòng)初始化,初始化規(guī)則和實(shí)例變量相同。
注意:
類中的實(shí)例變量是在創(chuàng)建對象時(shí)被初始化的。
static修飾的屬性,是在類加載時(shí)被創(chuàng)建并進(jìn)行初始化,類加載的過程只進(jìn)行一次,也就是類變量只會(huì)被創(chuàng)建一次。
static修飾方法(靜態(tài)方法):
會(huì)使這個(gè)方法成為整個(gè)類所公有的方法,可以用” 類名.方法名 “訪問。
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)方法時(shí)其實(shí)是調(diào)用編譯時(shí)類型的靜態(tài)方法)
java中的main方法必須寫成static的原因:
在類加載時(shí)無法創(chuàng)建對象,而靜態(tài)方法可以不通過對象調(diào)用,所以在類加載時(shí)就可以通過main方法入口來運(yùn)行程序。
static修飾初始代碼塊:
這時(shí)這個(gè)初始代碼塊就叫做靜態(tài)初始代碼塊,這個(gè)代碼塊只在類加載時(shí)被執(zhí)行一次。
可以用靜態(tài)初始代碼塊初始化一個(gè)類。
動(dòng)態(tài)初始代碼塊,寫在類體中的“{}”,這個(gè)代碼塊是在生成對象時(shí)運(yùn)行,這種代碼塊叫動(dòng)態(tài)初始代碼
final
修飾符final:不允許改變,可以修飾變量、方法、類。
final修飾變量:
被fianl修飾的變量就會(huì)變成常量,一旦賦值不能改變
常量可以在初始化時(shí)直接賦值,也可以在構(gòu)造方法里賦值,只能在這兩種方法里二選一,不能不為常量賦值
常量不會(huì)有默認(rèn)初始值
鎖定棧,使棧中的數(shù)據(jù)不可以改變
靜態(tài)常量只能在初始化時(shí)直接賦值
final修飾方法:
被final修飾的方法將不能被其子類覆蓋,保持方法的穩(wěn)定不能被覆蓋
final修飾類:
被final修飾的類將不能被繼承
final類中的方法也都是final的
注意:
final不能用來修飾構(gòu)造方法
abstract:
修飾符abstract:抽象的,定義框架不去實(shí)現(xiàn),可以修飾類和方法
abstract修飾類:
會(huì)使這個(gè)類成為一個(gè)抽象類,這個(gè)類將不能生成對象實(shí)例,但可以做為對象變量聲明的類型,也就是編譯時(shí)類型
抽象類就相當(dāng)于一個(gè)類的半成品,需要子類繼承并覆蓋其中的抽象方法,這時(shí)子類才又創(chuàng)建實(shí)例的能力,如果子類沒有實(shí)現(xiàn)父類的抽象方法,那么子類也要為抽象類。
abstract修飾方法:
會(huì)使這個(gè)方法變成抽象方法,也就是只有聲明而沒有實(shí)現(xiàn),實(shí)現(xiàn)部分以”;”代替,需要子類繼承實(shí)現(xiàn)。
抽象方法代表了某種標(biāo)準(zhǔn),定義標(biāo)準(zhǔn),定義功能,在子類中去實(shí)現(xiàn)功能
(子類繼承了父類并需要給出從父類繼承的抽象方法的實(shí)現(xiàn))。
方法一時(shí)間想不到怎么被實(shí)現(xiàn),或有意要子類去實(shí)現(xiàn)而定義某種標(biāo)準(zhǔn),這個(gè)方法可以被定義為抽象。
注意:
有抽象方法的類一定是抽象類。但是抽象類中不一定都是抽象方法,也可以全是具體方法。
關(guān)鍵字 | 描述 |
int | 32位整型數(shù) |
boolean | 布爾數(shù)據(jù)類型 |
float | 32-bit單精度浮點(diǎn)數(shù) |
long | 64位整型數(shù) |
short | 16位數(shù)字 |
byte | 8-bit 有符號數(shù)據(jù)類型 |
double | 64-bit雙精度浮點(diǎn)數(shù) |
char | 16-bit Unicode字符數(shù)據(jù)類型 |
abstract | 抽象方法,抽象類的修飾符 |
extends | 表示一個(gè)類是另一個(gè)類的子類 |
implements | 表示一個(gè)類實(shí)現(xiàn)了接口 |
assert | 斷言條件是否滿足 |
break | 跳出循環(huán)或者label代碼段 |
continue | 不執(zhí)行循環(huán)體剩余部分 |
case | switch語句的一個(gè)條件 |
catch | 和try搭配撲捉異常信息 |
final | 表示一個(gè)值在初始化之后就不能再改變了,表示方法不能被重寫,或者一個(gè)類不能有子類 |
finally | try 語句不管是否發(fā)生異常都要執(zhí)行的語句塊 |
class | 定義類 |
const | 未使用 |
default | switch語句中的默認(rèn)分支 |
enum | 枚舉類型 |
goto | 未使用 |
if | 條件語句 |
import | 導(dǎo)入類 |
instanceof | 測試一個(gè)對象是否是某個(gè)類的實(shí)例 |
interface | 接口,一種抽象的類型,僅有方法和常量的定義 |
native | 表示方法用非java代碼實(shí)現(xiàn) |
new | 分配新的類實(shí)例 |
package | 一系列相關(guān)類組成一個(gè)包 |
private | 表示私有字段,或者方法等,只能從類內(nèi)部訪問 |
protected | 表示字段只能通過類或者其子類訪問,子類或者在同一個(gè)包內(nèi)的其他類 |
public | 表示共有屬性或者方法 |
return | 方法返回值 |
static | 表示在類級別定義,所有實(shí)例共享的 |
strictfp | 浮點(diǎn)數(shù)比較使用嚴(yán)格的規(guī)則 |
super | 表示基類 |
switch | 選擇語句 |
synchronized | 表示同一時(shí)間只能由一個(gè)線程訪問的代碼塊 |
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í)訪問,而不做同步 |
希望本篇文章可以幫到大家
原文鏈接:http://blog.csdn.net/demonliuhui/article/details/70196339