筆記六 Java 變量類型

筆記六 Java 變量類型

1. 局部變量

  1. 局部變量聲明方法構造方法或者語句塊中;
  2. 局部變量在方法構造方法、或者語句塊執行的時創建,當它們執行完成後變量將會被銷燬
  3. 訪問修飾符不能用於局部變量;
  4. 局部變量是在棧上分配的。
  5. 局部變量沒有默認值,所以局部變量被聲明後,必須經過初始化,纔可以使用
package note6.partvariable;

import java.util.function.Consumer;

/**
 * @author Calvin
 * @titile: 局部變量
 * @date 2019/2/22
 * @since 1.0
 */

/**
 *  JVM:
 *      1.執行的時 -> 創建
 *      2.執行完   -> 被銷燬
 *      3.局部變量是在棧上分配的。
 */
public class PartVariable {

    PartVariable(){

        // 聲明: 在構造方法
        int b = 1;

    }

    public void partVariableDefine(){

        // 聲明: 在方法 (局部變量沒有默認值,所以局部變量被聲明後,必須經過初始化,纔可以使用。)
        Integer a; // 包裝類默認值爲 null

        Consumer consumer = (o) -> {

            // 聲明: 語句塊中
            int c = 5; // 默認值 爲0
            o = c;
        };

        // 注意: 訪問修飾符不能用於局部變量 (Modifier 'private' not allowed here)
        //private int d;
    }
}

2. 實例變量

  1. 實例變量聲明在一個類中,但在方法、構造方法和語句塊之外;

  2. 實例變量在對象創建的時候創建,在對象被銷燬的時候銷燬

  3. 實例變量的值應該至少被一個方法、構造方法或者語句塊引用,使得外部能夠通過這些方式獲取實例變量信息

  4. 訪問修飾符可以修飾實例變量;

  5. 實例變量對於類中的方法、構造方法或者語句塊是可見的

  6. 一般情況下應該把實例變量設爲私有。通過使用訪問修飾符可以使實例變量對子類可見;

  7. 實例變量具有默認值

    1. 數值型變量的默認值是0
    2. 布爾型變量的默認值是false
    3. 引用類型變量的默認值是null。
  8. 實例變量可以直接通過變量名訪問。但在靜態方法以及其他類中,就應該使用完全限定名:ObejectReference.VariableName。

package note6.partvariable.instancevariable;

/**
 * @author Calvin
 * @titile: 實例變量
 * @date 2019/2/23
 * @since 1.0
 */
public class InstanceVariable {

    // 1.聲明: 在一個類中,但在方法、構造方法和語句塊之外;
    // 1.1 訪問修飾符可以修飾實例變量;
    private String name;

    // 2.實例變量具有默認值
    private int intVariable;
    private Boolean flag;
    private Object o;


    // 1.4 至少被一個方法、構造方法或者語句塊引用, 使得外部能夠通過這些方式獲取實例變量信息;
    public static void main(String[] args) {
        InstanceVariable instanceVariable = new InstanceVariable();
        // 1.2 JVM 對象創建時 -> 創建
        System.out.println(instanceVariable.name);
        // 1.3 JVM 對象被銷燬的時候 -> 銷燬

        // 2.1 數值型變量的默認值是 0
        System.out.println(instanceVariable.intVariable);
        // 2.2 布爾型的默認值是 false
        System.out.println(instanceVariable.flag);
        // 2.3 引用類型的默認值是 null
        System.out.println(instanceVariable.o);
    }
}

3. 類變量(靜態變量)

  	 1. 類變量也稱爲**靜態變量**,
        		 1. 在類中以**static關鍵字**聲明,但**必須在方法構造方法和語句塊之外**。
  	 2. 靜態變量儲存在**靜態存儲區**。**經常被聲明爲常量**,很少**單獨使用static聲明變量**。
  	 3. 靜態變量在**程序開始時創建**,在**程序結束時銷燬**。
  	 4. 與實例變量具有相似的可見性。但爲了對類的使用者可見,**大多數靜態變量聲明爲public類型**。
  	 5. 默認值和實例變量相似。
        		 1. 數值型變量默認值是0,
        		 2. 布爾型默認值是false,
        		 3. 引用類型默認值是null。
        		 4. 變量的值可以在聲明的時候指定,**也可以在構造方法中指定**。
        		 5. 此外,靜態變量還可以在**靜態語句塊中初始化**。
  	 6. 靜態變量可以通過:ClassName.VariableName的方式訪問。
  	 7. 類變量被聲明爲**public static final類型時**,類變量名稱**一般建議使用大寫字母**。
        		 1. 如果**靜態變量不是public和final類型**,其命名方式與實例變量以及局部變量的命名方式一致。
package note6.classVariable;

import java.sql.SQLOutput;

/**
 * @author Calvin
 * @titile: 類變量 (靜態變量)
 * @date 2019/2/23
 * @since 1.0
 */
public class ClassVariable {

    // 1. 在類中以static關鍵字聲明,但必須在方法構造方法和語句塊之外。
    private static String staticVariableForString;


    // 2. 儲存在靜態存儲區,經常被聲明爲常量,很少單獨使用static聲明變量。
    private static int  staticVariableForInt;
    private static Boolean staticVariableForBoolean;
    private static Object object;

    /**
     * 2.1 類變量默認值
     */
    public static void defaultValue(){
        // 引用類變量 -> 默認值 null
        System.out.println(staticVariableForString);
        // 數值型類變量 -> 默認值 0
        System.out.println(staticVariableForInt);
        // 布爾型類變量 -> false
        System.out.println(staticVariableForBoolean);
    }


    /**
     * 2.2 靜態變量還可以在靜態語句塊中初始化
     */
    static{
         staticVariableForInt = 1;
         staticVariableForBoolean = Boolean.TRUE;
         object = "引用類型";
    }

    /**
     * 2.3 類變量被聲明爲public static final類型時,類變量名稱一般建議使用大寫字母。
     */
    public static final String FINAL_STATIC_VARIABLE_FOR_STRING = "最終靜態變量";

    public static void main(String[] args) {
        // 1.靜態變量在程序開始時創建,在程序結束時銷燬。
        System.out.println(ClassVariable.staticVariableForString);
        // 1.1 類變量默認值
        ClassVariable.defaultValue();
        // 1.3 最終靜態變量
        System.out.println(ClassVariable.FINAL_STATIC_VARIABLE_FOR_STRING);
    }
}

4.程序運行時的區別

  1. 實例變量屬於某個對象的屬性,必須創建了實例對象,其中的實例變量纔會被分配空間才能使用這個實例變量
    ​2. 靜態變量不屬於某個實例對象,而是屬於類,所以也稱爲類變量,只要程序加載了類的字節碼,不用創建任何實例對象,靜態變量就會被分配空間靜態變量就可以被使用了

GitHub

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章