轉(zhuǎn)載:http://www.cnblogs.com/honoka/p/4795891.html
1挨下、final
Java關(guān)鍵詞final有“無(wú)法改變”的含義脐湾,主要用于修飾非抽象類(lèi)、方法或者變量愁铺。使用時(shí)注意:
(1)final類(lèi)不能被繼承闻鉴,沒(méi)有子類(lèi),final類(lèi)中的方法默認(rèn)是final的瓶竭。
(2)final方法不能被子類(lèi)的方法覆蓋渠羞,但可以被繼承。
(3)final成員變量表示常量腋舌,只能被賦值一次渗蟹,賦值后值不再改變。
(4)final不能用于修飾構(gòu)造方法授艰。
(5)父類(lèi)的private成員方法不能被子類(lèi)使用世落,故private類(lèi)型方法默認(rèn)為final類(lèi)型。
final類(lèi):
final類(lèi)無(wú)法被繼承谷朝,故當(dāng)需要一個(gè)完全封裝、無(wú)法改變的類(lèi)時(shí)杈帐,可以使用final修飾增強(qiáng)安全性专钉。
final方法:
主要用于將方法鎖定,防止子類(lèi)修改站叼。
final方法可以被繼承菇民,但是不能被重寫(xiě)(Overriding)。final方法會(huì)被“靜態(tài)綁定”(也就是在編譯期綁定)翔试。
final變量:
通常用final修飾的成員變量表示常量复旬,一般修飾三種類(lèi)型的變量:靜態(tài)變量、實(shí)例變量和局部變量壁涎。
只能被賦值一次志秃, 不可改變。
在使用之前必須初始化竟坛,(要么在聲明的時(shí)候初始化钧舌,要么在類(lèi)的構(gòu)造函數(shù)中初始化)洼冻。
final參數(shù):
函數(shù)參數(shù)使用final修飾符時(shí),則只能讀取該參數(shù)撞牢,不能改變。
2所宰、static
static一般表示“靜態(tài)”的意思仔粥,可修飾成員變量和方法,也可形成靜態(tài)static代碼塊勘究。另外注意Java中沒(méi)有全局變量的概念斟冕。
被static修飾的成員變量或方法獨(dú)立于該類(lèi)的對(duì)象缅阳,只要該類(lèi)被加載,可以在對(duì)象創(chuàng)建即實(shí)例化之前訪問(wèn)秀撇。
靜態(tài)變量
被static修飾的變量即為靜態(tài)變量向族,當(dāng)JVM加載類(lèi)后,可以通過(guò)類(lèi)名直接訪問(wèn)再扭,類(lèi)的所有實(shí)例共享一個(gè)static變量夜矗。
靜態(tài)方法
靜態(tài)方法可以直接通過(guò)類(lèi)名調(diào)用紊撕,但是不能直接訪問(wèn)所屬類(lèi)的實(shí)例變量和方法,只能訪問(wèn)所屬類(lèi)的靜態(tài)變量和方法区赵,這是因?yàn)閷?shí)例成員只與特定對(duì)象關(guān)聯(lián)浪南。
static方法中不能使用this、super關(guān)鍵字患整,不能訪問(wèn)非靜態(tài)的域拜效,也不能訪問(wèn)非靜態(tài)的方法。
靜態(tài)代碼塊
為類(lèi)中獨(dú)立于類(lèi)成員的static語(yǔ)句塊各谚,不在任何方法體內(nèi)紧憾,當(dāng)JVM加載類(lèi)時(shí),就會(huì)執(zhí)行靜態(tài)代碼塊昌渤,無(wú)需等待實(shí)例化赴穗,static語(yǔ)句塊可以多個(gè),JVM會(huì)按照它們的先后順序依次執(zhí)行膀息。
3般眉、static和final一起時(shí)有什么作用
static final一起使用修飾成員變量或方法時(shí),可以理解為“全局常量”甸赃,均可通過(guò)類(lèi)名直接訪問(wèn)。