訪問修飾符和型別限定修飾符
阿新 • • 發佈:2018-11-27
Java 修飾符是用來修飾類、變數、及方法的訪問限定或型別限定,public,protected,private,default,是訪問限定修飾符,static,final,abstract,transient,volatile為型別限定修飾符。
注意:protected修飾後,不同包中的非子類不可訪問
型別限定:顧名思義就是用來限定變數的型別(注意不是資料型別),被其修飾的變數有如下特性
Static關鍵字用法
- 被static關鍵字修飾的方法或者變數不需要依賴於物件來進行訪問,只要類被載入了,就可以通過類名去進行訪問。
- static可以用來修飾類的成員方法、類的成員變數,另外可以編寫static程式碼塊來優化程式效能。
- 既然都沒有物件,就談不上this了。並且由於這個特性,在靜態方法中不能訪問類的非靜態成員變數和非靜態成員方法,因為非靜態成員方法/變數都是必須依賴具體的物件才能夠被呼叫。
- 靜態變數被所有的物件所共享,在記憶體中只有一個副本,它當且僅當在類初次載入時會被初始化
- static是不允許用來修飾區域性變數。修飾方法裡的變數
- static修飾類的時候只能是內部類
- 執行順序:父類靜態程式碼塊--子類靜態程式碼塊--父類構造方法--子類構造器
static修飾類的時候只能是內部類
被static修飾的內部類可以直接作為一個普通類來使用,而不需例項一個外部類(見如下程式碼):
需要注意的是當一個內部類沒有使用static修飾的時候,是不能直接使用內部類建立物件,須要先使用外部類物件點new內部類物件及(外部類物件.new 內部類())
public class OuterClass { public static class InnerClass{ InnerClass(){ System.out.println("============= 我是一個內部類'InnerClass' ============="); } } } public class TestStaticClass { public static void main(String[] args) { // 不需要new一個InnerClass newOuterClass.InnerClass(); } }
如果沒有用static修飾InterClass,則只能按如下方式呼叫:
package inner_class; public class OuterClass { public class InnerClass{ InnerClass(){ System.out.println("============= 我是一個內部類'InnerClass' ============="); } } } public class TestStaticClass { public static void main(String[] args) { // OutClass需要先生成一個例項,然後再new一個InnerClass(); OuterClass oc = new OuterClass(); oc.new InnerClass(); } }