java中的修飾符分為類(lèi)修飾符,字段修飾符,方法修飾符。根據功能的不同,主要分為以下五種。
1、權限訪(fǎng)問(wèn)修飾符
public,protected,default,private,這四種級別的修飾符都可以用來(lái)修飾類(lèi)、方法和字段。
2、final修飾符
final的意思是不可變,他可以修飾類(lèi)、字段、方法。修飾類(lèi)后類(lèi)不能被擴展(extends),也就是不能被繼承。修飾字段后字段的值不能被改變,因此如果有final修飾字段,應該對字段進(jìn)行手動(dòng)初始化。修飾方法后該方法不能被改變,也就是重寫(xiě)。
3、abstract修飾符
abstract是抽象的意思,用來(lái)修飾類(lèi)和方法,修飾類(lèi)后,該類(lèi)為抽象類(lèi),不能被實(shí)例化,必需進(jìn)行擴展。修飾方法后,該方法為抽象方法必須被子類(lèi)重寫(xiě)(override)。
4、static修飾符
static用來(lái)修飾內部類(lèi),方法,字段。修飾內部類(lèi)說(shuō)明該內部類(lèi)屬于外部類(lèi)而不屬于外部類(lèi)的某個(gè)實(shí)例。修飾字段說(shuō)明該字段屬于類(lèi)而不屬于類(lèi)實(shí)例。修飾方法說(shuō)明該方法屬于類(lèi)而不屬于類(lèi)實(shí)例
5、volatile修飾符
易失 ( 共享 ) 域修飾符 volatile 是用來(lái)說(shuō)明這個(gè)成員變量可能被幾個(gè)線(xiàn)程所控制和修改。也就是說(shuō)在程序運行過(guò)程中,這個(gè)成員變量有可能被其它的程序影響或改變它的取值。
擴展資料:
修飾符的特點(diǎn):
static是一個(gè)修飾符,用于修飾成員(成員變量和成員函數)
靜態(tài)成員隨著(zhù)類(lèi)的加載而加載。靜態(tài)成員優(yōu)先于對象存在。靜態(tài)成員被所有對象所共享靜態(tài)成員多了一個(gè)中調用方式,可以被類(lèi)名直接調用。
使用的注意事項:
靜態(tài)方法只能訪(fǎng)問(wèn)靜態(tài)成員, 非靜態(tài)方法既可以訪(fǎng)問(wèn)靜態(tài)又可以訪(fǎng)問(wèn)非靜態(tài)。靜態(tài)方法中不可以定義this,super關(guān)鍵字。因為this代表是對象。而靜態(tài)存在時(shí),有可能沒(méi)有對象。所以靜態(tài)方法運行時(shí),this是沒(méi)有任何對象代表的。
簡(jiǎn)單說(shuō),先進(jìn)內存的數據不可以訪(fǎng)問(wèn)后進(jìn)內存的數據,可是后進(jìn)內存數據可以訪(fǎng)問(wèn)先進(jìn)內存的數據。主函數是靜態(tài)的。
類(lèi)修飾符
Public
可以從其他類(lèi)中訪(fǎng)問(wèn)
obstract
本類(lèi)不能被實(shí)例化
final
不能再聲明子類(lèi)
構造器修飾符
Public
可以從所有的類(lèi)中訪(fǎng)問(wèn)
Protected
只能從自己的類(lèi)和它的子類(lèi)中訪(fǎng)問(wèn)
Private
只能在本類(lèi)中訪(fǎng)問(wèn)
域修飾符
Public
可以從所有的類(lèi)中訪(fǎng)問(wèn)
Protected
只能從本類(lèi)和它的子類(lèi)中訪(fǎng)問(wèn)
Private
只能從本類(lèi)中訪(fǎng)問(wèn)它
Static
對該類(lèi)的所有實(shí)例只能有一個(gè)域值存在
transient
不是一個(gè)對象持久狀態(tài)的一部份
Volatile
可以被異步的線(xiàn)程所修改
final
必須對它賦予初值并且不能修改它
局部變量修飾符
final
必須對它賦予初值并且不能修改它
方法修飾符
Public
可以從所有的類(lèi)中訪(fǎng)問(wèn)它
Protected
只能從本類(lèi)及其子類(lèi)中訪(fǎng)問(wèn)它
Private
只能從本類(lèi)中訪(fǎng)問(wèn)它
abstract
沒(méi)有方法體,屬于一個(gè)抽象類(lèi)
final
子類(lèi)不能覆蓋它
static
被綁定于類(lèi)本身而不是類(lèi)的實(shí)例
native
該方法由其他編程語(yǔ)言實(shí)現
asnchronized
在一個(gè)線(xiàn)程調用它之前必須先給它加
一,非訪(fǎng)問(wèn)修飾符。
1, 抽象類(lèi): 凡是用abstract修飾符修飾的類(lèi)被稱(chēng)為抽象類(lèi)。抽象類(lèi)就是沒(méi)有具體對象的概念類(lèi)。
抽象類(lèi)是一種經(jīng)過(guò)優(yōu)化的概念組織方式:把共同特點(diǎn)抽象出來(lái);其后在描述和處理某一種具體對象時(shí),就只需描述不同的特殊之處。這種組織方式使得所有的概念層次分明,簡(jiǎn)潔洗練,非常符合人們日常的思維習慣。
由于抽象類(lèi)是它的所有子類(lèi)的公共屬性的集合,所以使用抽象類(lèi)的一個(gè)優(yōu)點(diǎn)就是可以充分利用這些公共屬性來(lái)提高開(kāi)發(fā)和維護程序的效率。 值得一提的是,面向對象技術(shù)是要用更接近于人類(lèi)思維方式的方法來(lái)處理實(shí)際問(wèn)題,抽象類(lèi)的設立就是這種思想的具體體現之一,它是模仿人類(lèi)的思維模式的產(chǎn)物。
2,最終類(lèi): 如果一個(gè)類(lèi)被final修飾符所修飾和限定,說(shuō)明這個(gè)類(lèi)不可能有子類(lèi)。 被定義為final的類(lèi)通常是一些有固定作用、用來(lái)完成某種標準功能的類(lèi)。
如Java系統定義好的用來(lái)實(shí)現網(wǎng)絡(luò )功能的InterAddress、Socket等類(lèi)都是final類(lèi)。 abstract和final修飾符不能同時(shí)修飾一個(gè)類(lèi),因為abstract類(lèi)自身沒(méi)有具體對象,需要派生出子類(lèi)后在創(chuàng )建子類(lèi)的對象;而final類(lèi)不可能有子類(lèi)。
這樣放在一起修飾就沒(méi)有意義了。 3,有些類(lèi)的修飾符也可以用來(lái)修飾類(lèi)中的域或方法: (1) 域:是類(lèi)和對象的靜態(tài)屬性,定義域的操作就是說(shuō)明變量或創(chuàng )建對象的操作。
靜態(tài)域: 用static修飾符修飾的域是僅屬于類(lèi)的靜態(tài)域。靜態(tài)域是類(lèi)中每個(gè)對象共享的域。
他們是類(lèi)的域,不屬于任何一個(gè)類(lèi)的具體對象。是一個(gè)公共的存儲單元,任何一個(gè)類(lèi)的對象訪(fǎng)問(wèn)它時(shí),取到的都是相同的數值。
靜態(tài)初始化器: 靜態(tài)初始化器是由關(guān)鍵字static引導的一對大括號括起的語(yǔ)句組。作用是:在加載時(shí),初始化類(lèi)的靜態(tài)域。
與構造函數相同,他們都是用來(lái)完成初始化的工作,但是靜態(tài)初始化器與構造函數有三點(diǎn)不同: ①構造函數是對每個(gè)新創(chuàng )建的對象初始化,而靜態(tài)初始化器是對類(lèi)自身進(jìn)行初始化。 ②構造函數是在用new運算符產(chǎn)生新對象時(shí)由系統自動(dòng)執行,而靜態(tài)初始化器則是在它所屬的類(lèi)加載到內存時(shí)由系統調用執行。
③不同于構造函數,靜態(tài)初始化器不是方法,沒(méi)有方法名、返回值和參數列表。 最終域: 用final修飾的域,實(shí)際上就是Java中的常量。
用final修飾符說(shuō)明常量時(shí),需要注意以下幾點(diǎn): ①需要說(shuō)明常量的數據類(lèi)型。 ②需要同時(shí)指出常量的具體取值。
③因為所有類(lèi)對象的常量成員,其數值都固定一致,為了節省空間,常量通常聲明為static。 易失域: 如果一個(gè)域被volatile修飾符所修飾,說(shuō)明這個(gè)域可能同時(shí)被幾個(gè)線(xiàn)程所控制和修改,即這個(gè)域不僅僅被當前程序所掌握,在運行過(guò)程中可能在其他未知的程序操作影響和改變該域的取值。
在使用當中應該特別注意。 通常,volatile用來(lái)修飾接受外部輸入的域。
如表示當前時(shí)間的變量將系統的后臺線(xiàn)程隨時(shí)修改,以保證程序中取到的總是最新的當前系統時(shí)間,所以可以把它定義為易失域。 (2)方法:是類(lèi)的動(dòng)態(tài)屬性,標志了類(lèi)所具有的功能和操作。
小括號是方法的標志。 抽象方法: 修飾符abstract修飾的抽象方法是一種僅有方法頭,而沒(méi)有具體的方法體和操作實(shí)現的方法。
使用抽象方法的目的是使所有的子類(lèi),對外都呈現一個(gè)相同名字的方法,是一個(gè)統一的接口。所有的抽象方法,都必須存在于抽象類(lèi)之中。
靜態(tài)方法: 用static修飾符修飾的方法,是屬于整個(gè)類(lèi)的類(lèi)方法,不用的是對象或實(shí)例的方法。調用這種方法時(shí),應該使用類(lèi)名作前綴;這種方法在內存中的代碼段將隨著(zhù)類(lèi)的定義而分配和裝載,不被任何一個(gè)對象專(zhuān)有;只能處理屬于整個(gè)類(lèi)的成員變量。
最終方法: 用final修飾符修飾的類(lèi)方法。功能和內部語(yǔ)句不能再更改的方法,不能再被繼承。
注意:所有已被private修飾符限定為私有的方法,以及所有包含在final類(lèi)中的方法,都被缺省地認為是final的。 本地方法: 用native修飾符聲明其他語(yǔ)言書(shū)寫(xiě)方法體并具體實(shí)現方法功能的特殊的方法。
這里的其他語(yǔ)言包括C/C++/FROTRAN/匯編等。由于native的方法的方法體使用其他語(yǔ)言在程序外部寫(xiě)成,所以所有的native方法都沒(méi)有方法體,而用一個(gè)分號代替。
同步方法: 如果synchronized修飾的方法是一個(gè)類(lèi)的方法(即static的方法),那么在被調用執行前,將把系統類(lèi)Class中對應當前類(lèi)的對象加鎖。如果synchronized修飾的是一個(gè)對象的方法(未用static修飾的方法),則這個(gè)方法在被調用執行前,將把當前對象加鎖。
Synchronized修飾符主要用于多線(xiàn)程共存的程序中的協(xié)調和同步。 二,訪(fǎng)問(wèn)控制符。
訪(fǎng)問(wèn)控制符是一組限定類(lèi)、域或方法是否可以被程序里的其他部分訪(fǎng)問(wèn)和調用的修飾符。類(lèi)的訪(fǎng)問(wèn)控制符只有一個(gè)public,域和方法的訪(fǎng)問(wèn)控制符有四個(gè),分別是public、private、protected、private protected,另外還有一種沒(méi)有定義專(zhuān)門(mén)的訪(fǎng)問(wèn)控制符的缺省情況。
1, 公有訪(fǎng)問(wèn)控制符public: Java的類(lèi)是通過(guò)包的概念來(lái)組織的,包氏類(lèi)的一個(gè)松散的集合。處于同一個(gè)包中的類(lèi)可以不需要任何說(shuō)明而方便的互相訪(fǎng)問(wèn)和引用,而對于不同包中的類(lèi),則不行。
但當一個(gè)類(lèi)被聲明為public時(shí),他就具有了被其他包中的類(lèi)訪(fǎng)問(wèn)的可能性,只要這些其。
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權,根據《信息網(wǎng)絡(luò )傳播權保護條例》,如果我們轉載的作品侵犯了您的權利,請在一個(gè)月內通知我們,我們會(huì )及時(shí)刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學(xué)習?shū)B(niǎo). 頁(yè)面生成時(shí)間:2.567秒