在以前咱們學習了變量能夠分爲局部變量(方法中定義的)和成員變量(成員變量是在類中定義的),其中成員變量又能夠細分爲兩種:靜態變量和實例變量。java
靜態變量是使用static 修飾的成員變量(屬性)就是靜態變量,靜態變量保存在一塊共享空間(方法區),這個區叫作全局數據區,保存在這個區的數據是共享的。,到目前爲止咱們見過了哪些內存空間啊?堆、棧、方法區(保存static修飾的變量或者方法信息)面試
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全家桶、設計模式、分佈式及面試資料、開源項目,助力開發者成長!
歡迎關注微信公衆號:碼邦主