1 this是什么?
- this是一个引用类型
- 在堆中的每一个对象都有this
- this保存内存地址只指向自身
2 this能用在什么地方
2.1 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; Employee() {} Employee(int _empno,String _name){ empno = _empno; name = _name; } public void work() { System.out.println(this.name + "在工作"); } public void m1() { this.m2(); m2(); } public void m2() { System.out.println("Testing"); } }
|
2.2 this可以用在构造方法中
- 语法:this(实参);
- 过程:通过一个构造方法调用另一个构造方法
- 目的:代码重用
public class ThisTest_02 { public static void main(String[] args) {
MyDate t3 = new MyDate(); System.out.println(t3.year + "年" + t3.month + "月" + t3.day + "日"); } } class MyDate{ int year; int month; int day; MyDate() { this(1970, 1, 1);
} MyDate(int _year,int _month,int _day){ year = _year; month = _month; day = _day; } }
|
2.3 this可以用来区分成员变量和局部变量
public class ThisTest_03 { public static void main(String[] args) { Manager m1 = new Manager("King"); Manager m2 = new Manager(); m2.setName("Wang"); System.out.println(m1.getName()); System.out.println(m2.getName()); } }
class Manager{ private String name; Manager(){} Manager(String name) { this.name = name; } public void setName(String name) { this.name = name; } public String getName() { return this.name; } }
|
2.4 this不能用在静态方法中
- 静态方法的执行不需要Java对象,直接引用类名的方式访问
- this指当前对象,而静态变量中没有对象
public class ThisTest_04 { String str; public static void main(String[] args) { Person.m1(); ThisTest_04 tt = new ThisTest_04(); System.out.println(tt.str); } } class Person{ String name; Person() {} Person(String name){ this.name = name; } public static void m1() { Person p1 = new Person(); p1.name = "张三"; System.out.println(p1.name); } }
|
this();通过一个语法调用另外一个构造方法(代码重用)
this(实参);必须处于构造方法的第一行