一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - 淺析Java中局部變量與成員變量同名解決技巧

淺析Java中局部變量與成員變量同名解決技巧

2020-05-28 13:40daisy JAVA教程

在剛開始學習Java的時候,就了解了Java基礎中的變量,雖然知道這個以后會經常用到,但沒想到了基本語法這里,竟然又冒出來了成員變量和局部變量。變來變去太容易讓人搞暈了,今天我們就挑揀出來梳理一下!

要想區分這哥倆,首先,我們得知道它們分別是什么。先從成員變量下刀。

成員變量

       我們來研究一個事物:

               屬性:外在特征;例如人的身高,體重

               行為:能夠做什么;例如人有說話,打球等行為。

       而在Java語言中,最基本的單位是類,類就是用來體現事物的。

       用類class來描述事物也是如此:

               屬性:對應類中的成員變量

               行為:對應類中的成員函數

       定義類其實就是在定義類中的成員(成員變量和成員函數)

      拓展:類是一個抽象的概念,而對象就是類的具體的存在,體現。例如:生活中的汽車,可以看做一個類,我們稱之為汽車類,每一臺車都有顏色和輪胎數(可以定義為屬性,即成員變量),每一臺車都可以跑(即車的行為,對應類總的成員函數),我們把汽車實例化一下,即會產生一個對象,比如奔馳、寶馬(BMW)。

Demo1:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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即是局部變量。

                  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
publicclass 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個輪子的黑色寶馬牌轎車在馬路上行駛著

成員變量和局部變量的區別

       成員變量:

          ①成員變量定義在類中,在整個類中都可以被訪問。

          ②成員變量隨著對象的建立而建立,隨著對象的消失而消失,存在于對象所在的堆內存中。

          ③成員變量有默認初始化值。

      局部變量:

          ①局部變量只定義在局部范圍內,如:函數內,語句內等,只在所屬的區域有效。

          ②局部變量存在于棧內存中,作用的范圍結束,變量空間會自動釋放。

          ③局部變量沒有默認初始化值

      在使用變量時需要遵循的原則為:就近原則

      首先在局部范圍找,有就使用;接著在成員位置找。

看到這里可能有點懵,下面給大家整理個示例,仔細想想其實特別簡單。

先來看一個簡單的代碼。

首先我定義了一個Person類。

?
1
2
3
4
5
6
7
8
9
10
11
public class Person {
 private int age=1000;//定義成員變量,年齡為1000
 
 public void setAge(int age) {
 age=age;
 System.out.println("方法內的年齡"+age);
 }
 public void sayHello() {
 System.out.println("我的年齡是"+age+".");
 }
}

然后在主函數里面創建對象并輸出。

?
1
2
3
Person p=new Person();
p.setAge(20);
p.sayHello();

輸出結果是什么?并不是我們想象的我的年齡是20,而是下面這樣:

?
1
2
//方法內的年齡20
//我的年齡是1000.

想一下其實就很容易理解。

一句話,如果不同名,那么方法內的變量名代表成員變量;如果同名,那么方法內的變量名就只表示局部變量了,和成員變量一毛錢關系都沒有了。

所以,首先當我們創建了一個Person對象p,在創建對象的時候就已經完成了成員變量的初始化了。成員變量age的初始值是1000。

當我們p.setAge(20)的時候,其實這個20只在setAge這個方法內起作用,所以輸出了方法內年齡20,執行完這句話后,20就被銷毀了。

然后執行sayHello,它里面的age代表的是成員變量的值,所以依舊是1000。

到這里如果還是不能理解,可以自己寫代碼看輸出結果體會下。

那么,當同名的時候,我們就是要讓這個變量名表示成員變量,有沒有辦法呢?

那就要說到this關鍵字了。我們把Person類改成這樣:

?
1
2
3
4
5
6
7
8
9
10
11
public class Person {
 private int age=1000;
 
 public void setAge(int age) {
 this.age=age;
 System.out.println("方法內的年齡"+age);
 }
 public void sayHello() {
 System.out.println("我的年齡是"+age+".");
 }
}

 

再運行代碼,發現代碼運行結果變成了下面這樣:

?
1
2
//方法內的年齡20
//我的年齡是20.

this表示的是當前對象。

this.age在這里具體表示p對象的age(即p對象的成員變量age)的值是20。

盡管兩者的本質都是變量,可是使用時卻有相當大的區別,稍不留神就可能陷入陷阱。且先記住:在一個類中,如果一個變量能夠用來描述一個類的屬性,那就定義為成員變量,否則,它就應該定義為局部變量。不能理解的話就多寫寫代碼就能理解了。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲欧美日韩一区成人 | 视频在线欧美 | 亚洲网红精品大秀在线观看 | 91视频www| 欧美爽妇 | 性xxxx中国老妇506070 | 日韩欧美中文字幕出 | 亚洲视频一区在线播放 | 日本在线视频播放 | 扒开双腿疯狂进出爽爽动态图 | 西西人体大胆啪啪私拍色约约 | 国产99在线a视频 | 免费一级生活片 | 五月天综合久久 | 美女扒开屁股让男人进去 | 国产美女屁股直流白浆视频无遮挡 | 免费看国产精品麻豆 | 国产精品亚欧美一区二区三区 | 69堂最新地域网名 | juliaann主妇疯狂 | 亚洲免费高清视频 | 久久中文字幕免费高清 | 四虎网址 | 国产亚洲小视频 | chaopeng在线观看 | 亚欧成人中文字幕一区 | 白丝爆动漫羞羞动漫软件 | 国产在线播放一区 | 国产精品一区牛牛影视 | 国产中文在线视频 | gay小太正初精 | 色久久一个亚洲综合网 | 国产成人无精品久久久 | 无遮挡h肉动漫在线观看电车 | 欧美人妖另类性hd | 四虎精品永久在线网址 | 99这里只有精品66视频 | 九九热精品免费观看 | 无套日出白浆在线播放 | 国产性tv国产精品 | 欧美日韩亚洲国内综合网俺 |