十、java基礎之this介紹
阿新 • • 發佈:2018-12-01
/*
一、this關鍵字:
1.this什麼?
this是一個引用型別
在堆中的每一個java物件上都有this
this儲存的記憶體地址指向自身
2.this能用在哪裡?
第一:this可以用在成員方法中
第二:this可以用在構造方法中
this(實參);
通過一個構造方法去呼叫另一個構造方法
目的:程式碼複用
注意:this(實參)必須出現在構造方法中第一個語句;否則報:Error:(40, 13) java: 對this的呼叫必須是構造器中的第一個語句
3.this可以用來區分成員變數和區域性變數
4.this不能用在靜態方法中
1.靜態方法的執行根本不需要java物件的存在,直接使用,型別,的方式訪問
2.而this代表的是當前的物件,所以靜態方法中根本沒有this
*/
1.原始程式碼:
public class ThisTest06 { public static void main(String[] args){ //建立物件 MyDate t1=new MyDate(2018,8,23); System.out.println(t1.year+"年"+t1.mouth+"月"+t1.day+"日"); //建立物件 MyDate t2=new MyDate(); System.out.println(); } }class MyDate{ //Field int year; int mouth; int day; //constructor MyDate(){} MyDate(int _year,int _mouth,int _day){ year=_year; mouth=_mouth; day=_day; } }
2.this可以用在成員方法中
public class ThisTest07 { public static void main(String[] args){ Employee em=new Employee(1234,"chushujin"); em.work(); Employee em1=new Employee(12345,"chushujin1"); em1.work(); } } class Employee{ //員工編號 int empno; //員工名 String ename; //Constructor Employee(){} Employee(int _empno,String _ename){ empno=_empno; ename=_ename; } //提供一個員工工作方法 //this用在成員方法中,誰去呼叫這個成員方法,this就代表誰 //this指的就是當前物件 public void work(){ System.out.println(this.ename+"在工作!"); //System.out.println(ename+"在工作!");//可以省略 } public void m1(){ this.m2(); } public void m2(){ System.out.println("THIS"); } }
2.this可以用在構造方法中
this(實參);
通過一個構造方法去呼叫另一個構造方法
目的:程式碼複用
注意:this(實參)必須出現在構造方法中第一個語句;否則報:Error:(40, 13) java: 對this的呼叫必須是構造器中的第一個語句
public class ThisTest10 { public static void main(String[] args){ MyDatee MDe=new MyDatee(); System.out.println(MDe.year+"年"+MDe.mouth+"月"+MDe.day+"日"); } } class MyDatee{ //Field int year; int mouth; int day; //constructor //預設1999-1-1日 MyDatee(){ this(1999,1,1); /*year=1999; mouth=1; day=1; */ //this(1999,1,1); } MyDatee(int _year,int _mouth,int _day){ year=_year; mouth=_mouth; day=_day; } }
3.this可以用來區分成員變數和區域性變數
public class ThisTest08 { public static void main(String[] args){ Manager m1= new Manager("KING"); Manager m2=new Manager("JOY"); System.out.println("m1---->"+m1.getName()); System.out.println("m2---->"+m2.getName()); } } class Manager{ //Field private String name; //Constructor Manager(String name){ this.name=name; } //Method //成員方法 public void setName(String name){ this.name=name; } public String getName(){ return this.name; } }
4.this不能用在靜態方法中
1.靜態方法的執行根本不需要java物件的存在,直接使用,型別,的方式訪問
2.而this代表的是當前的物件,所以靜態方法中根本沒有this
public class ThisTest09 { //沒有static的就是成員變數,成員變數不能直接訪問,引用.變數名 String str; public static void main(String[] args){ Person.m1(); //System.out.println(str);Error:(13, 28) java: 無法從靜態上下文中引用非靜態 變數 str ThisTest09 tt=new ThisTest09(); System.out.println(tt.str);//null } } class Person{ //Field String name; //Constructor Person(){} Person(String name){ this.name=name; } //靜態方法 public static void m1(){ //System.out.println(this.name); //如果想要訪問name Person p=new Person("kk"); System.out.println(p.name); } }