• Java中this关键字的作用


    This 的作用

    • 解决类变量与局部变量重名问题
    • this永远代表的是调用某个变量或方法的类对象

    先看看没有this的情况

    class Person {
    
        private String name;
    
        Person(String name) {
            name = name;//这里的两个name都是构造方法形参的name,与类变量name无关
        }
    
        public void speak() {
            System.out.println("I am:" + name);
        }
    
    }
    
    
    class PersonTest {
        public static void main(String[] args) {
            Person person = new Person("武则天");
            person.speak();
    
        }
    }

    结果:

    I am:null

    由结果可见,我们调用有参构造方法的参数并没有传递给Person的类变量“name”

    加上this关键字

    Person(String name) {
            this.name = name;
        }

    结果

    I am:武则天

    二:this在构造函数之间的调用

    class Person {
    
        private String name;
        private String position;
    
        Person(String name) {
            this.name = name;
        }
    
        Person(String name,String position){
            this(name);//注意:这里的this后面没有小数点,它就是代表一个对象的引用
            this.position=position;
        }
    
        public void speak(){
            System.out.println(name+"是大唐的"+position);
        }
    
    }
    
    
    class PersonTest {
        public static void main(String[] args) {
            Person p1 = new Person(" 狄仁杰","宰相");
            p1.speak();
    
        }
    }

    结果

    狄仁杰是大唐的宰相

     

    this的位置很重要。在构造函数当中,this必须放在第一行。

    如下:把this(name)没有放在第一行,此时idea立即报错并提示this应该在第一行。

     Person(String name,String position){
            
            this.position=position;
            this(name);
        }

    以下代码演示,请仔细阅读

    class Person {
    
        private String name;
        private String position;
    
        Person(String name) {
            this.name ="武则天";
            System.out.println("i am---"+this.name);
        }
    
        Person(String name,String position){
            this(name);
            System.out.println("i am==="+name);
            this.name=name;
    
            this.position=position;
            System.out.println("i am"+name);
    
        }
    
        public void speak(){
            System.out.println(name+"是大唐的"+position);
        }
    
    }
    
    
    class PersonTest {
        public static void main(String[] args) {
            Person p1 = new Person(" 狄仁杰","宰相");
            p1.speak();
    
        }
    }

    结果

    i am---武则天
    i am=== 狄仁杰
    i am 狄仁杰
     狄仁杰是大唐的宰相

    后记:

    2020年2月29日 星期六 上海 雨 冷 农历2020年二月初七

    每4年才会有2月29日

  • 相关阅读:
    Stack Overflow 2016最新架构探秘
    (转)个人职业规划中如何使自己的职业生涯升华
    (转)软件架构师应该知道的97件事
    (转)一共81个,开源大数据处理工具汇总
    (转) 架构师的能力模型
    (转)数据库表分割技术浅析(水平分割/垂直分割/库表散列)
    (转)乐观锁与悲观锁——解决并发问题
    (转)从“如何设计用户超过1亿的应用”说起—数据库调优实战
    (转)浅谈数据库的水平拆分
    (转).NET Memory Profiler 使用简介
  • 原文地址:https://www.cnblogs.com/majestyking/p/12382488.html
Copyright © 2020-2023  润新知