引言
Java 的變量有三種,分別是局部變量、成員變量和靜態變量,作為 Java 初學者經常容易搞暈,這篇博客文章就談一談這三種變量的區別,希望對你有所幫助。
成員變量
Java 中基本單位是類,定義一個類包括類的屬性和行為,即類的成員變量和成員方法,如下:
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 + "轎車在馬路上行駛着");
}
}
局部變量
Java 中的局部變量是指在類的方法中定義的變量,如下:
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 name = "寶馬"; //局部變量
System.out.println(this.numLuntai+ "個輪子的" +this.color + "轎車在馬路上行駛着");
}
}
靜態變量
由static修飾的變量稱為靜態變量,其實質上就是一個全局變量。如果某個內容是被所有對象所共享,那么該內容就應該用靜態修飾;沒有被靜態修飾的內容,其實是屬於對象的特殊描述。
class Person{
//成員變量,實例變量
String name;
//靜態變量,類變量
//所有對象共享的屬性用static修飾
static String country = "CN";
public void show(){
System. out.println(country + ":" + name);
//等效語句:System.out.println(Person.country+ ":" + this.name);
}
}
class StaticDemo{
public static void main(String[]args){
Personp = new Person();
System. out.println(p.country);
//可以用類名直接調用
System. out.println(Person.country);
}
}
結果:
CN
CN
成員變量和局部變量的區別
成員變量:
-
①成員變量定義在類中,在整個類中都可以被訪問。
-
②成員變量隨着對象的建立而建立,隨着對象的消失而消失,存在於對象所在的堆內存中。
-
③成員變量有默認初始化值。
局部變量:
-
①局部變量只定義在局部范圍內,如:函數內,語句內等,只在所屬的區域有效。
-
②局部變量存在於棧內存中,作用的范圍結束,變量空間會自動釋放。
-
③局部變量沒有默認初始化值
在使用變量時需要遵循的原則為:就近原則
首先在局部范圍找,有就使用;接着在成員位置找
成員變量和靜態變量的區別
1、兩個變量的生命周期不同
-
成員變量隨着對象的創建而存在,隨着對象被回收而釋放。
-
靜態變量隨着類的加載而存在,隨着類的消失而消失。
2、調用方式不同
-
成員變量只能被對象調用。
-
靜態變量可以被對象調用,還可以被類名調用。
3、別名不同
-
成員變量也稱為實例變量。
-
靜態變量也稱為類變量。
4、數據存儲位置不同
-
成員變量存儲在堆內存的對象中,所以也叫對象的特有數據。
-
靜態變量數據存儲在方法區(共享數據區)的靜態區,所以也叫對象的共享數據。
總結
成員變量、局部變量、靜態變量的區別
盡管三者的本質都是變量,可是使用時卻有相當大的區別,稍不留神就可能陷入陷阱。且先記住:在一個類中,如果一個變量能夠用來描述一個類的屬性,那就定義為成員變量,否則,它就應該定義為局部變量。而如果一個變量在全局中都能使用(某個內容是被所有對象所共享),那么我們就可以把這個變量用static來修飾,即為靜態變量。