Java語言基礎this關鍵字
阿新 • • 發佈:2019-01-03
this是什麼?
- this是一個引用型別
- 在堆中的每一個物件都有this
- this儲存記憶體地址只指向自身
this能用在什麼地方
- this可以用在成員方法中
- 誰去呼叫這個成員方法,this就代表誰
- this指的就是當前物件(“this.”可以省略)
public class ThisTest_01 { public static void main(String[] args) { //建立物件 Employee e1 = new Employee(123,"zhangsan"); e1.work(); //建立物件 Employee e2 = new Employee(456,"lisi"); e2.work(); e1.m1(); } } class Employee{ //員工編號 int empno; //員工姓名 String name; //C0nstructor(無引數構造方法) Employee() {} //Constructor(有引數構造方法) Employee(int _empno,String _name){ empno = _empno; name = _name; } public void work() { //this就是當前物件,誰去呼叫這個方法,this就代表誰 //this指的就是當前物件 //this.可以省略 System.out.println(this.name + "在工作"); } //成員方法 public void m1() { this.m2(); m2(); } //成員方法 public void m2() { System.out.println("Testing"); } }
- this可以用在構造方法中
- 語法:this(實參);
- 過程:通過一個構造方法呼叫另一個構造方法
- 目的:程式碼重用
public class ThisTest_02 { public static void main(String[] args) { /* //建立物件 MyDate data1 = new MyDate(2018,8,22); System.out.println(data1.year + "年" + data1.month + "月" + data1.day + "日"); */ //建立物件 MyDate t3 = new MyDate(); System.out.println(t3.year + "年" + t3.month + "月" + t3.day + "日"); } } class MyDate{ //Field(屬性) int year; int month; int day; //Constructor(構造方法) //需求:在建立日期物件時,預設日期時1970-1-1 //無引數構造方法 MyDate() { //this(實參)必須處於構造方法的第一行 this(1970, 1, 1); /* this.year = 1970; this.month = 1; this.day = 1; */ } //含引數構造方法 MyDate(int _year,int _month,int _day){ year = _year; month = _month; day = _day; } }
this可以用來區分成員變數和區域性變數
public class ThisTest_03 { public static void main(String[] args) { //建立物件m1,名字:king Manager m1 = new Manager("King"); //建立物件m2 Manager m2 = new Manager(); //設定名字:wang m2.setName("Wang"); //列印 System.out.println(m1.getName()); System.out.println(m2.getName()); } } //類:經理 class Manager{ //Field private String name; //Constructor Manager(){} Manager(String name) { this.name = name; } //Method //成員方法:設定名字 public void setName(String name) { this.name = name; } //成員方法:獲取名字 public String getName() { return this.name; } }
this不能用在靜態方法中
- 靜態方法的執行不需要Java物件,直接引用類名的方式訪問
- this指當前物件,而靜態變數中沒有物件
public class ThisTest_04 {
String str;
//入口
public static void main(String[] args) {
Person.m1();
//str是成員變數,必須由 引用. 訪問
//錯誤:
//System.out.println(str);
ThisTest_04 tt = new ThisTest_04();
System.out.println(tt.str);
}
}
class Person{
//Field(屬性)
String name;
//Constructor(無引數構造方法)
Person() {}
//Constructor(有引數構造方法)
Person(String name){
this.name = name;
}
public static void m1() {
Person p1 = new Person();
p1.name = "張三";
System.out.println(p1.name);
}
}
this();通過一個語法呼叫另外一個構造方法(程式碼重用)
this(實參);必須處於構造方法的第一行