一、什么是this
Java虚拟机会给每个对象分配this,代表当前对象。
案例演示:
public class This01 {
public static void main(String[] args) {
Dog dog1 = new Dog("大黄", 5);
dog1.info();
}
}
class Dog {
String name;
int age;
public Dog(String name, int age) {
//this.name就是当前对象的属性name
this.name = name;
//this.age就是当前对象的属性age
this.age = age;
}
public void info() {//成员方法 输出属性信息
System.out.println("name= " + name + "age= " + age);
}
}
二、深入理解this
哪个对象调用,this就代表哪个对象
内存图:
三、this的注意事项和使用细节
1、this关键字可以用来访问本类的属性、方法、构造器。
2、this用于区分当前类的属性和局部变量
3、访问成员方法:this.方法名(参数列表)
ublic class ThisDetail {
public static void main(String[] args) {
T t1 = new T();
t1.f2();
}
}
class T {
//访问成员方法的语法:this.方法名(参数列表)
public void f1() {
System.out.println("f1() 方法被调用");
}
public void f2() {
System.out.println("f2() 方法被调用");
//掉用本类f1
//第一种方式
f1();
//第二中方式
this.f1();
}
}
4、访问构造器方法:this(参数列表);只能在构造器中使用,this语句必须为第一行
ublic class ThisDetail {
public static void main(String[] args) {
T t1 = new T();
}
}
class T {
/*
访问构造器语法:this(参数列表)
注意只能在构造器中使用(即只能在构造器中访问另外一个构造器)
必须放置在第一天语句
*/
public T() {
this("jack", 100);
System.out.println("T() 构造器");
}
public T(String name, int age) {
System.out.println("T(String name, int age) 构造器");
}
}
5、this不能在类定义的外部使用,只能在类定义的方法中使用。
四、入门练习
定义Person类,里面有name,age属性,并提供compareTo比较方法
用于判断是否和另外一个人相等如果名字和年龄完全一样,就返回true否则返回false
public class TestPerson {
public static void main(String[] args) {
Person p1 = new Person("jack", 10);
Person p2 = new Person("maye", 12);
System.out.println("两个人的信息比较结果=" + p1.compareTo(p2));
}
}
/*
定义Person类,里面有name,age属性,并提供compareTo比较方法
用于判断是否和另外一个人相等如果名字和年龄完全一样,就返回true否则返回false
*/
class Person {
String name;
int age;
//构造器
public Person(String name, int age) {
this.name = name;
this.age = age;
System.out.println("this.name=" + this.name + " this.age=" + this.age);
}
public boolean compareTo(Person p) {
System.out.println("p.name=" + p.name + " p.age=" + p.age);
return this.name.equals(p.name) && this.age == p.age;
}
}