Java連載42-this不能省略的情況、構造方法設置默認值的方法


一、 this什么時候是不能省略的,我們舉個例子來說明

class User2{

  private int id;

  public int getId() {

    return id;

  }

  public void setId(int id) {

    this.id = id;//這里如果寫成了id=id,那么根據就近原則,第一個id就是形式參數,第二個id也是形式

    //參數,所以這里必須要加上this才行,類似於python中的self

  }

}

 

 

this用來區分局部變量和實例變量的時候,是不能省略的。

二、我們對於構造方法的再次練習,注意我們的注釋,這是這個聯系的重要總結。

 

package com.bjpowernode.java_learning;

public class D42_ {

  public static void main(String[] args) {

    User2 u1 = new User2(2155,"張三");

    //這里說明了兩個問題

    //首相可以傳入參數,說明這是調用了User2類中的構造方法,可以看一下函數原型是需要兩個參數的

    //如果不寫這連個參數,那么我們需要在類User2中增加不帶參數的構造方法(也就是重載函數)

    //雖然id和name是private類型的,但是我們傳入參數可以看出來,照樣可以修改,但是我們后面再修改的時候

    //就必須得調用那兩個實例函數了

    System.out.println(u1.getName());

   

  }

 

}

class User2{

  private int id;

  private String name;

​

  public int getId() {

    return id;

  }

  public void setId(int id) {

    this.id = id;//這里如果寫成了id=id,那么根據就近原則,第一個id就是形式參數,第二個id也是形式

    //參數,所以這里必須要加上this才行,類似於python中的self

  }

  public String getName() {

    return name;

  }

  public void setName(String name) {

    this.name = name;

  }

 

  public User2(int id,String name) {

    this.id = id;

    this.name = name;

  }

 

}

 

 
      

三、我們需要創建一個Date類用來存儲我們的日期,同時這里面有一個需求:如果創建對象的時候不提供年月日的話,我們需要給這個對象一個默認值1970-01-01

 

package com.bjpowernode.java_learning;

public class D42_ConstructerWithDefaultValue {

  public static void main(String[] args) {

    Date2 d1 = new Date2(2019,10,19);

    Date2 d2 = new Date2();

    d1.outputDate();

    d2.outputDate();

  }

}

class Date2{

  int year;

  int month;

  int day;

  /**

   * @param year

   * @param month

   * @param day

   */

  public Date2(int year, int month, int day) {

    this.year = year;

    this.month = month;

    this.day = day;

  }

  /**

   * 需求:如果創建對象的時候不提供年月日的話,我們需要給這個對象一個默認值1970-01-01

   */

  public Date2(){

    this(1970,1,1);

  }

  public void outputDate() {

    System.out.println("您想要的日期是:" + year + "年" + month + "月" + day + "日");

  }

 

}

我們看一下這里面的兩個構造函數,一個是可以傳入參數的,一個是不傳入參數,我們不傳入參數的有個固定的格式:this(默認參數),並且這個語句必須出現在這個構造方法的第一行,有什么其他的語句,在后面寫

對此可以我們解釋為啥可以多這個語法,我們可以這樣寫

 

public Date2(){

        year = 1970;

        month = 1;

        day = 1;

}

 

 

​這樣寫運行是沒有問題的,可以這樣寫,但是這樣寫代碼是冗余的,因此不合適

我們還可以這樣寫

 

public Date2(){

    new Date2(1970,1,1);

}

 

 

這樣等於我們又創建了一個對象,這樣也是不好的,因此也不用這個方法

 

四、我們總結一下​:

this​可以使用在哪里:

(1)可以使用在實例方法之中,代表當前對象【​語法格式:this.】

(2)可以使用在構造方法之中,通過當前的構造方法調用其他的構造方法【​語法格式:this(實參);】

(3)this()這種語法只能出現在構造方法的第一行

三、源碼:

D42_theSitustionOfNotOmitTihsKeyword.java

D42_ConstructerWithDefaultValue

地址:

https://github.com/ruigege66/Java/blob/masterD42_theSitustionOfNotOmitTihsKeyword.java

https://github.com/ruigege66/Java/blob/master/D42_ConstructerWithDefaultValue

2.CSDN:https://blog.csdn.net/weixin_44630050(心悅君兮君不知-睿)

3.博客園:https://www.cnblogs.com/ruigege0000/

4.歡迎關注微信公眾號:傅里葉變換,個人公眾號,僅用於學習交流,后台回復”禮包“,獲取大數據學習資料

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM