亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2016年07月15日 16:46:15   投稿:daisy  
在剛開(kāi)始學(xué)習(xí)Java的時(shí)候,就了解了Java基礎(chǔ)中的變量,雖然知道這個(gè)以后會(huì)經(jīng)常用到,但沒(méi)想到了基本語(yǔ)法這里,竟然又冒出來(lái)了成員變量和局部變量。變來(lái)變?nèi)ヌ菀鬃屓烁銜灹?,今天我們就挑揀出?lái)梳理一下!

要想?yún)^(qū)分這哥倆,首先,我們得知道它們分別是什么。先從成員變量下刀。

成員變量

       我們來(lái)研究一個(gè)事物:

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

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

       而在Java語(yǔ)言中,最基本的單位是類,類就是用來(lái)體現(xiàn)事物的。

       用類class來(lái)描述事物也是如此:

               屬性:對(duì)應(yīng)類中的成員變量

               行為:對(duì)應(yīng)類中的成員函數(shù)

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

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

Demo1:

public class Car {
 private String color; // 定義汽車顏色,全局變量
 private int numLuntai; // 定義汽車輪胎數(shù),全局變量
 
 public Car(String color, int numLuntai){
   super();
   this.color = color;
   this.numLuntai = numLuntai;
 }
 public void run() {
   System.out.println(this.numLuntai+ "個(gè)輪子的" +this.color + "轎車在馬路上行駛著");
 }
}
public class ClassTest {
 public static void main(String[] args){
   Car bmw = new Car("黑色", 4); // 創(chuàng)建一個(gè)轎車對(duì)象,名字為bmw
   bmw.run();
 }
}

運(yùn)行結(jié)果:

4個(gè)輪子的黑色轎車在馬路上行駛著

      其中color和numLuntai就稱為Car 類的成員變量,這個(gè)屬性能夠用來(lái)描述一個(gè)類的屬性,否則,它就應(yīng)該定義為局部變量。

      例如一個(gè)for循環(huán)中的i即是局部變量。

                  for(int i = 0; i < args.length; i++) {
                          ......
                  }

又例如寫(xiě)在成員方法中變量是局部變量。

publicclass Car {
 private String color; // 定義汽車顏色,全局變量
 private int numLuntai; // 定義汽車輪胎數(shù),全局變量
 public Car(String color, int numLuntai){
   super();
   this.color = color;
   this.numLuntai = numLuntai;
 }
public void run() {
   String carName=”寶馬牌”; //這個(gè)就是局部變量
   System.out.println(this.numLuntai+ "個(gè)輪子的" +this.color + carName+"轎車在馬路上行駛著");
 }
}
publicclass ClassTest {
 public static void main(String[] args){
   Car bmw = new Car("黑色", 4); // 創(chuàng)建一個(gè)轎車對(duì)象,名字為bmw
   bmw.run();
 }
}

結(jié)果:

4個(gè)輪子的黑色寶馬牌轎車在馬路上行駛著

成員變量和局部變量的區(qū)別

       成員變量:

          ①成員變量定義在類中,在整個(gè)類中都可以被訪問(wèn)。

          ②成員變量隨著對(duì)象的建立而建立,隨著對(duì)象的消失而消失,存在于對(duì)象所在的堆內(nèi)存中。

          ③成員變量有默認(rèn)初始化值。

      局部變量:

          ①局部變量只定義在局部范圍內(nèi),如:函數(shù)內(nèi),語(yǔ)句內(nèi)等,只在所屬的區(qū)域有效。

          ②局部變量存在于棧內(nèi)存中,作用的范圍結(jié)束,變量空間會(huì)自動(dòng)釋放。

          ③局部變量沒(méi)有默認(rèn)初始化值

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

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

看到這里可能有點(diǎn)懵,下面給大家整理個(gè)示例,仔細(xì)想想其實(shí)特別簡(jiǎn)單。

先來(lái)看一個(gè)簡(jiǎn)單的代碼。

首先我定義了一個(gè)Person類。

public class Person {
 private int age=1000;//定義成員變量,年齡為1000

 public void setAge(int age) {
 age=age;
 System.out.println("方法內(nèi)的年齡"+age);
 }
 public void sayHello() {
 System.out.println("我的年齡是"+age+".");
 }
}

然后在主函數(shù)里面創(chuàng)建對(duì)象并輸出。

Person p=new Person();
p.setAge(20);
p.sayHello();

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

//方法內(nèi)的年齡20
//我的年齡是1000.

想一下其實(shí)就很容易理解。

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

所以,首先當(dāng)我們創(chuàng)建了一個(gè)Person對(duì)象p,在創(chuàng)建對(duì)象的時(shí)候就已經(jīng)完成了成員變量的初始化了。成員變量age的初始值是1000。

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

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

到這里如果還是不能理解,可以自己寫(xiě)代碼看輸出結(jié)果體會(huì)下。

那么,當(dāng)同名的時(shí)候,我們就是要讓這個(gè)變量名表示成員變量,有沒(méi)有辦法呢?

那就要說(shuō)到this關(guān)鍵字了。我們把Person類改成這樣:

public class Person {
 private int age=1000;

 public void setAge(int age) {
 this.age=age;
 System.out.println("方法內(nèi)的年齡"+age);
 }
 public void sayHello() {
 System.out.println("我的年齡是"+age+".");
 }
}


再運(yùn)行代碼,發(fā)現(xiàn)代碼運(yùn)行結(jié)果變成了下面這樣:

//方法內(nèi)的年齡20
//我的年齡是20.

this表示的是當(dāng)前對(duì)象。

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

盡管兩者的本質(zhì)都是變量,可是使用時(shí)卻有相當(dāng)大的區(qū)別,稍不留神就可能陷入陷阱。且先記?。涸谝粋€(gè)類中,如果一個(gè)變量能夠用來(lái)描述一個(gè)類的屬性,那就定義為成員變量,否則,它就應(yīng)該定義為局部變量。不能理解的話就多寫(xiě)寫(xiě)代碼就能理解了。

相關(guān)文章

  • SpringBoot MongoDB與MongoDB GridFS基本使用

    SpringBoot MongoDB與MongoDB GridFS基本使用

    這篇文章主要為大家介紹了SpringBoot MongoDB與MongoDB GridFS基本使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Java 基礎(chǔ)之事務(wù)詳細(xì)介紹

    Java 基礎(chǔ)之事務(wù)詳細(xì)介紹

    這篇文章主要介紹了Java 基礎(chǔ)之事務(wù)詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • mybatisplus之Wrappers.ne踩坑記錄解決

    mybatisplus之Wrappers.ne踩坑記錄解決

    這篇文章主要為大家介紹了mybatisplus之Wrappers.ne踩坑記錄解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • JavaWeb文件下載功能實(shí)例代碼

    JavaWeb文件下載功能實(shí)例代碼

    這篇文章主要為大家詳細(xì)介紹了JavaWeb文件下載功能實(shí)例代碼,代碼簡(jiǎn)單實(shí)用,感興趣的小伙伴們可以參考一下
    2016-06-06
  • 詳解Java線程池是如何重復(fù)利用空閑線程的

    詳解Java線程池是如何重復(fù)利用空閑線程的

    在Java開(kāi)發(fā)中,經(jīng)常需要?jiǎng)?chuàng)建線程去執(zhí)行一些任務(wù),實(shí)現(xiàn)起來(lái)也非常方便,此時(shí),我們很自然會(huì)想到使用線程池來(lái)解決這個(gè)問(wèn)題,文中給大家提到使用線程池的好處,對(duì)Java線程池空閑線程知識(shí)感興趣的朋友一起看看吧
    2021-06-06
  • SpringBoot配置類編寫(xiě)過(guò)程圖解

    SpringBoot配置類編寫(xiě)過(guò)程圖解

    這篇文章主要介紹了SpringBoot配置類編寫(xiě)過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 詳解Maven項(xiàng)目Dependencies常見(jiàn)報(bào)錯(cuò)及解決方案

    詳解Maven項(xiàng)目Dependencies常見(jiàn)報(bào)錯(cuò)及解決方案

    這篇文章主要介紹了詳解Maven項(xiàng)目Dependencies常見(jiàn)報(bào)錯(cuò)及解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 解決IDEA的maven項(xiàng)目中沒(méi)有新建Servlet文件的選項(xiàng)問(wèn)題

    解決IDEA的maven項(xiàng)目中沒(méi)有新建Servlet文件的選項(xiàng)問(wèn)題

    這篇文章主要介紹了IDEA的maven項(xiàng)目中沒(méi)有新建Servlet文件的選項(xiàng)問(wèn)題及解決方法,本文給大家分享問(wèn)題原因就解決方法,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • java使用BeanUtils.copyProperties踩坑經(jīng)歷

    java使用BeanUtils.copyProperties踩坑經(jīng)歷

    最近在做個(gè)項(xiàng)目,踩了個(gè)坑特此記錄一下,本文主要介紹了使用BeanUtils.copyProperties踩坑經(jīng)歷,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Java設(shè)計(jì)模式之外觀模式

    Java設(shè)計(jì)模式之外觀模式

    這篇文章介紹了Java設(shè)計(jì)模式之外觀模式,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09

最新評(píng)論