Java修飾符
java提供了很多修飾符,主要分為兩類:
- 訪問修飾符
- 非訪問修飾符
什么是修飾符?
修飾符是用來定義Class(類)崇决、Method(方法)逻炊、Param(變量)市咆,通常是放在語句的最前端秤掌。
訪問修飾符
Java中可以使用訪問修飾符來保護(hù)類耗啦、變量、方法和構(gòu)造方法的訪問机杜。Java中存在4種不同的訪問權(quán)限
- 默認(rèn)的 default,可在同一個(gè)包中可見衅谷,代碼中的體現(xiàn)是不做任何修飾符處理
- 私有的 private椒拗,可在當(dāng)前類中可見
- 公共的 public,對(duì)所有類可見
- 受保護(hù)的 protected获黔, 對(duì)同一包內(nèi)的類和所有子類可見
訪問控制和繼承:
- 父類中聲明為public方法在子類中必須為public
- 父類中聲明的protected方法在子類中要么聲明為protected蚀苛,要么可以為public,不能為private
- 父類中聲明的private方法不會(huì)被子類繼承
非訪問修飾符
為了實(shí)現(xiàn)其他的功能玷氏,java也提供了很多的非訪問修飾符
static 修飾符 靜態(tài)修飾符
當(dāng)static關(guān)鍵字用來聲明獨(dú)立于對(duì)象變量時(shí)堵未,無論一個(gè)類實(shí)例化多少個(gè)對(duì)象,它的靜態(tài)變量只有一份拷貝盏触。靜態(tài)變量也被稱為類變量渗蟹。局部變量不能被聲明為static變量
當(dāng)static關(guān)鍵字用來聲明獨(dú)立于對(duì)象方法是,靜態(tài)方法不能使用類的非靜態(tài)變量赞辩。靜態(tài)方法可以從參數(shù)列表中獲得數(shù)據(jù)雌芽,然后計(jì)算這些數(shù)據(jù)final 修飾符 常量修飾符
當(dāng)final關(guān)鍵字用來聲明變量時(shí),final變量能被顯式地初始化且只能初始化一次辨嗽。
當(dāng)final關(guān)鍵字用來聲明對(duì)象時(shí)世落,該對(duì)象就不能被其他的對(duì)象所繼承了,但是final對(duì)象內(nèi)的數(shù)據(jù)可以被改變糟需。
當(dāng)final關(guān)鍵字用來聲明方法時(shí)屉佳,該方法可以被子類繼承但是子類不能重寫該方法,聲明final方法的主要目的就是為了防止該類的該方法內(nèi)容被子類所改變洲押。
也就是說final關(guān)鍵字聲明變量時(shí)不能被改變而聲明對(duì)象時(shí)則是不可被繼承武花,聲明方法時(shí)不可被子類重寫
final聲明變量時(shí)通常與static修飾符一同使用abstract 修飾符 抽象修飾符
當(dāng)使用abstract修飾符修飾類時(shí),抽象類不能用來實(shí)例對(duì)象诅诱,聲明抽象類的唯一目的就是為了將該類進(jìn)行擴(kuò)充髓堪。
一個(gè)類不能同時(shí)被abstract與final修飾符同時(shí)使用。如果一個(gè)類包含抽象方法,那么該類一定要聲明為抽象類干旁,否則將出現(xiàn)編譯錯(cuò)誤驶沼。
抽象類可以包含抽象方法和非抽象方法。
抽象方法是一種沒有被實(shí)現(xiàn)的方法争群,該方法的具體實(shí)現(xiàn)由子類提供回怜。抽象方法不能被聲明為static和final。
任何繼承抽象類的子類必須實(shí)現(xiàn)父類的所有抽象方法换薄,除非該子類也是抽象類玉雾。
如果一個(gè)類包含若干個(gè)抽象方法,那么該類必須聲明為抽象類轻要。抽象類可以不包含抽象方法synchronized 修飾符 線程同步修飾符
synchronized修飾符聲明的方法同一時(shí)間只能被一個(gè)線程訪問复旬。transient 修飾符 拒絕序列化修飾符
序列化的對(duì)象包含被transient修飾符實(shí)例變量時(shí),java虛擬機(jī)會(huì)跳過該特定的變量冲泥。該修飾符包含在定義變量語句中用來預(yù)處理類和變量的數(shù)據(jù)類型驹碍。volatile 修飾符
volatile修飾符的成員變量在每一次被線程訪問時(shí),都強(qiáng)迫從共享內(nèi)存中重讀該成員變量的值凡恍。而且當(dāng)成員變量發(fā)生變化時(shí)志秃,強(qiáng)迫線程將該變化值寫到共享內(nèi)存中。這樣在任何時(shí)刻嚼酝,兩個(gè)不同線程總是看到某一個(gè)成員變量的同一個(gè)值浮还。一個(gè)volatile對(duì)象引用可能是null