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

Java的this關鍵字的使用與方法的重載相關知識

 更新時間:2015年09月26日 15:51:40   投稿:goldensun  
這篇文章主要介紹了Java的this關鍵字的使用與方法的重載相關知識,是Java入門學習中的基礎知識,需要的朋友可以參考下

Java this關鍵字詳解
this 關鍵字用來表示當前對象本身,或當前類的一個實例,通過 this 可以調(diào)用本對象的所有方法和屬性。例如:

public class Demo{
  public int x = 10;
  public int y = 15;
  public void sum(){
    // 通過 this 點取成員變量
    int z = this.x + this.y;
    System.out.println("x + y = " + z);
  }
 
  public static void main(String[] args) {
    Demo obj = new Demo();
    obj.sum();
  }
}

運行結(jié)果:

x + y = 25

上面的程序中,obj 是 Demo 類的一個實例,this 與 obj 等價,執(zhí)行 int z = this.x + this.y;,就相當于執(zhí)行 int z = obj.x + obj.y;。

注意:this 只有在類實例化后才有意義。
使用this區(qū)分同名變量

成員變量與方法內(nèi)部的變量重名時,希望在方法內(nèi)部調(diào)用成員變量,怎么辦呢?這時候只能使用this,例如:

public class Demo{
  public String name;
  public int age;
 
  public Demo(String name, int age){
    this.name = name;
    this.age = age;
  }
 
  public void say(){
    System.out.println("網(wǎng)站的名字是" + name + ",已經(jīng)成立了" + age + "年");
  }
 
  public static void main(String[] args) {
    Demo obj = new Demo("微學苑", 3);
    obj.say();
  }
}

運行結(jié)果:

網(wǎng)站的名字是微學苑,已經(jīng)成立了3年

形參的作用域是整個方法體,是局部變量。在Demo()中,形參和成員變量重名,如果不使用this,訪問到的就是局部變量name和age,而不是成員變量。在 say() 中,我們沒有使用 this,因為成員變量的作用域是整個實例,當然也可以加上 this:

public void say(){
  System.out.println("網(wǎng)站的名字是" + this.name + ",已經(jīng)成立了" + this.age + "年");
} 


Java 默認將所有成員變量和成員方法與 this 關聯(lián)在一起,因此使用 this 在某些情況下是多余的。
作為方法名來初始化對象

也就是相當于調(diào)用本類的其它構(gòu)造方法,它必須作為構(gòu)造方法的第一句。示例如下:

public class Demo{
  public String name;
  public int age;
  
  public Demo(){
    this("微學苑", 3);
  }
 
  public Demo(String name, int age){
    this.name = name;
    this.age = age;
  }
 
  public void say(){
    System.out.println("網(wǎng)站的名字是" + name + ",已經(jīng)成立了" + age + "年");
  }
 
  public static void main(String[] args) {
    Demo obj = new Demo();
    obj.say();
  }
}

運行結(jié)果:
網(wǎng)站的名字是微學苑,已經(jīng)成立了3年

值得注意的是:
在構(gòu)造方法中調(diào)用另一個構(gòu)造方法,調(diào)用動作必須置于最起始的位置。
不能在構(gòu)造方法以外的任何方法內(nèi)調(diào)用構(gòu)造方法。
在一個構(gòu)造方法內(nèi)只能調(diào)用一個構(gòu)造方法。

上述代碼涉及到方法重載,即Java允許出現(xiàn)多個同名方法,只要參數(shù)不同就可以。后續(xù)章節(jié)會講解。
作為參數(shù)傳遞

需要在某些完全分離的類中調(diào)用一個方法,并將當前對象的一個引用作為參數(shù)傳遞時。例如:

public class Demo{
  public static void main(String[] args){
    B b = new B(new A());
  }
}
class A{
  public A(){
    new B(this).print(); // 匿名對象
  }
  public void print(){
    System.out.println("Hello from A!");
  }
}
class B{
  A a;
  public B(A a){
    this.a = a;
  }
  public void print() {
    a.print();
    System.out.println("Hello from B!");
  }
}

運行結(jié)果:

Hello from A!
Hello from B!

匿名對象就是沒有名字的對象。如果對象只使用一次,就可以作為匿名對象,代碼中 new B(this).print(); 等價于 ( new B(this) ).print();,先通過 new B(this) 創(chuàng)建一個沒有名字的對象,再調(diào)用它的方法。

Java方法重載
在Java中,同一個類中的多個方法可以有相同的名字,只要它們的參數(shù)列表不同就可以,這被稱為方法重載(method overloading)。

參數(shù)列表又叫參數(shù)簽名,包括參數(shù)的類型、參數(shù)的個數(shù)和參數(shù)的順序,只要有一個不同就叫做參數(shù)列表不同。

重載是面向?qū)ο蟮囊粋€基本特性。

下面看一個詳細的實例。

public class Demo{
  // 一個普通的方法,不帶參數(shù)
  void test(){
    System.out.println("No parameters");
  }
  // 重載上面的方法,并且?guī)Я艘粋€整型參數(shù)
  void test(int a){
    System.out.println("a: " + a);
  }
  // 重載上面的方法,并且?guī)Я藘蓚€參數(shù)
  void test(int a,int b){
    System.out.println("a and b: " + a + " " + b);
  }
  // 重載上面的方法,并且?guī)Я艘粋€雙精度參數(shù)
  double test(double a){
    System.out.println("double a: " + a);
    return a*a;
  }
  
  public static void main(String args[]){
    Demo obj= new Demo();
    obj.test();
    obj.test(2);
    obj.test(2,3);
    obj.test(2.0);
  }
}

運行結(jié)果:

No parameters
a: 2
a and b: 2 3
double a: 2.0

通過上面的實例,讀者可以看出,重載就是在一個類中,有相同的函數(shù)名稱,但形參不同的函數(shù)。重載的結(jié)果,可以讓一個程序段盡量減少代碼和方法的種類。

說明:

  • 參數(shù)列表不同包括:個數(shù)不同、類型不同和順序不同。
  • 僅僅參數(shù)變量名稱不同是不可以的。
  • 跟成員方法一樣,構(gòu)造方法也可以重載。
  • 聲明為final的方法不能被重載。
  • 聲明為static的方法不能被重載,但是能夠被再次聲明。

方法的重載的規(guī)則:

  • 方法名稱必須相同。
  • 參數(shù)列表必須不同(個數(shù)不同、或類型不同、參數(shù)排列順序不同等)。
  • 方法的返回類型可以相同也可以不相同。
  • 僅僅返回類型不同不足以成為方法的重載。

方法重載的實現(xiàn):
方法名稱相同時,編譯器會根據(jù)調(diào)用方法的參數(shù)個數(shù)、參數(shù)類型等去逐個匹配,以選擇對應的方法,如果匹配失敗,則編譯器報錯,這叫做重載分辨。

相關文章

  • Java中的Timer與TimerTask源碼及使用解析

    Java中的Timer與TimerTask源碼及使用解析

    這篇文章主要介紹了Java中的Timer與TimerTask源碼及使用解析,在Java中,經(jīng)常使用Timer來定時調(diào)度任務,Timer調(diào)度任務有一次性調(diào)度和循環(huán)調(diào)度,循環(huán)調(diào)度有分為固定速率調(diào)度(fixRate)和固定時延調(diào)度(fixDelay),需要的朋友可以參考下
    2023-10-10
  • springboot如何配置多kafka

    springboot如何配置多kafka

    這篇文章主要介紹了springboot如何配置多kafka問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 基于Java實現(xiàn)音樂播放器的示例代碼

    基于Java實現(xiàn)音樂播放器的示例代碼

    這篇文章主要為大家詳細介紹了如何利用Java編寫一個簡單的音樂播放器,文中的示例代碼講解詳細,具有一定的學習價值,感興趣的小伙伴可以了解一下
    2023-07-07
  • 重新認識Java中的ThreadLocal

    重新認識Java中的ThreadLocal

    ThreadLocal是JDK包提供的,它提供線程本地變量,如果創(chuàng)建一個ThreadLocal變量,那么訪問這個變量的每個線程都會有這個變量的一個副本,在實際多線程操作的時候,操作的是自己本地內(nèi)存中的變量,從而規(guī)避了線程安全問題
    2021-05-05
  • 基于Ajax用戶名驗證、服務條款加載、驗證碼生成的實現(xiàn)方法

    基于Ajax用戶名驗證、服務條款加載、驗證碼生成的實現(xiàn)方法

    本篇文章對Ajax用戶名驗證、服務條款加載、驗證碼生成的實現(xiàn)方法,進行了詳細的分析介紹。需要的朋友參考下
    2013-05-05
  • SpringBoot集成本地緩存性能之王Caffeine示例詳解

    SpringBoot集成本地緩存性能之王Caffeine示例詳解

    這篇文章主要為大家介紹了SpringBoot集成本地緩存性能之王Caffeine的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • SpringBoot2.6.x 與 Swagger3 兼容問題及解決方法

    SpringBoot2.6.x 與 Swagger3 兼容問題及解決方法

    文章介紹了Spring Boot 2.6.x與Swagger 3兼容性問題的解決方法,如果項目中未引入spring-boot-starter-actuator,則在yml文件中加入相關配置,反之,需要添加其他配置,感興趣的朋友一起看看吧
    2025-03-03
  • Java超詳細講解排序二叉樹

    Java超詳細講解排序二叉樹

    排序二叉樹的特點是一個父節(jié)點只能有左右兩個子節(jié)點、左節(jié)點的值比父節(jié)點要小、右節(jié)點的值要比父節(jié)點要大,難度并不大,但是得花時間來理解
    2022-06-06
  • SpringBoot整合定時任務的方法

    SpringBoot整合定時任務的方法

    通過 ThreadPoolExecutor 可以實現(xiàn)各式各樣的自定義線程池,而 ScheduledThreadPoolExecutor 類則在自定義線程池的基礎上增加了周期性執(zhí)行任務的功能,這篇文章主要介紹了SpringBoot整合定時任務,需要的朋友可以參考下
    2024-05-05
  • Java反射及性能詳細

    Java反射及性能詳細

    這篇文章主要介紹了Java反射及性能,現(xiàn)如今的java工程中,反射的使用無處無在。無論是設計模式中的代理模式,還是紅透半邊天的Spring框架中的IOC,AOP等等,都存在大量反射的影子。下面我們就對該話題進行詳細介紹,感興趣的小伙伴可以參考一下
    2021-10-10

最新評論

民勤县| 诸暨市| 高淳县| 工布江达县| 鹤庆县| 区。| 大荔县| 晋江市| 射阳县| 青海省| 湘西| 沾益县| 惠来县| 莱西市| 东港市| 榆林市| 永丰县| 页游| 邹平县| 九龙城区| 广东省| 买车| 方山县| 荆州市| 梁山县| 理塘县| 夏津县| 阆中市| 曲阜市| 赞皇县| 龙海市| 建宁县| 霍山县| 瑞安市| 玉屏| 喜德县| 通山县| 凭祥市| 道孚县| 连山| 承德市|