this关键字

在Java里面,利用this关键字可以实现类属性的调用,类方法的调用,表示当前对象。

public void setTitle(String title){
        this.title = title;    //这个this.title代表这个title是Boook类的属性
    }

在程序开发之中,要想访问类中的属性要在属性名前面加上this

其实 this 就是明确指代本类,属性和方法名称前面加上 this 则可以明确地表示这个是属于本类的属性和方法。

 

实例:构造方法之间的互相调用---this(参数,参数)

class Book{
    
    private String title;
    private double price;
    
    public Book(){
        System.out.println("创建一个实例化对象!");
    }
    public Book(String title){
        System.out.println("创建一个实例化对象!");
        this.title = title;
    }
    public Book(String title,double price){
        System.out.println("创建一个实例化对象!");
        this.title = title;
        this.price = price;
    }
    
    public void setTitle(String title){
        this.title = title;
    }
    public void setPrice(double price){
        this.price = price;
    }
    public String getTitle(){
        return title;
    }
    public double getPrice(){
        return price;
    }
    
    public String getInfo(){
        return "书名:" + title + " 价格:" + price;
    }
}

public class Demo{
    public static void main(String args[]){
        
        Book bk = new Book("Java入门到放弃",79.99);
        System.out.println(bk.getInfo());
    }
}
/*--------------------------------------
F:\Code>java Demo
创建一个实例化对象!
书名:Java入门到放弃 价格:79.99

F:\Code>*/

以上的代码,在构造方法的定义中出现了大量的重复代码,如果采用 this() 去调用构造方法,则可以省略一些代码

1. 使用 this() 调用构造方法形式的代码只能放在构造方法的首行

2. 进行构造方法的互相调用的时候,一定要保留调用的出口(即至少有一个函数不调用其他的构造函数)

class Book{
    
    private String title;
    private double price;
    
    public Book(){
        System.out.println("创建一个实例化对象!");
    }
    public Book(String title){
        this();
        this.title = title;
    }
    public Book(String title,double price){
        this(title);
        this.price = price;
    }
    
    public void setTitle(String title){
        this.title = title;
    }
    public void setPrice(double price){
        this.price = price;
    }
    public String getTitle(){
        return title;
    }
    public double getPrice(){
        return price;
    }
    
    public String getInfo(){
        return "书名:" + title + " 价格:" + price;
    }
}

public class Demo{
    public static void main(String args[]){
        
        Book bk = new Book("Java入门到放弃",79.99);
        System.out.println(bk.getInfo());
    }
}
/*--------------------------------------
F:\Code>java Demo
创建一个实例化对象!
书名:Java入门到放弃 价格:79.99

F:\Code>*/
//雇员类:empno, ename, job, sal, comm
class Emp{
    
    private int empno;
    private String ename;
    private String job;
    private double sal;
    private double comm;
    
    //构造方法
    public Emp(){}
    public Emp(int empno){
        this.empno = empno;
    }
    public Emp(int empno, String ename){
        this(empno);
        this.ename = ename;
    }
    public Emp(int empno,String ename,String job){
        this(empno, ename);
        this.job = job;
    }
    public Emp(int empno, String ename,String job,double sal){
        this(empno,ename,job);
        this.sal = sal;
    }
    public Emp(int empno,String ename,String job,double sal,double comm){
        this(empno,ename,job,sal);
        this.comm = comm;
    }
    
    public void getEmpno(int empno){
        this.empno = empno;
    }
    public void getEname(String ename){
        this.ename = ename;
    }
    public void getJob(String job){
        this.job = job;
    }
    public void getSal(double sal){
        this.sal = sal;
    }
    public void getComm(double comm){
        this.comm = comm;
    }
    
    public int getEmpno(){
        return empno;
    }
    public String getEname(){
        return ename;
    }
    public String getJob(){
        return job;
    }
    public double getSal(){
        return sal;
    }
    public double getComm(){
        return comm;
    }
    
    public String getInfo(){
        return
        "雇员编号:" + empno + "\n" +
        "姓名:" + ename + "\n" +
        "职位:" + job + "\n" +
        "基本工资:" + sal + "\n" +
        "佣金:" + comm;
    }
}

public class Demo{
    public static void main(String args[]){
        
        Emp emp = new Emp(1001,"蒋辉","eBay销售",6000.0,3000.0);
        System.out.println(emp.getInfo());
    }
}
/*--------------------------------------------
F:\Code>java Demo
雇员编号:1001
姓名:蒋辉
职位:eBay销售
基本工资:6000.0
佣金:3000.0

F:\Code>*/

 

this 表示当前对象:即表示当前正在调用类中的方法的对象

当bk1调用Book类中的 print()方法的时候,this的地址是bk1的地址;

当bk2调用Book类的方法的时候, this 的地址变成了 bk2的地址。

class Book{
    public void print(){
        System.out.println("this=" + this);
    }
}

public class Demo{
    public static void main(String args[]){
        
        Book bk1 = new Book();
        System.out.println("bk1 = " + bk1);
        bk1.print();
        System.out.println("------------------------");
        
        Book bk2 = new Book();
        System.out.println("bk2 = " + bk2);
        bk2.print();
        
    }
}
/*----------------------------------------
F:\Code>java Demo
bk1 = Book@27082746
this=Book@27082746
------------------------
bk2 = Book@66133adc
this=Book@66133adc

F:\Code>*/
class A{
    private B b;
    public A(){
        
        this.b = new B(this);    //step-2:this就是temp,实例化一个B类对象
        this.b.get();    //step-4:temp调用B类的get方法
    }
    public void print(){
        System.out.println("helloworld");    //step-6:输出helloword
    }
}

class B{
    private A a;
    public B(A a){
        this.a = a;    //step-3:a就是temp
    }
    public void get(){
        this.a.print();    //step-5:调用A类的print方法
    }
}

public class Demo{
    public static void main(String args[]){
        A temp = new A();    //step-1:实例化A类对象 temp;
    }
}
/*-----------------------------------------
F:\Code>java Demo
helloworld

F:\Code>*/

 

posted @ 2019-02-15 01:07  眉毛病  阅读(127)  评论(0编辑  收藏  举报