Java靜態變量和實例變量

1、靜態變量

在以前咱們學習了變量能夠分爲局部變量(方法中定義的)和成員變量(成員變量是在類中定義的),其中成員變量又能夠細分爲兩種:靜態變量和實例變量。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次。這樣的就增大了工做量,不方便代碼的維護,此時最好的作法是將學校信息聲明爲靜態變量,以後靜態變量是每一個對象共享的,只須要在一個地方進行修改其餘對象也會共享到修改的數據。spring

 

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:觀察代碼分佈式

發現了靜態屬性(靜態變量)能夠使用「類名.屬性名」的方式引用(因此還被叫作類變量),還能夠使用「對象名.屬性名」的方式引用,可是普通的屬性(實例變量)不能使用「類名屬性名」的方式引用。學習

靜態變量沒有實例化對象(建立對象)也能夠訪問,因此咱們把靜態變又叫作類變量,非靜態屬性須要實例化對象以後才能訪問,因此他叫作實例變量。spa

 

DEMO:記住設計

package com. bai . demo;
public class Student {
   //爲了咱們方便操做數據暫時不定義爲私有屬性(嚴格來講是要定義爲私有屬性的)
   String name;//實例變量 需 要先建立對象以後才能經過「對象名.屬性名」方式訪問
   int    age; //實例變量 須要先建立對象以後才能經過「對象名.屬性名」方式訪問
   static String   school;//靜態變量,屬於類的,使用該類建立的對象共享,能夠使用「類名.
屬性名」的方式訪問
}

 

總結:3d

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

二、靜態變量能夠使用「類名.屬性名」和「對象名.屬性名」的方式訪問,因此靜態變量又叫作類變量

三、非靜態變量只能使用「對象名.屬性名」的方式訪問,依賴於對象(實例)存在,因此叫作實例變量。

 

 

 

 

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


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

 

相關文章
相關標籤/搜索