一:this引用的基本知识点
(1)定义:this是一个引用类型,保存了内存地址,在堆中的每一个java对象上都有this,保存内存地址指向自身(比如:门牌号))让该引用参数指向当前对象。
(2)特性:
1.this可以用在成员方法中
2.this可以用在构造方法中
语法:this(实参)
通过一个构造方法去调用另一个构造方法
目的:代码重用
this(实参) 必须出现在构造方法的第一行
3.this不能用在静态方法中
4.this可以用来区分成员变量和局部变量
5. this引用的类型:对应类类型引用,即那个对象调用就是那个对象的引用类型
二:this的用法
(1)this用在成员方法中,调用类中的属性
代码示例:
ackage This;
//this能用在成员方法中,就是当前对象
public class Thistest02 {
public static void main(String[] args) {
//创建对象
EmpLoyee e = new EmpLoyee(123,"ABC");
//调用工作方法
e.work();
}
}
class EmpLoyee{
//成员变量
int empno;//员工编号
String ename;
//Constructor
EmpLoyee(int _empno,String _ename){
empno = _empno;
ename = _ename;
}
//提供一个员工在工作的方法
//this用在成员方法中,谁去调用这个成员方法,this就代表谁
//this指的就是当前对象
public void work(){
System.out.println(ename+"在工作");
//System.out.println(this.ename+"在工作");//this.可以省略
}
}
//运行结果:ABC在工作
注意:this可以省略
this表示当前对象引用(注意不是当前对象).
(2)this可以用在构造方法中,调用类中的方法
代码示例:
package This;
public class Thistest05 {
public static void main(String[] args) {
Person p1 = new Person();//调用不带参数的构造函数 如果程序没有提供会调用不带参数
//的构造函数
p1.show();
Person p2 = new Person("zhangfei",80,"男");//调用带有3个参数的构造函数
p2.show();
}
}
class Person {
private String name;//实例成员变量
private int age;
private String sex;
//默认构造函数 构造对象
public Person() {
this.name = "caocao";
this.age = 10;
this.sex = "男";
}
//带有3个参数的构造函数 注意此时形参的命名和属性的命名一样
public Person(String name, int age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public void eat() {
System.out.println(this.name + " 正在吃饭!");
}
public void show() {
System.out.println("name: " + this.name + " age: " + this.age + " sex: " + this.sex);
//在show方法当中,通过this引用来调用本类的eat方法
this.eat();
}
}
(3)this可以用在构造方法中,调用自身的构造方法
代码示例:
public class Thistest01 {
public static void main(String[] args) {
//创建对象
MyDate md = new MyDate();//调用不带参数的构造函数
System.out.println(md.year+"年"+md.month+"月"+md.day+"日");
}
}
//日期
class MyDate{
//Field成员变量
int year;
int month;
int day;
//Constructor构造方法
//需求:在创建日期对象时,默认的日期是:1970—1—1
MyDate(){
this(1970,1,1);//必须放在第一行进行显示
}
MyDate(int _year,int _month,int _day){
year = _year;
month = _month;
day = _day;
}
}
//运行结果:1970年1月1日
注意:需要在一个构造方法当中,调用当前类的另外一个构造方法的时候,通过this()的形式调用。 必须放在第一行,且只能调用一个。
(4)this不能用在静态方法中,如果想用,得在静态方法中重新创建对象。
代码示例:
public class Thistest04 {
public static void main(String[] args) {
Person.m1();
}
}
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");
}
}
//静态方法的执行根本不需要java对象的存在,直接使用类名.的方式访问
//而this代表的是当前对象,所以静态方法中根本没有this
(5) this可以用来区分成员变量和局部变量
代码示例:
package This;
public class Thistest03 {
public static void main(String[] args) {
Manager m1 = new Manager("KING");
Manager m2 = new Manager("KING");
m2.setName("EFG");
System.out.println(m1.getName());
System.out.println(m2.getName());
}
}
class Manager{
//Field
private String name;
//Constructor
Manager(String name){}
//Method成员方法
public void setName(String name){
this.name = name;//this.name就是上面的成员变量name,之前用_name区分,现在不用了
}
//成员方法
public String getName(){
return this.name;//=return name;
}
}



