首先,讲解this的用法之前,了解下
1、创建对象的过程
(1)在第一次遇到一个类的时候,对这个类要进行加载,只加载一次。
(2)创建对象,在堆中开辟空间
(3)对对象进行初始化操作,属性赋值都是默认的初始值。
(4)new关键字调用构造器,执行构造方法,在构造器中对属性重新进行赋值
this指代的就是当前对象
2、this关键字用法
(1)this可以修饰属性
当属性名字和形参发生重名的时候,或者属性名字和局部变量重名的时候,都会发生就近原则,所以如果要是直接使用变量名字的话,就指的是离的近的那个形参或者局部变量,这时候如果我想要表示属性的话,在前面要加上 this. 修饰。
如果不发生重名问题的话,实际上你要是访问属性也可以省略this。
(2)this可以修饰方法
在同一个类中,方法可以互相调用,this.可以省略不写。
(3)this可以修饰构造器
同一个类中的构造器可以相互用this调用。
(注意:this修饰构造器必须放在第一行 (不然会报错))
3、代码示例
Person类:
package Package8_face_the_object.test_this;
public class Person {
int age;
String name;
double height;
//构造器
//无参构造器
public Person() {
}
//三个参数的构造器
/* public Person(int a,String b,double c){
age = a;
name = b; //这里,其实前面的age、name、height省略了this
height = c;
}*/
//不够见名知意,故:
public Person(int age,String name,double height){
//this.age = age;
//this.name = name; //记住:必须要加上this ——> 1、this修饰属性的用法
//同理,上面这两行代码也在下面的构造器中重复了
//故:
this(age,name); //3、this可以修饰构造器
this.height = height;
//this(age,name); //不可以放在上面这行代码的下面,因为this修饰构造器必须放在第一行
}
//两个参数的构造器
public Person(int age,String name){
//this.age = age;
// 上面这行代码/逻辑 在下面(一个参数的构造器)中也有,所以这里就可以不用写了
//而是直接调用
this(age);
this.name = name;
}
//一个参数的构造器
public Person(int age){
this.age = age;
}
//方法
public void eat(){
int age = 10;
System.out.println(age);//就近原则:这里的age指的是离他近的age——>局部变量的age
//我想输出我上面创建的属性——>age
System.out.println(this.age); // 用this即可(避免就近原则)
System.out.println("我喜欢吃饭!");
}
public void play(){
//System.out.println("吃饭"); //注意:这一行代码跟下面的play_again()方法重复了
//2、this可以修饰方法的用法
//为避免重复,可以直接调
/*this.*/play_again(); //这样调用的时候,其实就是this.play_again(),只不过是省略了
System.out.println("上网");
System.out.println("洗澡");
}
public void play_again(){
System.out.println(/*this.*/age);//这里没有就近原则,故不存在重名问题,所以this.就可以省略
System.out.println("吃饭");
}
}
Test类(主函数main())
package Package8_face_the_object.test_this;
//this 的用法
/*
【1】创建对象的过程:
(1)在第一次遇到一个类的时候,对这个类要进行加载,只加载一次。
(2)创建对象,在堆中开辟空间
(3)对对象进行初始化操作,属性赋值都是默认的初始值。
(4)new关键字调用构造器,执行构造方法,在构造器中对属性重新进行赋值
*/
/*
this关键字 用法:
1、this修饰属性的用法
2、this可以修饰方法的用法
3、this可以修饰构造器
*/
public class Test {
public static void main(String[] args) {
int age =0;
String name = " ";
Person p = new Person(19,"lili",160.6);
System.out.println(p.age+"\t"+p.name+"\t"+ p.height); //记得加p.
p.eat();
p.play();
//调用不同的构造器
Person p2 = new Person(14,"小明");
System.out.println("两个构造器:"+p2.age+"\t"+p2.name); //记得加p2.
Person p3 = new Person(99);
System.out.println("一个构造器:"+p3.age);
}
}