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关键字)、类变量/静态变量、常量),也叫字段。