Java靜態變量和實例變量


一、靜態變量

在之前我們學習了變量可以分為局部變量(方法中定義的)和成員變量(成員變量是在類中定義的),其中成員變量又可以細分為兩種:靜態變量和實例變量。

靜態變量是使用static 修飾的成員變量(屬性)就是靜態變量,靜態變量保存在一塊共享空間(方法區),這個區叫做全局數據區,保存在這個區的數據是共享的。,到目前為止我們見過了哪些內存空間啊?堆、棧、方法區(保存static修飾的變量或者方法信息)

DEMO:觀察代碼

 package com. bai . demo;
public class Student {
      //為 了我們方便操作數據暫時不定義為私有屬性(嚴格來說是要定義為私有屬性的)
      String name;
      int    age ;
      String school;
}
   package com. bai . demo;
public class Hello {
   public static void main(String[] args) {
       //創建第一個學生對象
      Student    s1=new Student();
      s1. name="李四";
      s1. age=19;
      s1. school="南京大學";
      //創建第二個學生對象.
      Student   s2=new   Student();
      s2. name="張三";
      s2. age=20;
      s2.school1="南京大學";
      //創建第三個學生對象
      Student s3=new Student( );
      s3. name="趙柳" ;
      s3.age=17;
      s3. school="南京大學";
      System. out. println("第- -個學生信息:名字---》 "+s1.name+" ,年齡---》"+s1.age+"學
校----》"+s1. school);
      System. out . println("第二個學生信息:名字---》"+s2.name+", 年齡---》"+s2.age+"學
校----》"+s2. school);
      System. out . println("第三個學生信息:名字---》"+s3. name+",年齡---》"+s2. age+"學
校----》"+s3. school);
     }
  }

 

思考:假如有一千個學生對象,但是所有學生的學校信息都是一樣的,此時如果要將所有學生的學校信息進行修改,則要在每個對象中修改,要修改1000次。這樣的就增大了工作量,不方便代碼的維護,此時最好的做法是將學校信息聲明為靜態變量,之后靜態變量是每個對象共享的,只需要在一個地方進行修改其他對象也會共享到修改的數據。

 

DEMO:聲明為靜態變量

 

  package com. bai . demo;
public class Student {
    //為了我們方便操作數據暫時不定義為私有屬性(嚴格來說是要定義為私有屬性的)
    String  name ;
    int    age ;
    static String school;
}
  package com. bai. demo;
public class Hello {
    public static void main(String[] args) {
       //創建第-一個學生對象
       Student    s1=new Student();
       s1. name="李四";
       s1.age=19;
       s1. school="北京大學";
       //創建第二個學生對象
       Student s2=new Student();
       s2. name="張三";
       s2. age=20;
       //創建第三個學生對象
       Student s3=new Student();
       s3. name="趙柳" ;
       s3. age=17 ;
       System. out. println("第- -一個學生信息:名字---》"+s1. name+",年齡---》"+s1. age+"學
校----》"+s1. school);
       System. out . println("第二個學生信息:名字--》"+s2.name+" ,年齡---》"+s2.age+"學
校----》"+s2. school);
       System. out. println("第三個學生信息:名字---》 "+s3.name+", 年齡---》"+s2.age+"學
校----》"+s3.school);

 

此時只需要修改一個對象的學校信息就可以影響到其他使用Student類創建學生對象的學校信息。說明了靜態變量是每個使用該類創建的實例對象共享的變量。

DEMO:觀察代碼

發現了靜態屬性(靜態變量)可以使用“類名.屬性名”的方式引用(所以還被叫做類變量),還可以使用“對象名.屬性名”的方式引用,但是普通的屬性(實例變量)不能使用“類名屬性名”的方式引用。

靜態變量沒有實例化對象(創建對象)也可以訪問,所以我們把靜態變又叫做類變量,非靜態屬性需要實例化對象之后才能訪問,所以他叫做實例變量。

 

DEMO:記住

package com. bai . demo;
public class Student {
   //為了我們方便操作數據暫時不定義為私有屬性(嚴格來說是要定義為私有屬性的)
   String name;//實例變量 需 要先創建對象之后才能通過“對象名.屬性名”方式訪問
   int    age; //實例變量 需要先創建對象之后才能通過“對象名.屬性名”方式訪問
   static String   school;//靜態變量,屬於類的,使用該類創建的對象共享,可以使用“類名.
屬性名”的方式訪問
}

 

總結:

1、靜態變量的概念:使用static 修飾的變量就是靜態變量,靜態變量保存在,方法區(全局數據區)

2、靜態變量可以使用“類名.屬性名”和“對象名.屬性名”的方式訪問,所以靜態變量又叫做類變量

3、非靜態變量只能使用“對象名.屬性名”的方式訪問,依賴於對象(實例)存在,所以叫做實例變量。

 

 

 

 

有完整的Java初級,高級對應的學習路線和資料!專注於java開發。分享java基礎、原理性知識、JavaWeb實戰、spring全家桶、設計模式、分布式及面試資料、開源項目,助力開發者成長!


歡迎關注微信公眾號:碼邦主

 


免責聲明!

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



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