Java的this关键字
this关键字在Java中的用处
一. this调用本类属性
用法:this.属性名
作用:明确表示调用类中的同名属性
class Person{
private String name;
private int age;
public Person(String name){
name = name;
}
public String getName(){
return this.name;
}
}
public class Test{
public static void main(String[] args) {
Person person1 = new Person("李四");
System.out.println("姓名" + person1.getName());
}
}
上面的代码输出的是 姓名null,“李四”并没有赋给name。实际上当类中属性和形式参数同名时name=name只是形式参数之间的赋值,和类的属性无关。当参数与类中属性同名时,类中属性无法被正确赋值。此时我们加上this关键字便可以正 确给对象属性赋值,即this.name = name.
只要在类中方法访问类中属性,一定要加this关键字。
二. this调用本类方法
this调用本类方法有两种情况
a.调用普通方法 用法-----this.方法名称(参数)
b.调用构造方法 用法-----this(参数)
a.this调用本类方法
class Person{
private String name;
private int age;
public Person(String name){
this.name = name;
this.print();
}
public void print(){
System.out.println(this.name);
}
}
public class Test{
public static void main(String[] args) {
Person person1 = new Person("李四");
}
}//输出 李四
虽然调用本类普通方法不需要加this也可以正常调用。但强烈建议加上,加上this的目的可以区分方法的定义来源 (在继承中有用)
b.this调用构造方法
Java中用this调用构造方法主要用于构造方法的相互调用
public Person(){
System.out.println("产生一个新的Person对象");
}
public Person(String name){
this();
this.name = name;
}
public Person(String name,int age){
this(name);
this.age = age;
}
在Java中3个构造方法可以这样写,这样每产生一个对象都会调用一次无参构造方法,有些重复操作我们可以写在无参构造方法中,无需在每一个构造方法中都写一遍,能有效减少代码量.
使用this调用构造方法时请注意:
1. this调用构造方法的语句必须在构造方法首行(否在编译期间报错)
2. 使用this调用构造方法时,要留有出口,不可以构成环(如果构成环则编译时会报错,错误为递归构造器调用)
三. this表示当前对象
class Person{
private String name;
public Person(String name){
this.name = name;
}
public void compare(Person p){
Person p1 = this;//表示当前调用方法的对象,在此程序中为person1
Person p2 = p;
if(p1.name==p2.name)
System.out.println("两个对象name相同");
else {
System.out.println("两个对象name不相同");
}
}
}
public class Test{
public static void main(String[] args) {
Person person1 = new Person("张三");
Person person2 = new Person("张三");
person1.compare(person2);
}
}
//输出 两个对象name相同
注意这个比较函数,一般比较函数需要2个参数,但Java中只要对象调用了本类中的方法,这个this就表示当前执行的对象,这样我们就获得了比较参数的一个参数,只要传入另一个参数就可以完成比较.