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日

  • 相关阅读:
    jvm.option是什么,它是如何加载的
    适配器模式--想象一下转换插头
    Android gradle 配置
    Android全面屏适配
    github控件地址
    TextView 链接显示及跳转
    解决java.lang.annotation.AnnotationFormatError: Invalid default: public abstract java.lang.Class org.robolectric.annotation.Config.application()
    解决Android中,禁止ScrollView内的控件改变之后自动滚动
    Android跳转到应用商店的APP详情页面,以及 Google GMS 各个apk的包
    EditText小记
  • 原文地址:https://www.cnblogs.com/majestyking/p/12382488.html
Copyright © 2011-2022 走看看