實例/靜態變量、局部變量和常量的定義及其作用域


實例變量屬於類的某個特定實例,靜態變量屬於類,因為它們的作用域在整個類中都是可用的,所以也被稱為全局變量。在類中定義實例變量或靜態變量時,可以放在任何位置。但為了美觀規范,設計類時最好統一放在類中的最前面。

public class Testvariable {
    int a; //實例變量
    static int b; //靜態變量    
    //不能聲明后,單獨賦值
    a = 5; //error
    b = 5; //error
}

因為不符合語法規則, 賦值語句這個操作要放在語句塊中才能執行。但可以聲明變量后直接賦值進行初始化:

    int a = 5; //實例變量
    static int b = 5; //靜態變量

實例變量和靜態變量

實例變量屬於類的某個特定實例,每一個對象對實例變量的操作都不會影響到其他對象的實例變量,它們之間毫無關系。 但靜態變量屬於類,為所有對象所共享,當某個對象對靜態變量修改時,其他對象會受其影響。

public class Testvariable {
    int a = 5; //實例變量
    static int b = 10; //靜態變量
    public static void main(String[] args) {
    Testvariable t1 = new Testvariable();
    Testvariable t2 = new Testvariable();
    t1.a = 6;
    t2.a = 7;
    //對象修改實例變量只會影響它本身的實例變量值
    System.out.println(t1.a); // 6
    System.out.println(t2.a); // 7
    
    System.out.println(t1.b); //10
    //t2對象修改靜態變量,會影響到t1對象
    t2.b = 12;
    System.out.println(t1.b); // 12
}

這里僅介紹實例變量與靜態變量的區別,關於static的使用和對象的創建細節這里不作過多討論。

 

局部變量

如果一個變量不是在類中定義,而是在某個語句塊或方法中,則該變量就是局部變量。局部變量的作用范圍: 從定義該局部變量開始,直到所處的塊結束。因為局部變量的作用域特性,所以無法使用訪問權限修飾符,包括static修飾符。

相比於全局變量,局部變量沒有默認值,必須手動進行初始化賦值。局部變量的生命周期取決於所處的塊,當方法執行結束或語句塊結束,其中的局部變量就會被釋放。

在main方法中定義的變量也是局部變量,如下:

	public static void main(String[] args) {
		//error,Illegal modifier for parameter a; only final is permitted
		public int a = 5; 
		//局部變量沒被初始化,不能使用。
		int a;
		System.out.println(a); //error
		
		//正確定義局部變量
		int b = 5;
	}

  

for循環語句塊中定義的初始條件變量,也是局部變量:

        int[] a = new int[5];
        for(int i = 0; i <a.length; i++ ) {
            //...
        }
        System.out.println(i); //for循環語句塊中定義的i變量僅限於該塊中使用

 注意:如果定義的局部變量和全局變量同名,則在該塊中優先使用局部變量。也可以通過this調用同名實例變量或者類名調用同名靜態變量。但定義局部變量時,最好不要和全局變量同名,避免引起混淆。

public class Testvariable {
    public String str = "實例變量str";
    public static String staStr = "靜態變量staStr";
    public static void main(String[] args) {
        test();
    }
    public static void test() {
        String str = "局部變量str";
        String staStr = "局部變量staStr";
        System.out.println(str);      //局部變量str
        System.out.println(staStr);    //局部變量staStr
        System.out.println(new Testvariable().str); //實例變量str。靜態方法中,this與super無法使用
        System.out.println(Testvariable.staStr); //靜態變量staStr
    }
}

 

常量

變量表示變化的值,常量表示常久不變的值。在程序運行時,變量的值會根據不同的情況進行改變,而常量則不會被改變。

變量 :variableType  name = value;     常量 :static final variableType  NAME = value;  常量名建議大寫。  final可以用於修飾類、方法和變量,用於標識不可更改。

定義常量時,修飾符一般為public static final , 表明該常量是公開的,隨着類加載而加載,只分配一次內存,並且被類的所有對象共享,使用時直接類名.常量名。 因為是常量,所以無需擔心值被對象修改。若不用static修飾常量,類創建實例后,才能調用實例常量,並且每次都要為該常量重新分配內存。

public class Testvariable {
    public final int MIN = 15; //實例常量
    public static final int MAX = 100; //靜態常量
    public static void main(String[] args) {
        //類名.常量
        System.out.println(Testvariable.MAX);
        
        //創建實例,才能調用實例常量
        Testvariable t = new Testvariable();
        Testvariable t2 = new Testvariable();
        System.out.println(t.MIN);
        System.out.println(t2.MIN);
    }
}

static final  與 final的修飾區別之分,孰優孰劣,一目了然。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM