java中this关键字详解

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();
     }
}

运行结果对比,表示是同一对象。
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值