1. 程式人生 > >訪問修飾符和型別限定修飾符

訪問修飾符和型別限定修飾符

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
        new
OuterClass.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();
    }
}