1.this是什么?
this是一个引用类型,在堆中的每一个java对象上都有this,this保存内存地址指向自身。
2.this能用在哪些地方?
第一:this可以用在成员方法中.
第二:this可以用在构造方法中.
语法:this(实参);
通过一个构造方法去调用另一个构造方法。
目的:代码重用。
this(实参);必须出现在构造方法的第一行
第三:this不能用在静态方法中。静态方法的执行不需要java对象的存在,直接使用"类名."的方式去访问,this代表的是当前对象,所有不用用在静态方法中。
class MyDate{ //Field int year; int month; int day; //Constructor //需求:在创建日期对象的时候,默认的日期是:1970-1-1 MyDate(){ 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能用在成员方法中。 this就是当前对象.*/public class ThisTest02{ public static void main(String[] args){ //创建对象 Employee e = new Employee(7369,"SMITH"); //工作 e.work(); //创建对象 Employee e1 = new Employee(7370,"FORD"); //工作 e1.work(); e.m1(); } }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 + "在工作"); //this. 可以省略 } //成员方法 public void m1(){ this.m2(); m2(); } //成员方法 public void m2(){ System.out.println("TESTING"); } }
注意:this不能用在静态方法中。
/* this不能用在静态方法中. 静态方法的执行根本不需要java对象的存在。直接使用“类名.”的方式访问。 而this代表的是当前对象。所以静态方法中根本没有this*/public class ThisTest04{ String str; //入口 public static void main(String[] args){ Person.m1(); //str是一个成员变量,必须由 引用. 访问 //System.out.println(str); ThisTest04 tt = new ThisTest04(); 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 p1 = new Person("刘德华"); System.out.println(p1.name); } }