1.5 this关键字
1.5.1 this是什么?
this是一个引用类型,堆中的每一个java对象上都有this, this保存内存地址指向自身。
1.5.2 this能用在哪些地方?
①this可以用在成员方法中。
②this可以用来区分成员变量和局部变量:
当局部变量(形参)和成员变量重名的时候,如果在方法内部需要使用成员变量,必须
添加this来表明该变量时类成员。
③this可以用在构造方法中。
在构造方法中使用“this(形参列表)”显式的调用本类中重载的其它的构造器(用一个构造方法调用另一个构造方法)。
语法:this(实参);
目的:代码重用。
要求:“this(形参列表)”要声明在构造器的首行!
注意:若一个类中有n个构造器,那么最多有n-1个构造器中使用了this(形参)。
1.5.3理解“this”
public class ThisTest01{ public static void main(String[] args){ /* //创建对象 MyDate t1 = new MyDate(2008,8,8); System.out.println(t1.year+"年"+t1.month+"月"+t1.day+"日"); //创建对象 MyDate t2 = new MyDate(2012,12,20); System.out.println(t2.year+"年"+t2.month+"月"+t2.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(1970,1,1);//this用在构造方法中 /* this.year = 1970; this.month = 1; this.day = 1; */ } MyDate(int _year,int _month,int _day){ year = _year; month = _month; day = _day; } } |
1.5.4 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"); }
} |
1.5.5 this用来区分成员变量和局部变量。
public class ThisTest03{
public static void main(String[] args){
Manager m1 = new Manager("KING");
Manager m2 = new Manager(); m2.setName("FORD");
System.out.println(m1.getName()); //KING System.out.println(m2.getName()); //FORD }
} 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 name; return this.name; }
} |
1.5.6 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); } } |