• 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这个方法;

  • 相关阅读:
    lottie 动画
    .netcore 跨域问题
    数据库规范
    课程总结
    Beta版本发布
    个人作业-Alpha项目测试
    第三次作业结对编程
    第二次作业-熟悉使用工具
    第一次阅读作业
    个人作业-Alpha项目测试
  • 原文地址:https://www.cnblogs.com/wmqiang/p/10557570.html
Copyright © 2020-2023  润新知