java中this关键字的深度剖析

this关键字
一句话 this就是当前对象,指向当前对象的引用。
对象可以调用成员变量、成员方法,构造方法,所以this也可以。

1.如果你为了封装和保护成员变量,将其权限设成private,那么其他类根本访问不了,如果想访问,你得提供一个相应的权限public的getter/setter方法。然后创建对象时,通过this.name = name这种公开的赋值间接的访问和设置private成员变量,起到了封装和保护的作用,如下程序

class Book{
	private int price ;//主类访问改变不了这个price,只能通过getter,setter
	public Book() {
		// TODO 自动生成的构造函数存根
	}

	public void price() {
		System.out.println("这本书"+price+"元");
	}

	public int getPrice() {
		return price;
	}

	public void setPrice(int price) {
		this.price = price;
	}
}
public class helloworldhaha {
	public static void main(String[] args) {
		Book b1 = new Book();
		b1.setPrice(10);
		b1.price();
		
	}
}

2.很多文章作用写了一个区分成员变量和形参,为什么要区分,why?
我们来看看如果你想摆脱第一种尴尬复杂赋值情况,那么就用构造方法,但是构造方法中形参和成员变量重名,你必须要在构造方法中来个this.price = price,将形参赋给成员变量,少掉this这个赋值是不生效的。代码如下:

class Book{
	private int price ;//主类访问不了这个price,只能通过getter,setter
	public Book(int price) {
		this.price = price;// TODO 自动生成的构造函数存根
	}

	public void price() {
		System.out.println("这本书"+price+"元");
	}


}
public class helloworldhaha {
	public static void main(String[] args) {
		Book b1 = new Book(20);		
		b1.price();
		
	}
}

3.构造方法是这样,成员方法呢?一样的如代码所示:(顺便看看构造方法和成员方法输出的区别)

class Book{
	private int price ;//主类访问不了这个price,只能通过getter,setter
	public Book() {
		// TODO 自动生成的构造函数存根
	}

	public void price(int price) {
		this.price = price;
		System.out.println("这本书"+price+"元");
	}


}
public class helloworldhaha {
	public static void main(String[] args) {
		Book b1 = new Book();		
		b1.price(20);
		
	}
}

补充一下构造方法中this的使用限制:

1.this只能在构造方法中调用其他构造方法;
2.this必须是构造方法的第一条语句;
3.不能在一个类的两个构造方法中使用this互相调用,会发生递归性函数调用错误;

成员变量:类中定义的变量(实例变量(没有static关键字)、类变量/静态变量、常量),也叫字段。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值