this可以算是Java里面比较复杂的关键字,因为this的使用形式上决定了它的灵活性,在程序里面,使用this可以实现以下三类结构的描述:
- 当前类中的属性:this属性;
- 当前类中的方法(普通方法、构造方法):this()、this.方法名称();
- 描述当前对象;
使用this调用当前类中属性
通过现在的分析可以发现,利用构造方法或者是setter方法都可以进行类中的属性的赋值,但是在进行赋值的时候,之前采用的是如下的定义形式:
class Person { //定义一个类
private String name; //人员的姓名
private int age; //人的年龄
//方法名称与类名称相同,并且无返回值定义
public Person(String n,int a){ //定义有参构造
name = n; //为类中的属性赋值(初始化)
age = a; //为类中的属性赋值(初始化)
}
public void tell(){
System.out.println("姓名:"+name+"、年龄:"+age);
}
}
public class JavaDemo { //主类
public static void main(String [] args){
Person per = new Person("王五",20);
per.tell();
}
}
但是这个时候在构造方法定义的过程之中会发现有一点点问题:
public Person(String n,int a){
name = n;
age = a;
}
这个问题出现在参数名称上,可以发现,此时构造方法中两个参数的目的是为了类中的name或age属性初始化,但是现在却发现此时的代码n和a参数名称不好。
如果说现在将构造方法中的参数名称修改为name、age,则发现无法进行属性的正确设置:
public Person(String name,int age){
name = name;
age = age;
}
在Java程序之中“{}”是作为一个结构体的边界符,那么在程序里面当进行变量(参数、属性都称为变量)使用的时候都会以“{}”作为一个查找边界,所以按照就近取用的原则,此时的构造方法并没有能够访问类中的属性,所以此时为了明确的标记出类中的属性与参数的区别,往往会在属性前追加一个“this”,表示本类属性。
class Person { //定义一个类
private String name; //人员的姓名
private int age; //人的年龄
//方法名称与类名称相同,并且无返回值定义
public Person(String name,int age){ //定义有参构造
this.name = name; //为类中的属性赋值(初始化)
this.age = age; //为类中的属性赋值(初始化)
}
public void tell(){
System.out.println("姓名:"+this.name+"、年龄:"+this.age);
}
}
public class JavaDemo { //主类
public static void main(String [] args){
Person per = new Person("王五",20);
per.tell();
}
}
在你以后所编写的程序代码之中,只要是访问本类中属性的时候,请一定要加上“this”实现访问。
网友评论