最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2016年07月15日 16:46:15   投稿:daisy  
在剛開始學(xué)習(xí)Java的時候,就了解了Java基礎(chǔ)中的變量,雖然知道這個以后會經(jīng)常用到,但沒想到了基本語法這里,竟然又冒出來了成員變量和局部變量。變來變?nèi)ヌ菀鬃屓烁銜灹耍裉煳覀兙吞魭鰜硎崂硪幌拢?/div>

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

成員變量

       我們來研究一個事物:

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

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

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

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

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

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

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

      拓展:類是一個抽象的概念,而對象就是類的具體的存在,體現(xiàn)。例如:生活中的汽車,可以看做一個類,我們稱之為汽車類,每一臺車都有顏色和輪胎數(shù)(可以定義為屬性,即成員變量),每一臺車都可以跑(即車的行為,對應(yīng)類總的成員函數(shù)),我們把汽車實例化一下,即會產(chǎn)生一個對象,比如奔馳、寶馬(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+ "個輪子的" +this.color + "轎車在馬路上行駛著");
 }
}
public class ClassTest {
 public static void main(String[] args){
   Car bmw = new Car("黑色", 4); // 創(chuàng)建一個轎車對象,名字為bmw
   bmw.run();
 }
}

運行結(jié)果:

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

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

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

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

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

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=”寶馬牌”; //這個就是局部變量
   System.out.println(this.numLuntai+ "個輪子的" +this.color + carName+"轎車在馬路上行駛著");
 }
}
publicclass ClassTest {
 public static void main(String[] args){
   Car bmw = new Car("黑色", 4); // 創(chuàng)建一個轎車對象,名字為bmw
   bmw.run();
 }
}

結(jié)果:

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

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

       成員變量:

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

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

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

      局部變量:

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

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

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

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

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

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

先來看一個簡單的代碼。

首先我定義了一個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)建對象并輸出。

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

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

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

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

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

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

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

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

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

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

那就要說到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+".");
 }
}


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

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

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

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

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

相關(guān)文章

  • java 異常的實例詳解

    java 異常的實例詳解

    這篇文章主要介紹了java 異常的實例詳解的相關(guān)資料,希望通過本文大家能徹底掌握java異常的使用方法,需要的朋友可以參考下
    2017-09-09
  • springboot配置kafka批量消費,并發(fā)消費方式

    springboot配置kafka批量消費,并發(fā)消費方式

    文章介紹了如何在Spring Boot中配置Kafka進(jìn)行批量消費,并發(fā)消費,需要注意的是,并發(fā)量必須小于等于分區(qū)數(shù),否則會導(dǎo)致線程空閑,文章還總結(jié)了創(chuàng)建Kafka分區(qū)的命令,并鼓勵讀者分享經(jīng)驗
    2024-12-12
  • Java語言實現(xiàn)快速冪取模算法詳解

    Java語言實現(xiàn)快速冪取模算法詳解

    這篇文章主要介紹了Java語言實現(xiàn)快速冪取模算法詳解,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • java中Map接口常用的方法解讀

    java中Map接口常用的方法解讀

    這篇文章主要介紹了java中Map接口常用的方法解讀,Map接口是雙列集合,它的每一個元素都包含一個鍵對象key和值對象Value,鍵和值對象之間存在一種對應(yīng)關(guān)系,稱為映射,需要的朋友可以參考下
    2024-01-01
  • springboot整合springsecurity與mybatis-plus的簡單實現(xiàn)

    springboot整合springsecurity與mybatis-plus的簡單實現(xiàn)

    Spring Security基于Spring開發(fā),項目中如果使用Spring作為基礎(chǔ),配合Spring Security做權(quán)限更加方便,而Shiro需要和Spring進(jìn)行整合開發(fā)。因此作為spring全家桶中的Spring Security在java領(lǐng)域很常用
    2021-10-10
  • spring 如何將配置信息注入靜態(tài)變量的方法

    spring 如何將配置信息注入靜態(tài)變量的方法

    本篇文章主要介紹了spring 如何將配置信息注入靜態(tài)變量的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • Java多線程 ReentrantReadWriteLock原理及實例詳解

    Java多線程 ReentrantReadWriteLock原理及實例詳解

    這篇文章主要介紹了Java多線程 ReentrantReadWriteLock原理及實例詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • SpringBoot2.0如何自定義404頁面渲染

    SpringBoot2.0如何自定義404頁面渲染

    這篇文章主要介紹了SpringBoot2.0如何自定義404頁面渲染問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • SpringBoot實現(xiàn)自定義啟動器的示例詳解

    SpringBoot實現(xiàn)自定義啟動器的示例詳解

    雖然Spring官方給我們提供了很多的啟動器供我們使用,但有時候我們也會遇到某些特殊場景,這些啟動器滿足不了。這個時候就需要自定義一個啟動器供我們使用,本文為大家介紹了SpringBoot實現(xiàn)自定義啟動器的方法,希望對大家有所幫助
    2023-01-01
  • Eclipse下Javassist正確使用方法代碼解析

    Eclipse下Javassist正確使用方法代碼解析

    這篇文章主要介紹了Eclipse下Javassist正確使用方法代碼解析,javassist-3.15.0-ga.jar包是一款在java開發(fā)中十分重要的jar文件包,需要的朋友可以參考下,文中附下載鏈接。
    2017-12-12

最新評論

马公市| 唐河县| 长白| 永胜县| 安图县| 安龙县| 石楼县| 临颍县| 象州县| 贡山| 惠安县| 息烽县| 金秀| 昆山市| 响水县| 东平县| 奉新县| 墨脱县| 商洛市| 清水县| 页游| 屏东市| 堆龙德庆县| 安义县| 海盐县| 滨海县| 河北省| 子长县| 常宁市| 闵行区| 新竹市| 宜川县| 湖南省| 南部县| 讷河市| 东乡族自治县| 长兴县| 新营市| 冕宁县| 泰兴市| 美姑县|