我們來研究一個事物:
屬性:外在特征;例如人的身高,體重
行為:能夠做什么;例如人有說話,打球等行為。
而在Java語言中,最基本的單位是類,類就是用來體現事物的。
用類class來描述事物也是如此:
屬性:對應類中的成員變量
行為:對應類中的成員函數
定義類其實就是在定義類中的成員(成員變量和成員函數)
拓展:類是一個抽象的概念,而對象就是類的具體的存在,體現。例如:生活中的汽車,可以看做一個類,我們稱之為汽車類,每一臺車都有顏色和輪胎數(可以定義為屬性,即成員變量),每一臺車都可以跑(即車的行為,對應類總的成員函數),我們把汽車實例化一下,即會產生一個對象,比如奔馳、寶馬(BMW)。
Demo1:
1
2
3
4
5
6
7
8
9
10
11
12
|
public class Car { private String color; // 定義汽車顏色,全局變量 private int numLuntai; // 定義汽車輪胎數,全局變量 public Car(String color, int numLuntai){ super (); this .color = color; this .numLuntai = numLuntai; } public void run() { System.out.println( this .numLuntai+ "個輪子的" + this .color + "轎車在馬路上行駛著" ); } } |
1
2
3
4
5
6
|
public class ClassTest { public static void main(String[] args){ Car bmw = new Car( "黑色" , 4 ); // 創建一個轎車對象,名字為bmw bmw.run(); } } |
運行結果:
4個輪子的黑色轎車在馬路上行駛著
其中color和numLuntai就稱為Car 類的成員變量,這個屬性能夠用來描述一個類的屬性,否則,它就應該定義為局部變量。
例如一個for循環中的i即是局部變量。
1
2
3
|
for ( int i = 0 ; i < args.length; i++) { ...... } |
又例如寫在成員方法中變量是局部變量。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
Public class Car { private String color; // 定義汽車顏色,全局變量 private int numLuntai; // 定義汽車輪胎數,全局變量 public Car(String color, int numLuntai){ super (); this .color = color; this .numLuntai = numLuntai; } public void run() { String carName=”寶馬牌”; //這個就是局部變量 System.out.println( this .numLuntai+ "個輪子的" + this .color + carName+ "轎車在馬路上行駛著" ); } } publicclass ClassTest { public static void main(String[] args){ Car bmw = new Car( "黑色" , 4 ); // 創建一個轎車對象,名字為bmw bmw.run(); } } |
結果:
4個輪子的黑色寶馬牌轎車在馬路上行駛著
成員變量和局部變量的區別
成員變量:
①成員變量定義在類中,在整個類中都可以被訪問。
②成員變量隨著對象的建立而建立,隨著對象的消失而消失,存在于對象所在的堆內存中。
③成員變量有默認初始化值。
局部變量:
①局部變量只定義在局部范圍內,如:函數內,語句內等,只在所屬的區域有效。
②局部變量存在于棧內存中,作用的范圍結束,變量空間會自動釋放。
③局部變量沒有默認初始化值
在使用變量時需要遵循的原則為:就近原則
首先在局部范圍找,有就使用;接著在成員位置找。
列表對比:
成員變量、局部變量的區別
|
成員變量
|
局部變量
|
定義位置
|
在類中,方法外
|
方法中,或者方法的形式參數
|
初始化值
|
有默認初始化值
|
無,先定義,賦值后才能使用
|
調用方式
|
對象調用
|
---
|
存儲位置
|
堆中
|
棧中
|
生命周期
|
與對象共存亡
|
與方法共存亡
|
別名
|
實例變量
|
---
|
小結:
盡管兩者者的本質都是變量,可是使用時卻有相當大的區別,稍不留神就可能陷入陷阱。且先記?。涸谝粋€類中,如果一個變量能夠用來描述一個類的屬性,那就定義為成員變量,否則,它就應該定義為局部變量。
以上所述是小編給大家介紹的Java成員變量與局部變量(動力節點Java學院整理),希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的,在此也非常感謝大家對服務器之家網站的支持!