- this是一个关键字,翻译为:这个。
- this本质:this是一个引用、this是一个变量、this变量中保存了内存地址指向了自身,this存储在JVM堆内存Java对象内部。
public class Customer {
String name;
public Customer () {}
}
public class Test01 {
public static void main(String[] args) {
Customer c1 = new Customer();
c1.name = "张三";
Customer c2 = new Customer();
c2.name = "李四";
}
}
- 每一个对象都有this,也就说有N个不同的Java对象就有N个this。【this代表当前对象】
- 没有static关键字的方法被称为“实例方法”。没有static关键字的变量被称为“实例变量”。【实例成员怎么访问:“引用.”】。
- 当一个行为/动作执行的过程当中是需要有对象参与的,那么这个方法一定要定义为“实例方法”,不要带static关键字。
- 多数情况下“this.”是可以省略的。
- this出现在“实例方法”当中,this指向当前正在执行这个动作的对象(this代表当前对象)。
- static的方法调用不需要对象,直接“类名.方法名”,所以执行过程中没有当前对象,所以方法体中不能使用“this”。所以静态方法中不能直接使用实例变量和实例方法,必须先创建对象。this不能使用在带有static的方法中。
public class User {
String name;
public static void doOther () {
//如果想在静态方法中访问实例变量可以使用这种方法,但是这种方法访问的就不是当前对象的实例变量了
User u = new User();
System.out.println(u.name);
}
}
- 实例方法必须先创建对象,通过“引用.”的方式访问。
- 不管在那里调用方式只有两种:
- 引用. :调用实例相关的东西(包括实例方法、实例变量),只不过在本类中调用本类的实例东西,可以省略“引用.”系统自动补全“this.”。在其它类和静态方法中调用本类的实例东西,就必须先创建本类对象,再使用“引用.”的方式调用。
- 类名. :调用静态相关的东西(包括静态方法、静态变量)。在本类中直接调用静态的东西可以省略“类名.”,系统自动补全“本类名.”。在其他类中调用静态的东西必须加上 “类名.”。
public class User {
String name;
public void setName (String name) {
//用来区分局部变量和实例变量的时候“this.”不能省略
this.name = name;
}
}
- this可以用在哪里?
- 可以用在实例方法中,代表当前对象【语法格式:this.】。
- 可以用在构造方法中,通过当前构造方法调用其他构造方法【语法格式:this(实参);】
public class User {
String name;
public User() {
this("张三");
}
public User(String name) {
this.name = name;
}
}
- 构造函数之间可以通过“this(实参列表)”相互调用。并且须是在构造方法的第一条语句【说明在一个构造方法中调用别的构造方法只能调用其他构造方法其中的一个并且只能调用一次,不能自己调用自己,也说明了构造方法执行不一定创建对象】。
- 必须是在构造方法中才可以调用其他构造方法。普通方法中不能调用构造方法。
- 构造方法中虽然有“this”(当前对象),因为构造方法不能显示的调用,所以在构造方法中不存在“引用.构造方法名(实参列表)”的方式调用其他构造方法。【不存在“this.构造方法名(实参列表)”】.跟不可能通过类名直接调用,因为构造方法中有“this”(当前对象)。