在JAVA中this可以完成三件事情:调用本类属性、调用本类方法、表示当前对象
-
this调用本类属性
使用this关键字明确地表示访问类中的属性
package thismethon; /** * this调用本类属性 */ class Book{ private String title; //定义书名 private double price; //价格 //定义构造方法 //无参 public Book() { } //有参 public Book(String title, double price) { this.title = title; this.price = price; } //定义get和set方法 public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } //定义方法输出 public String getInfo(){ return "书名:"+title+",价格:"+price; } } public class this调用本类属性 { public static void main(String[] args) { //实例化对象 Book b=new Book("java",30); System.out.println(b.getInfo()); } }
本程序由于构造方法中访问属性增加了this关键字,所以可以在变量名称相同的情况下,明确的区分属性或参数,传递的内容也可以正常赋值
-
this调用本类方法
this关键字在本质上指的就是明确进行本类结构的标志
(1).调用普通方法(使用"this.方法()")
调用本类的普通方法:
package thismethon; /** * this调用本类普通方法 */ class Book1{ private String title;//定义书名 private double price;//价格 //定义无参和有参构造 public Book1() { } public Book1(String title, double price) { this.title = title; this.price = price; } //定义get和set方法 public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } //定义print方法打印一句话 public void print(){ System.out.println("今天天气真好适合看书敲代码"); } //定义方法输出 public String getInfo(){ this.print();//调用本来普通方法 return "书名:"+title+",价格:"+price; } } public class this调用本类普通方法 { public static void main(String[] args) { Book1 book1=new Book1("html",40);//实例化对象 System.out.println(book1.getInfo()); } }
(2).调用构造方法(使用"this()")
调用本类的构造方法:
package thismethon; /** * this调用本类的构造方法 */ class Book2{ private String title;//书名 private double price;//价格 //定义构造方法 //无参 public Book2() { System.out.println("今天是个好日子"); } //单参 public Book2(String title) { this(); this.title = title; } //双参 public Book2(String title, double price) { this(title); this.title = title; this.price = price; } //定义get和set方法 public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public Double getPrice() { return price; } public void setPrice(double price) { this.price = price; } //定义输出方法 public String getInfo(){ return "书名:"+title+",价格:"+price; } } public class this调用本类的构造方法 { public static void main(String[] args) { Book2 book2=new Book2("css",50); System.out.println(book2.getInfo()); } }
关于this调用构造的限制:
-
使用"this()"调用构造方法形式的代码只能够放在构造方法的首行
-
进行构造方法互相调用时,一定要保留调用的出口
this关键字调用方法的实例:
package thismethon; /** * this关键字调用方法练习 * 定义一个雇员类(编号、姓名、工资、部门),在这个类中提供以下四个构造方法 * 无参构造:编号为0,姓名为无名氏,工资为0.0,部门设置为暂定 * 单参构造(传递编号),姓名为"临时工",工资为800.0,部门为后勤 * 双参狗杂(传递编号、姓名),工资为2000.0,部门为技术部 * 四参构造 */ class Emp{ private int empno;//编号 private String empme;//姓名 private double sal;//工资 private String dept;//部门 //按照要求定义构造方法 //无参 public Emp() { this(0,"无名氏",0.0,"暂定");//调用四参方法 } //单参 public Emp(int empno) { this(empno,"临时工",800.0,"后勤部");//调用四参方法 } //双参 public Emp(int empno, String empme) { this(empno,empme,2000.0,"技术部"); } //四参 public Emp(int empno, String empme, double sal, String dept) { this.empno = empno; this.empme = empme; this.sal = sal; this.dept = dept; } //定义get和set方法 public int getEmpno() { return empno; } public void setEmpno(int empno) { this.empno = empno; } public String getEmpme() { return empme; } public void setEmpme(String empme) { this.empme = empme; } public double getSal() { return sal; } public void setSal(double sal) { this.sal = sal; } public String getDept() { return dept; } public void setDept(String dept) { this.dept = dept; } //定义方法输出 public String getInfo(){ return "编号:"+empno+",姓名:"+empme+",工资:"+sal+",部门:"+dept; } } //定义测试类 public class this关键字调用方法练习 { public static void main(String[] args) { //实例化对象 Emp emp=new Emp(); Emp emp1=new Emp(1); Emp emp2=new Emp(2,"小齐"); Emp emp3=new Emp(3,"小罗",8000.0,"策划部"); System.out.println(emp.getInfo()); System.out.println(emp1.getInfo()); System.out.println(emp2.getInfo()); System.out.println(emp3.getInfo()); } }
-
-
this表示当前对象
this关键字在应用的过程中有一个最为重要的概念----当前对象,而所谓的当前对象指的就是当前正在调用类中方法的实例化对象
对象输出问题:实际上所以的引用类型数据都是可以打印输出的,默认情况下输出会出现一个对象的编码信息
直接输出对象:
package thismethon; /** * this表示当前对象 */ class Book3{ public void print(){ //调用print()方法的对象就是当前对象,this就自动与此对象 指向同一块内存空间 System.out.println("this="+this);//this就是当前调用方法的对象 } } public class this表示当前对象 { public static void main(String[] args) { //实例化对象 Book3 book1=new Book3(); System.out.println("book1="+book1);//主方法中输出Book类对象 book1.print();//调用Book类的print()方法输出,此时book1为当前对象 System.out.println("==============================="); Book3 book2=new Book3(); System.out.println("book2+"+book2);//主方法中输出Book类对象 book2.print();//调用Book类的print()方法输出,此时book2为当前对象 } } //程序执行结果为: book1=thismethon.Book3@1b6d3586 // this=thismethon.Book3@1b6d3586 // =============================== // book2+thismethon.Book3@4554617c // this=thismethon.Book3@4554617c