zoukankan      html  css  js  c++  java
  • 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日

  • 相关阅读:
    C++之栈的应用-------判断出栈序列是否合法
    PHP 使用soap调用webservice接口
    C++矩阵转置
    C++利用栈实现队列、利用队列实现栈
    C++ error LNK2019: 无法解析的外部符号
    定时任务
    spring boot redis CacheManager
    非正常关闭vim编辑器后提示错误的解决方法
    python pandas学习记录 二
    layui点击放大图片
  • 原文地址:https://www.cnblogs.com/majestyking/p/12382488.html
Copyright © 2011-2022 走看看