一,this关键字的引入
this表示当前对象(本对象)
class T{
int a=10;
public void test(){
int a=20;
/*
下面的输出语句会直接找test方法执行空间中的a
System.out.println("a="+a); 20
如何输出10?如何直接使用成员变量?
使用this来指明要输出的是本类对象的成员变量a的值
System.out.println("a="+this.a);
*/
}
}
public class ObjectDemo01{
public static void main(Striing[] args){
T tt=new T();
tt.test(); //10
T tt1=new T();
tt1.a=30;
tt1.test(); //30
}
}
二,this关键字常见使用方法
1,this指当前对象
2,this只能写在类的内部,不能写在类的外部。
3,this可以用在方法方法内部使用,说明普遍的方法中是默认有this关键字的。
4,使用this访问成员变量。 语法:this.成员变量名称
5,使用this访问成员方法。 语法:this.方法名称(参数值)
6,使用this可以在一个构造方法内调用另一个构造方法。 语法:this(参数值)
class T2{
int a=10;
public void test(){
System.out.println("成员方法test");
}
//使用this访问成员变量
public void test1(){
//以下的输出语句会先在当前执行空间找变量a;如果没有找到再去对象的成员变量a;
System.out.println("a="+a); //10
this.a=40;
System.out.println("a="+this.a);//直接定位到对象的成员变量a。
}
//使用this访问成员方法
public void test2(){
System.out.println("成员方法test2");
test();
//this.test();
//以上两句代码test()和this.test()是同等级的。
//实际上test()代码的执行最终就是按this.test()执行的。
}
}
public class ObjectDemo02{
public static void main(String[] args){
T tt1=new T();
//tt.test();
//this.test();this只能在T类内部。
//tt.test1();
tt1.test2();
T tt2=new T();
tt2.test2();
}
}
三,this关键字的内存图解
class Cat{
String name;
int age=1;
public void cotchMouse{
ystem.out.println("猫抓老鼠");
}
}
public class ObjectDemo03{
public static void main(String[] args){
Cat c1=new Cat();
c1.name="小三";
c1.age=3;
c1.cotchMouse();
Cat c2=new Cat();
c2.name="小二";
c2.age=1;
c2.cotchMouse();
}
}
注:这里多了两步。
1,成员变量已有初始化值,对象开辟空间默认初始化值,再把成员变量已有的显示化指放入成员变量中。 int age=1;(这个是显示化指)
2,对象开辟空间后,所有成员变量显示化值之后,马上开辟this空间,指向本对象。
四,一个对象的创建
加载
把类的描述信息放入内存
创建
在堆内存为对象开辟空间
为成员变量开辟空间并默认初始化
为成员变量初始化
为this和super开辟空间
使用
五,带有this关键字的class代码
class Student{
private int age;
//setter getter
public void setAge(int age){
this.age=age;
}
public int getAge(){
return age;
}
}
public class ObjectDemo04{
public static void main(String[] args){
System.out.println("game over");
}
}