修飾符 | 方法 | 構造方法 | 屬性 | 類 | 接口 |
public | √ | √ | √ | √ | √ |
protected | √ | √ | √ | × | × |
default(friendly) | √ | √ | √ | √ | × |
private | √ | √ | √ | × | × |
作用域 | 當前類 | 同一個包 | 子孫類 | 其他包 |
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
friendly | √ | √ | × | × |
private | √ | × | × | × |
//public可以修飾類、方法、構造方法、屬性和接口public class TestClass { public String testStr; public TestClass() { System.out.println("This is a public GouZao method"); } public static void main(String[] str) { System.out.println("This the public main method"); }}protected:可以被同一個包的其他類訪問,也可以被不同包的子類訪問。不能修飾類和接口。接口的成員變量和方法不能聲明為protected。
//protected可以修飾屬性、方法、構造方法public%20class%20TestClass%20{%20%20%20%20protected%20String%20testStr;%20%20%20%20protected%20TestClass()%20{%20%20%20%20%20%20%20%20System.out.println("This%20is%20a%20public%20GouZao%20method");%20%20%20%20}%20%20%20%20protected%20void%20method()%20{%20%20%20%20%20%20%20%20System.out.println("This%20is%20a%20protected%20method");%20%20%20%20}}default(friendly):只能被同一個包的其他類訪問。接口里的變量都隱式聲明為public%20static%20final,而接口里的方法默認情況下訪問權限為public。
//friendly可以修飾方法、構造方法、屬性和構造器class%20GouZaoQiOne%20{%20%20%20%20String%20testStr;%20%20%20%20GouZaoQiOne()%20{%20%20%20%20%20%20%20%20System.out.println("This%20is%20a%20default(friendly)%20GouZao%20method");%20%20%20%20}%20%20%20%20void%20method()%20{%20%20%20%20%20%20%20%20System.out.println("This%20is%20a%20default(friendly)%20method");%20%20%20%20}}private:只能被所屬類訪問。類和接口不能設置為private。
//private可以修飾方法、構造方法、屬性public%20class%20TestClass%20{%20%20%20%20private%20String%20testStr;%20%20%20%20private%20TestClass()%20{%20%20%20%20%20%20%20%20System.out.println("This%20is%20a%20public%20GouZao%20method");%20%20%20%20}%20%20%20%20private%20void%20method()%20{%20%20%20%20%20%20%20%20System.out.println("This%20is%20a%20protected%20method");%20%20%20%20}}非訪問修飾符包括:static、final、abstract、synchronized、transient、volatile、strictfp非訪問修飾符可以修飾的內容,如下表:
非訪問修飾符 | 方法 | 屬性 | 類 | 構造方法 |
final | √ | √ | √ | × |
static | √ | √ | × | × |
abstract | √ | × | √ | × |
synchronized | √ | × | × | × |
native | √ | × | × | × |
transient | × | √ | × | × |
volatile | × | √ | × | × |
strictfp | √ | × | √ | √ |
public%20class%20TestClass%20{%20%20%20%20public%20static%20void%20main(String[]%20str)%20{%20%20%20%20%20%20%20%20//static方法和屬性,可以直接使用classname.variablename%20和%20classname.methodname%20的方式訪問%20%20%20%20%20%20%20%20System.out.println("This%20is%20the%20static%20shuxing:%20"%20+%20Test.str);%20%20%20%20%20%20%20%20Test.method();%20%20%20%20}}class%20Test%20{%20%20%20%20/**%20%20%20%20%20*%20靜態變量:static%20關鍵字用來聲明獨立于對象的靜態變量,無論一個類實例化多少對象,它的靜態變量只有一份拷貝。%20%20%20%20%20*%20靜態變量也被成為類變量。局部變量不能被聲明為%20static%20變量。%20%20%20%20%20*/%20%20%20%20public%20static%20String%20str%20=%20"test%20str";%20%20%20%20/**%20%20%20%20%20*%20靜態方法:static%20關鍵字用來聲明獨立于對象的靜態方法。靜態方法不能使用類的非靜態變量。%20%20%20%20%20*%20靜態方法從參數列表得到數據,然后計算這些數據。%20%20%20%20%20*/%20%20%20%20public%20static%20void%20method()%20{%20%20%20%20%20%20%20%20System.out.println("This%20is%20a%20static%20method");%20%20%20%20}}final修飾符例子:public%20class%20TestClass%20{%20%20%20%20/**%20%20%20%20%20*%20final%20變量能被顯式地初始化并且只能初始化一次。被聲明為%20final%20的對象的引用不能指向不同的對象。%20%20%20%20%20*%20但是%20final%20對象里的數據可以被改變。也就是說%20final%20對象的引用不能改變,但是里面的值可以改變。%20%20%20%20%20*%20final%20修飾符通常和%20static%20修飾符一起使用來創建類常量。%20%20%20%20%20*/%20%20%20%20final%20String%20str%20=%20"testStr";%20%20%20%20public%20static%20final%20int%20MAX_INT%20=%2010;%20%20%20%20static%20final%20String%20MESSAGE%20=%20"This%20is%20a%20message";%20%20%20%20/**%20%20%20%20%20*%20類中的%20final%20方法可以被子類繼承,但是不能被子類修改。%20%20%20%20%20*%20聲明%20final%20方法的主要目的是防止該方法的內容被修改。%20%20%20%20%20*/%20%20%20%20public%20final%20void%20method()%20{}}/**%20*%20final%20類不能被繼承,沒有類能夠繼承%20final%20類的任何特性。%20*/final%20class%20TestFinalClass%20{}abstra修飾符例子:/**%20*%20抽象類不能用來實例化對象,聲明抽象類的唯一目的是為了將來對該類進行擴充%20*%20如果一個類包含抽象方法,那么該類一定要聲明為抽象類%20*%20抽象類可以包含抽象方法和非抽象方法,也可以不包含抽象方法%20*/abstract%20class%20TestAbstractClass%20{%20%20%20%20private%20String%20testStr;%20%20%20%20/**%20%20%20%20%20*%20抽象方法是一種沒有任何實現的方法,該方法的的具體實現由子類提供%20%20%20%20%20*%20任何繼承抽象類的子類必須實現父類的所有抽象方法,除非該子類也是抽象類%20%20%20%20%20*/%20%20%20%20public%20abstract%20void%20method();}synchronized、transient、volatile修飾符例子:class%20Test%20{%20%20%20%20/**%20%20%20%20%20*%20synchronized%20關鍵字聲明的方法同一時間只能被一個線程訪問。%20%20%20%20%20*%20synchronized%20修飾符可以應用于四個訪問修飾符。%20%20%20%20%20*/%20%20%20%20public%20synchronized%20void%20method()%20{}%20%20%20%20/**%20%20%20%20%20*%20序列化的對象包含被%20transient%20修飾的實例變量時,java%20虛擬機(JVM)跳過該特定的變量。%20%20%20%20%20*%20該修飾符包含在定義變量的語句中,用來預處理類和變量的數據類型。%20%20%20%20%20*/%20%20%20%20public%20transient%20int%20testNum%20=%20100;%20//%20不會持久化%20%20%20%20public%20int%20testInt%20=%2010;%20//持久化%20%20%20%20/**%20%20%20%20%20*%20volatile%20修飾的成員變量在每次被線程訪問時,都強制從共享內存中重新讀取該成員變量的值。%20%20%20%20%20*%20而且,當成員變量發生變化時,會強制線程將變化值回寫到共享內存。%20%20%20%20%20*%20這樣在任何時刻,兩個不同的線程總是看到某個成員變量的同一個值。%20%20%20%20%20*%20一個%20volatile%20對象引用可能是%20null。%20%20%20%20%20*/%20%20%20%20private%20volatile%20boolean%20testBool%20=%20false;%20%20%20%20public%20void%20methodOne()%20{%20%20%20%20%20%20%20%20testBool%20=%20true;%20%20%20%20%20%20%20%20while%20(testBool)%20{%20%20%20%20%20%20%20%20%20%20%20%20System.out.println("Test");%20%20%20%20%20%20%20%20}%20%20%20%20}%20%20%20%20public%20void%20methodTwo()%20{%20%20%20%20%20%20%20%20testBool%20=%20false;%20%20%20%20%20%20%20%20while%20(testBool)%20{}%20%20%20%20}}補充說明:abstract不能和其他任何非訪問修飾符同時使用;volatile和final不能同時使用;synchronized和strictfp不能同時使用;abstract%20和%20native%20修飾的方法沒有方法體;當一個類包含abstract方法時,此類必須定義為abstract;參考資料:http://www.runoob.com/java/java-modifier-types.html長按關注「我在編程」多看 | 多想 | 多練實踐是檢驗真理的唯一標準
新聞熱點
疑難解答