java基礎01 存取控制,static、final和static final

來源:互聯網
上載者:User

標籤:通過   dss   轉換   strong   hit   extend   java基礎   替換   method   

目錄

[TOC]

1. 修飾符(存取控制)

default: 是不寫存取控制符

2. static關鍵字2.1 用法

修飾屬性、方法等

2.2 static方法2.2.1 static方法特點
  1. 被聲明為static的成員在記憶體中只儲存了一份,儲存在方法區中
  2. 被聲明為static的成員會在類載入的時候載入進記憶體,而其他非靜態成員是在建立對象的時候才會去分配記憶體
  3. 被static修飾的成員可以直接通過類名來訪問,因為它們不依賴於對象。類名.方法類名.屬性
  4. 對於一些不常改變的對象可以聲明成靜態成員,這樣就可以共用這一份資源,而且不會浪費記憶體
  5. 一些工具方法適合聲明成靜態,因為可以直接拿來調用,更方便,但是不是所有的方法都適合聲明成靜態,因為靜態成員的生命週期長
  6. 對於靜態變數,可以通過類名和引用來訪問,建議通過類名來訪問,不建議通過引用來訪問
  7. 靜態方法,沒有隱式this,所以在靜態方法中無法方位執行個體中的變數,方法。執行個體方法傳入了隱式this,可以訪問執行個體的屬性和變數
  8. 靜態方法應用情境: 操作與參數有關於對象無關(對對象屬性沒有做操作)時,定義為靜態方法,例如Arrays.sort()。也就是說static方法的作用在於提供一些"工具方法"和"Factory 方法"
2.2.2 案例
package src.basic.language;import java.util.HashSet;import java.util.Iterator;/* * 這個類主要講了Static關鍵字的用法 * */public class StaticKeywords {    static int paramStatic = 0;    int paramClass;    public static void main(String [] args) {        HashSet<String> set = new HashSet<String>();        set.add("滾滾");        set.add("加油");        set.add("向前滾");                // 對於static的方法、屬性,可以不對類進行執行個體化,也可以調用        StaticKeywords.traverSetWithList(set);        StaticKeywords.traverseWithIterator(set);                // 被聲明為static的成員在記憶體中只儲存了一份,如果在一個地方修改了這個靜態變數的值,那麼其他對象引用這個屬性的值也會做對應的修改                /*         * 這裡例子省略,可以在備調用的類中聲明一個static變數,之後在本類中執行個體化兩個這個類型的變數來做觀察         * */    }        public static void traverSetWithList(HashSet <String> set) {        Object [] objs = set.toArray();        for (Object obj : objs) {            System.out.println(obj);            set.add("再滾一次");        }        System.out.println();            }        public static void traverseWithIterator(HashSet <String> set) {        // 在靜態方法中,沒有飲食的傳入this,下面這條語句報錯        // this.paramClass = 1;                // 靜態屬性通過類名.屬性來確定        StaticKeywords.paramStatic = 20;                Iterator<String> itr = set.iterator();        while(itr.hasNext()) {            System.out.println(itr.next());        }        System.out.println();    }        public void testStatic() {        this.paramClass = 20;        StaticKeywords.paramStatic = 30;    }    }
2.3 static塊

        屬於類的代碼塊,在類載入期間執行的代碼塊,只執行一次,可以用來在軟體中載入靜態資源

應用情境:

  1. 常常用於載入靜態資源(圖片、音頻等)
2.3.1 案例
public class StaticKeywords {    // 定義了一個靜態塊    static {        // 儲存在方法區中,在類載入的時候執行的代碼塊        System.out.println("靜態塊執行");    }        public static void main(String [] args) {    }}// 執行結果    靜態塊執行    // main函數中沒有任何代碼,但是還是列印了靜態塊的語句,說明靜態塊在所有類執行個體化之前執行
3. final關鍵字

        final修飾的成員變數以及方法,都不能改變

  1. 修飾變數:變數不能被改變
    1. final修飾成員變數的兩種方式:
      1. 聲明的同時初始化
      2. 構造方法中初始化
    2. final修飾方法變數
      1. final修飾方法變數時,定義時可以不用賦值,只需要在使用前賦值即可,賦值之後不可修改
  2. 修飾方法:方法不能被重寫
  3. 修飾類:類不能被繼承,但是可以繼承其他類
    ```Java
    package src.basic.language;

public class KeyWordsFilnal {
// 聲明的同時修飾變數
final int a = 5;

// 聲明的同時若沒有初始化,要在建構函式中初始化final int b;public KeyWordsFilnal() {    // TODO Auto-generated constructor stub    // 構造方法中初始化    b = 10;}void finalParam() {    // 在類方法中,    final int c;    // 報錯,使用之前要賦值    // System.out.println(c);    c = 6;    // 報錯    // c = 7;}final void finalMethod() {}public  static void main(String [] args) {    KeyWordsFilnal obj = new KeyWordsFilnal();}

}

// final的類可以繼承其他的類
final class KeyWordsFinalChild extends KeyWordsFilnal{
// 報錯,final修飾的方法不能被重寫
// void finalMethod() {}
}

// 報錯,final修飾的類不能繼承
// class KeyWordsFinalGrandChild extends KeyWordsFinalChild{}
```

4. static final常量

        由static final修飾的成員變數成為常量,必須在聲明的同時初始化,不可以被改變。由static final修飾的常量會在編譯期間被替換。

4.1 規則和建議
  1. static public修飾的變數必須在聲明時就賦值
  2. 訪問static public修飾的常量和static關鍵字修飾的靜態變數相同
  3. static public修飾的常量不可改變
  4. 建議常量所有字母都大寫
  5. 在編譯時間會自動替換為具體的值,相當於C和C++裡面的宏,執行效率較高
4.2 案例
package src.basic.language;class KeywordsStaticFinal {    public static void main(String [] args) {        // 在編譯時間,程式還未執行前,KeywordsStaticFinal.PI被替換為3.14159        // 這句話和System.out.println(3.14159)是一樣的,由於少了一步轉換的操作,使用常配量序運行效率更高        System.out.println(KeywordsStaticFinal.PI);    }        public static final double PI= 3.14159;        // 編譯錯誤,static public修飾的變數必須在聲明時就賦值    // public staic final int NUM;}

java基礎01 存取控制,static、final和static final

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.