this
public class This01{
public static void main(String[] args){
Dog dog = new Dog("doby", 3);
System.out.println("doby.harshCode:\t" + dog.hashCode());
}
}
class Dog{
String name;
int age;
public Dog(String name, int age){
this.name = name;
this.age = age;
System.out.println("this.hashCode:\t" + this.hashCode());
}
}
this.hashCode: 366712642
doby.harshCode: 366712642
- java虚拟机会给每个对象分配this,代表当前对象。
- 简单地说,哪个对象调用,this就代表哪个对象
注意事项和使用细节
-
this关键字可以用来访问本类的属性、方法、构造器
-
this用于区分当前类和局部变量
-
访问成员方法的语法:this.方法名(参数列表)
class T{ public void f1(){} public void f2(){ f1();//1 this.f1();//2 //两种方法任选一种 } }
-
访问构造器语法:this(参数列表),注意只能在构造器中使用,且要放在第一行
class T{ public T(){ this("jack", 100);//这里调用了T(String name, int age)构造器 System.out.println("T()"); } public T(String name, int age){ System.out.println("T(String name, int age)"); } }
T t = new T();
T(String name, int age) T()
-
this不能在类定义的外部使用,只能在类定义的方法中使用
练习
定义Person类,里面有name,age属性,并提供compareTo比较方法,用于判断是否和另一个人相等
public class This03{
public static void main(String[] args){
Person p1 = new Person("Amy", 20);
Person p2 = new Person("Emliy", 20);
System.out.println(p1.compareTo(p2));
}
}
class Person{
String name;
int age;
public Person(String name, int age){
this.name = name;
this.age = age;
}
public boolean compareTo(Person p){
return this.name.equals(p.name) && this.age == p.age;
}
}