参考:Java从入门到精通 第五版 清华大学出版社
在提到这个关键字之前,要先看看关于类的一些基本概念:
1.成员对象和成员方法
我们知道类是一种抽象的数据类型,是对某一类事物整体的描述。类是封装对象的属性和行为的载体。而其中,属性是以成员变量的形式存在,对象的方法是以成员方法的形式存在。
先看看下面一段代码:
public class Book{
private String name; //定义 String 类型成员变量
public String getName() { //定义成员方法
int id = 0; //局部变量
setName("java"); //调用该类中的其他方法
return id + this.name;
}
private void setName(String name) { //定义成员方法
this.name = name; //将参数赋值给类中的成员变量
}
public Book getBook() { //返回Book类引用
return this;
}
}
可以看到:
- 用关键字class来定义类Book,同时在Book类中定义了一个成员变量。
- 在Book类中定义了2个成员方法getName(),setName()。同时,在该成员方法中可以调用其他成员方法和类成员变量。同时,在该成员方法中也可以自定义一个变量,这个变量就局部变量。
- 权限修饰符作用是控制对类和类的成员变量以及成员方法的访问权限。这里有一个表:
引用自 :Java从入门到精通 第五版 清华大学出版社
这里权限范围的大小从小到大排序为 private protected piblic ,也会在继承中方法的重写中用到
这里注意:当声明类是不使用上述的权限修饰符的时候,则这个类预设为包存取范围,即只有一个包中的类可以调用这个类的成员方法或成员变量。例如:下面两段代码等价,虽然成员方法的权限设置为public,但Java规定类的权限设定会约束成员的权限设定。
class AnyClass{
public void doSting() {
//.....
}
}
//
class AnyClass{
void doSting() {
//.....
}
}
2.this关键字
现在来总结一下this关键字,还是看到上面的那一段代码:
- 注意到,这里成员变量的名称和成员方法中的形参名是相同的为name,那么如何在类中去区分这两个变量呢,在Java中规定使用this关键字来代表本类对象的引用,如例子中this.name指的是成员变量,=号后面的则是形参。
- 实际上,this就是对本类中一个对象的引用,当局部变量或者方法参数名称覆盖了成员变量名时,就会添加this加以区分。
- 除此之外,this还可以作为方法的返回值,如最后一段代码,定义了getBook类的方法,return this 是对Book类的对象进行返回。