一、靜態變量
在之前我們學習了變量可以分為局部變量(方法中定義的)和成員變量(成員變量是在類中定義的),其中成員變量又可以細分為兩種:靜態變量和實例變量。
靜態變量是使用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全家桶、設計模式、分布式及面試資料、開源項目,助力開發者成長!
歡迎關注微信公眾號:碼邦主