一、 this什麼時候是不能省略的,我們舉個例子來說明 this用來區分局部變數和實例變數的時候,是不能省略的。 二、我們對於構造方法的再次練習,註意我們的註釋,這是這個聯繫的重要總結。 我們看一下這裡面的兩個構造函數,一個是可以傳入參數的,一個是不傳入參數,我們不傳入參數的有個固定的格式: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.歡迎關註微信公眾號:傅里葉變換,個人公眾號,僅用於學習交流,後臺回覆”禮包“,獲取大數據學習資料