筆記六 Java 變量類型
1. 局部變量
- 局部變量聲明在方法、構造方法或者語句塊中;
- 局部變量在方法、構造方法、或者語句塊被執行的時候創建,當它們執行完成後,變量將會被銷燬;
- 訪問修飾符不能用於局部變量;
- 局部變量是在棧上分配的。
- 局部變量沒有默認值,所以局部變量被聲明後,必須經過初始化,纔可以使用。
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. 實例變量
實例變量聲明在一個類中,但在方法、構造方法和語句塊之外;
實例變量在對象創建的時候創建,在對象被銷燬的時候銷燬;
實例變量的值應該至少被一個方法、構造方法或者語句塊引用,使得外部能夠通過這些方式獲取實例變量信息;
訪問修飾符可以修飾實例變量;
實例變量對於類中的方法、構造方法或者語句塊是可見的。
一般情況下應該把實例變量設爲私有。通過使用訪問修飾符可以使實例變量對子類可見;
實例變量具有默認值。
- 數值型變量的默認值是0,
- 布爾型變量的默認值是false,
- 引用類型變量的默認值是null。
實例變量可以直接通過變量名訪問。但在靜態方法以及其他類中,就應該使用完全限定名: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.程序運行時的區別
- 實例變量屬於某個對象的屬性,必須創建了實例對象,其中的實例變量纔會被分配空間,才能使用這個實例變量。
2. 靜態變量不屬於某個實例對象,而是屬於類,所以也稱爲類變量,只要程序加載了類的字節碼,不用創建任何實例對象,靜態變量就會被分配空間,靜態變量就可以被使用了