类和对象之“this”关键字

首先在我们写一个JavaBean的时候都会写调用访问这个类属性的getter和setter方法或者有参的构造方法例如:

public class Employee1 {
	private String name;
	private int age;
	private String sex;
	private String post;
	private double salary;
	
	
	//有参构造
	public Employee1(String name, int age, String sex, String post, double salary) {
		super();
		this.name = name;
		this.age = age;
		this.sex = sex;
		this.post = post;
		this.salary = salary;
	}



	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public String getPost() {
		return post;
	}
	public void setPost(String post) {
		this.post = post;
	}
	public double getSalary() {
		return salary;
	}
	public void setSalary(double salary) {
		this.salary = salary;
	}
	
	
}

我们可以看到里面都用到了this这个关键字。它的意思是“当前对象的”下面就来看下它的三个作用:

1、用来在类的内部区分属性和同名形参,或者说通过this关键字访问对象的属性(常用)。

上面类的name属性的setNmae方法中,所传形参String name和类的属性name同名,在给属性name赋值的时候,为了区分属性和形参,使用this.name来调用类的属性,并使用形参name为其赋值。这里this保存的是对象的引用,即对象的虚拟地址,看下面的的代码:

public class Hero {
	
	String name; //姓名
	
	float hp; //血量
	
	float armor; //护甲
	
	int moveSpeed; //移动速度

	//打印内存中的虚拟地址
	public void showAddressInMemory(){
		System.out.println("打印this看到的虚拟地址:"+this);
	}
	
	public static void main(String[] args) {
		Hero garen =  new Hero();
		garen.name = "盖伦";
		//直接打印对象,会显示该对象在内存中的虚拟地址
		//格式:Hero@c17164 c17164即虚拟地址,每次执行,得到的地址不一定一样

		System.out.println("打印对象看到的虚拟地址:"+garen);
		//调用showAddressInMemory,打印该对象的this,显示相同的虚拟地址
		garen.showAddressInMemory();
		
        Hero teemo =  new Hero();
        teemo.name = "提莫";
        System.out.println("打印对象看到的虚拟地址:"+teemo);
		teemo.showAddressInMemory();
	}	
	
}

运行结果如下,打印对象和打印this记过的都是对象的虚拟地址:

2、在需要使用当前对象时,直接使用this,比如返回当前对象:

在上面的Hero类中添加如下方法:

	//增加血量
	public Hero addHp(float add) {
		hp=hp+add;
		return this;
	}

该方法用来增加血量,可以看到这个方法有返回值,返回的是Hero类的this,也就是返回了一个Hero类的一个对象,这样做的好处是,在我们需要连掉的时候直接用返回值就可以调用,比如:对象.addHp(2.5).addHp(3.5);

3.在类的构造方法中,调用当前类的其它构造方法

如果要在一个构造方法中,调用另一个构造方法,可以使用this(),代码如下:

public class Hero {
        
    String name; //姓名
        
    float hp; //血量
        
    float armor; //护甲
        
    int moveSpeed; //移动速度
        
    //带一个参数的构造方法
    public Hero(String name){
        System.out.println("一个参数的构造方法");
        this.name = name;
    }
      
    //带两个参数的构造方法
    public Hero(String name,float hp){
        this(name);
        System.out.println("两个参数的构造方法");
        this.hp = hp;
    }
 
    public static void main(String[] args) {
        Hero teemo =  new Hero("提莫",383);
         
        System.out.println(teemo.name);
         
    }
      
}

在上面代码中可以看到,带两个参数的构造方法中通过this(),调用了带一个参数的构造方法,如果有多个构造方法,他是通过参数的个数和类型去匹配对应的构造函数。

在有些特殊场景中会用到这中方法,比如一个类它实例化的对象有一部分属性是相同的,name就可以在写构造方法的时候把那部分属性固定。

需要注意的是这种用发this(),必须放在方法的第一行。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值