zoukankan      html  css  js  c++  java
  • java中的神奇"this"

    java中的神奇"this",神奇的原因事它能不用new就可以直接创造一个对象出来,后来研究发现,其实java的“this”使用时,也是"new"了一个当前的对象,不过这些操作我们看不到,因为其实是虚拟机jvm帮我们"new"了;

    方法体中,有和成员变量重名的局部变量,啥都不加访问的是局部变量,this点出来的是成员变量,super点出来的是其父类的同名成员变量;

    记录一个有趣的错误:

     
        // 咨询回复内容
        public String answer = "";
    
        // 咨询回复时间
        public String answerDate = "";
    
         // 咨询回复内容
        public String getAnswer() {
            return answer;
        }
        
        public void setAnswer(String answer) {
            answer = StringUtil.isBlank(answer) ? "" : answer;
        }
        
        // 咨询回复时间
        public String getAnswerDate() {
            return answerDate;
        }
        
        public void setAnswerDate(String answerDate) {
            answerDate = StringUtil.isBlank(answerDate) ? "" : answerDate;
        }

    其中,这是一个类中定义了两个成员变量,自己手动加了对应的构造方法,以变量 answe 为例,在它的set方法中,方法体中的answer变量实际是它的入参,而不是这个类定义的那个成员变量,这样在调用这个类,然后点set设置其这个属性值的时候会一直是空,接口传回页面的值自然也是空,调试如图:

    问题就是出在没有使用神奇的“this”,因为之前是手动加了对应的构造方法,变量名都是直接赋值的类定义的成员变量,现在用快捷键自动为这两个成员变量添加set和get构造方法:

    添加后的构造方法是:

        // 咨询回复
        public String getAnswer() {
            return answer;
        }
    
        public void setAnswer(String answer) {
            this.answer = StringUtil.isBlank(answer) ? "" : answer;
        }
    
        // 咨询回复时间
        public String getAnswerDate() {
            return answerDate;
        }
    
        public void setAnswerDate(String answerDate) {
            this.answerDate = StringUtil.isBlank(answerDate) ? "" : answerDate;
        }

    其中,还是以 answer 变量为例,构造方法的方法体中,加了“this”之后就变成了这个类的成员变量,后面进行非空判断规避异常的处理中的 answer 变量就是该方法的入参了,区别就是这个;

    这时候再通过调用接口,前端调试:

    就是可以调用这个类的成员变量的get/set构造方法进行获取和赋值了;

    它的机制原理就是在”this“的时候jvm会自动"new"一个这个类的实例,然后点set这个方法;

  • 相关阅读:
    MongoDB索引实战技巧
    解决scp/ssh提示输密码慢问题
    mac系统忘记root密码的解决办法
    Javascript DataGrid using the MVC
    便捷的安全检测
    北京出现NW28开头假钞 天津已有相同案例
    12月编程语言排行榜:C#前途无量
    实时股票数据接口大全
    [一定要看完]住在隔壁的刚毕业的大学生小夫妻
    [行業]金山卫士宣布开源 用透明对抗360
  • 原文地址:https://www.cnblogs.com/wmqiang/p/10557570.html
Copyright © 2011-2022 走看看