java this关键字

1.java中 this可以完成三件事:表示本类属性、表示本类方法和当前对象.

1.1 "this.属性"表示本类属性
本程序通过构造方法传递两个初始化参数,而后调用了getlnfo()方法返回类的信息.
在这里插入图片描述

这时构造方法的两个参数的目的是为类中的name和age两个初始化,可是这个方法中的两个参数一个是字母n,另一个是字母a,这表示的完全不明确,既然构造方法的两个参数是为name和age属性初始化使用的,那么就将名称定义为name和age才最合适.

public Person(String n,int a){
           name=n;
           age=a;
}

运行结果在这里插入图片描述
1.2修改构造方法
在这里插入图片描述运行结果
此时的构造方法上的两个参数的名称变得有意义了,但是属性却没有内容了,因为在程序中是以"{}"作为一个分界,采用就近的取用原则.
所以为了可以明确指定要操作的是类中属性,采用"this.属性"的形式完成.
在这里插入图片描述
修改代码
在这里插入图片描述
运行结果
使用“this.属性”格式后,可以将正确的数值赋值给指定的属性.
只要是调用类中属性的情况,都要使用"this.属性"的方式进行表达.
在这里插入图片描述

2.调用本类方法
在一个类中,现在主要就是两种方法(普通方法、构造方法),而要调用本类方法也 就分为两种形式.
1.调用本类普通方法:如果现在要调用的是本类方法,则可以使用"this.方法()“调用.
2调用本类构造方法:在一个构造中要调用其他构造使用"this()调用”.

2.1 现在存在三个构造函数(无、一个、二个参数),但是不管使用哪个构造方法,都要求在实例化对象产生的时候输出一行提示信息"一个新的类对象被实例化(加上为50行代码)".
在这里插入图片描述
运行结果
不管哪各构造方法,都可以完成指定信息输出,如果为50行的代码的量,会出现重复代码,为了减少重复代码,可以利用this()来完成.
在这里插入图片描述

代码如下
有两个参数构造方法(public Pers2(String name,int age))里,使用"this(name)"调用了一个有参数的构造方法( public Pers2(String name)),而一个参数的构造方法又使用了"this()"调用了无参构造方法,从而实现了构造方法互相调用.
在这里插入图片描述
运行结果
在这里插入图片描述
2.2 在使用this调用构造方法时要注意
所有的构造方法是在对象实例化时被默认调用的,而且是在调用普通方法之前调用,所以使用"this()"调用构造方法的操作一定要放在构造方法的首行.
所以使用‘’this()‘’要放在构造方法首行,放在构造方法之中.
如果类中存在多个构造方法,构造方法都使用了this()互相调用,那么至少要保留一个构造方法没有调用其他构造,作为程序的出口.

2.3 this可以解决代码重复问题
通过this语法,很好解决了构造方法中代码重复问题.构造方法相互调用的操作是在对象实例化时,不同的构造方法在一些相同操作的情况下会使用.

package lesson12;

class Emp{
    private  int empno;
    private String ename;
    private double salary;
    private String dept;

    public Emp(){

    }
    public Emp(int empno){   //调用四个参数的构造
        this.empno=empno;
        this.ename="无名氏";
        this.salary=0.0;
        this.dept="未定";
//        this(empno,"无名氏",0.0,"未定");
    }
    public Emp(int empno,String ename){
        this.empno=empno;
        this.ename=ename;
        this.salary=1000.0;
        this.dept="后勤";
//        this(empno,ename,1000.0,"后勤");
    }

    public Emp(int empno,String ename,double salary,String dept){
        this.empno=empno;
        this.ename=ename;
        this.salary=salary;
        this.dept=dept;
    }
    public String getlnfo(){
        return "雇员编号:"+this.empno+",姓名:"+this.ename+",工资:"+this.salary+",部门:"+this.dept;
    }
}

public class TestDeo3 {
    public static void main(String[] args) {
        Emp emp=new  Emp(1);
        System.out.println(emp.getlnfo());
    }

}

package lesson12;

class Emp{
    private  int empno;
    private String ename;
    private double salary;
    private String dept;

    public Emp(){

    }
    public Emp(int empno){   //调用四个参数的构造
        this(empno,"无名氏",0.0,"未定");
    }
    public Emp(int empno,String ename){
        this(empno,ename,1000.0,"后勤");
    }

    public Emp(int empno,String ename,double salary,String dept){
        this.empno=empno;
        this.ename=ename;
        this.salary=salary;
        this.dept=dept;
    }
    public String getlnfo(){
        return "雇员编号:"+this.empno+",姓名:"+this.ename+",工资:"+this.salary+",部门:"+this.dept;
    }
}

public class TestDeo3 {
    public static void main(String[] args) {
        Emp emp=new  Emp(1);
        System.out.println(emp.getlnfo());
    }

}

3.this表示当前对象
当前对象指的是当前正在调用本类方法的操作对象.

package lesson12;

class Demo{
    void print(){
        System.out.println("当前对象:"+this);  //直接输出this
    }
}
public class TestDeo4 {
    public static void main(String[] args) {
        Demo demo1=new Demo();
        Demo demo2=new Demo();
        System.out.println(demo1);     //直接输出对象
        demo1.print();     //调用方法,即:输出this
        System.out.println("======");
        System.out.println(demo2);    //直接输入对象
        demo2.print();   //调用方法,即:输出this

    }



}

运行结果
对象直接输出所返回的是一个对象的编码,当前正在调用类中方法的对象为当前对象,而所有的当前对象都使用this来表示(之前的"this.属性"就表示当前对象的属性).
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值