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>*/