this关键字
1.this调用本类属性
当参数与类中属性同名,类中属性无法被正确赋值,此时应使用this关键字便可以正确给对象属性赋值。如果不使用this关键字,可能因就近原则导致赋值错误。以后在类中调用本类属性时请加上this关键字。只要在本类中访问类中属性,一定要加this关键字。
package www.qi.java;
class Person{
private String name;
private int age;
public Person(String name,int age) {
this.name = name; //this.name明确表示调用类中name属性就近原则,不再使用
this.age = age;
}
public void getpersonInfo(){
System.out.println("姓名:"+name+",年龄:"+age);
}
}
public class Day1 {
public static void main(String[] args){
Person per=new Person("张二",25);
per.getpersonInfo();
}
}
只要在本类中方法访问类中属性,一定要加this关键字
2.this调用本类方法
2.1调用本类普通方法:this.方法名称(参数 )
package www.qi.java;
class Person{
private String name;
private int age;
public Person(String name,int age) {
this.name = name;
this.age = age;//this.age表示本类属性
this.print("#############");//调用普通方法
}
public void print(String n){
System.out.println(n);
}
public String getpersonInfo(){
return "姓名:"+name+",年龄:"+age;
}
}
public class Day1 {
public static void main(String[] args){
Person per=new Person("张三",30);
System.out.print (per.getpersonInfo());
}
}
虽然调用本类中普通法方法不需要加this也可以正常调用,但是加上this的目的可以区分方法的定义来源。
2.2调用构造方法:
this(构造方法参数)——因构造方法与类名同名,所以省略方法名称,java中支持构造方法互相调用。
package www.qi.java;
class Person{
private String name;
private int age;
public Person() {
System.out.println("***产生一个新的person对象***");
}
public Person(String name) {
this();//调用本类中无参构造
this.name=name;
}
public Person(String name,int age) {
this(name);//调用本类有参构造
this.age=age;
}
public String getpersonInfo(){
return "姓名:"+name+",年龄:"+age;
}
}
public class Day1 {
public static void main(String[] args){
Person per1=new Person();
System.out.println (per1.getpersonInfo());
Person per2=new Person("张二");
System.out.println (per2.getpersonInfo());
Person per3=new Person("张三",30);
System.out.println (per3.getpersonInfo());
}
}
a.this调用构造方法的语句必须在构造方法首行(只有在调用构造方法中要求,普通方法无要求)
b.使用this调用构造方法时,必须留有出口(this调用构造方法不能成“环”,否则会形成递归)
3.this表示当前对象
只要对象调用了本类中的方法,这个this就表示当前执行对象,普通方法(非静态方法)必须使用对象调用。当前是哪个对象调用的普通方法,普通属性,this就表示是当前对象
package www.qi.java;
class Person{
public void fun(){
System.out.println("[FUN]方法:"+this);
}
}
public class Day1{
public static void main(String[] args){
Person p1=new Person();
System.out.println ("[MAIN]方法:"+p1);
p1.fun(); //同一对象
System.out.println ("*****************************");
Person p2=new Person();
System.out.println ("[MAIN]方法:"+p2);
p2.fun();
}
}
运行结果对比,表示是同一对象。