java靜態變量和實例變量


1、Static靜態變量

Static是靜態修飾符。

在程序中任何變量或者代碼都是在編譯時,由系統自動分配內存來存儲的,而所謂靜態就是指在編譯后分配的內存會一直存在,直到程序推出時才會釋放內存空間。

在java程序里,所有東西都是對象,而對象的抽象就是類,對於一個類而言,如果要使用他的成員(成員指類中的函數、變量)

普通情況:必須先實例化對象后才能通過對象的引用才能訪問這些成員

例外:該成員是用Static聲明的    (這里所講排除了類的訪問控制)

//未聲明static
class ClassA{
      int b;
      public void ex1(){
      
      }
}


class ClassB{
    void ex2{
       int i;
       ClassA a = new ClassA();
       i = a.b;  //這里通過 對象引用  訪問成員變量b
       a.ex1;   //這里通過  對象引用  訪問成員函數b
    }
}

//聲明為static
class ClassA{
      static int b;    //靜態變量
      static void ex1(){
      
      }
}

class ClassB{
    void ex2{
       int i;
       ClassA a = new ClassA();
       i = ClassA.b;  //這里通過   類  訪問成員變量b
       ClassA.ex1;    //這里通過   類  引用訪問成員函數b
    }
}

通過以上兩種比較,就可以知道static用來修飾類成員的主要作用,在java類庫當中有很多類成員都聲明為static,可以讓用戶不需要實例化對象就可以引用成員,最基本的有Integer.praseInt(),Float.ParseFloat()等等用來把對象的類型轉化為所需要的基本數據類型。

這樣的變量和方法  又叫 類變量 和 類方法。

static修飾后的變量的值。被static修飾后的成員,在編譯時由系統分配一塊內存空間,直到程序停止運行才會釋放。那么就是說該類的所有對象都會共享這塊內存空間。

class TStatic{
    static int i;
    
    public TStatic(){
        i = 4;
    }

    public TStatic(int j){
        i = j;
    }

    public static void main(String args[]){
        TStatic t = new TStatic(5);   //聲明對象引用,並實例化
        TStatic tt = new TStatic();   //同上
    
          System.out.println(t.i);  // 4
            
          System.out.println(tt.i); // 4

          System.out.println(t.i);  // 4
    }
}

在這段代碼里面 TStatic 類 有一個 static 的 int 變量 i,

有兩個構造函數(與類名同名的、且不帶返回值的函數叫做構造函數),第一個初始化i 為4,第二個用於初始化 i 為傳進函數函數的值,在mian函數中所傳的值是5,

在程序中首先聲明對象t,然后調用帶參數的構造函數實例化對象,此時對象t的成員變量i的值是5,

接着聲明對象tt,調用無參數的構造函數,那么就把對象tt的成員變量i的初始化為4了,

在這里i是Static, 該類的所有的對象都共享該內存。

也就是說:實例化對象tt的時候改變了i的值,實際上對象t的i值也改變了,因為實際上他們引用的是同一個成員變量。

最后打印結果是三個4。


2、實例變量

又叫 成員變量、對象變量。

實例變量屬於某個對象的屬性,必須創建了實例對象,其中的實例變量才會被分配空間,才能使用這個實例變量。

   

 

 

 

 

 


免責聲明!

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



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