JAVA中的this关键字

在JAVA中this可以完成三件事情:调用本类属性、调用本类方法、表示当前对象

  1. 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关键字,所以可以在变量名称相同的情况下,明确的区分属性或参数,传递的内容也可以正常赋值

  2. 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());
          }
      }
      ​
  3. 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
    ​
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值