• this关键字的使用8/22


    实质就是:this代表当前对象
    目录:
      1.this(name) 调用同一个类中参数为
       public Person(String name)这个构造方法
    2.this.say() 同一个类中,某一个方法调用非static的say()方法
    3.this.name //当前对象的name属性
    4.比较两个对象是否相等 first:进行地址比较 second:进行内容比较

    
    
    class Person {
        private String name;
        private int age;
        /*至少保证一个没有this调用构造方法,保证递归调用的出口*/
        public Person() {
            System.out.println("*** 一个新的Person类对象被实例化******");
        }
    
        public Person(String name) {
            this(); // 调用无参构造
            this.name = name;
        }
    
        public Person(String name, int age) {
            this(name); // 调用有一个参数的构造,这句话调用的是灰色部分的函数
            this.age = age;
        } // setter、getter略
        
         
        /*自己写的*************************/
        public Person(double haha){
            System.out.println("只进行输出操作");
        }
        public Person(int age){
            this(10.21);
            this.age = 10;
            this.name="lcy";
        }
        /********************************/
        
        public String getInfo() {
            return "姓名:" + this.name + ",年龄:" + this.age;
        }
    }
    
    public class Test {
        public static void main(String args[]) {
            Person per = new Person("张三", 20);
            System.out.println(per.getInfo());
            
            *** 一个新的Person类对象被实例化******
            姓名:张三,年龄:20
            
            Person per1 = new Person("张四");
            System.out.println(per1.getInfo());
            
            *** 一个新的Person类对象被实例化******
            姓名:张四,年龄:0
            
            Person per2 = new Person(100000000);
            System.out.println(per2.getInfo());
            
            只进行输出操作
            姓名:lcy,年龄:10
        }
    }
    /**  相互调用构造方法在new对象的时候
        构造方法:调用其他构造使用“this()”调用。
        例如:现在一个类之中存在了三个构造方法(无参、有一个参数、有两个参数),
        但是不管使用何种构造方法,都要求在实例化对象产生的时候输出一行提示信息:
        “一个新的类对象被实例化”(假设这个信息等于50行代码)
     */
    _________________________________________________________
    this表示当前对象
    当前对象指的是当前正在调用本类方法的操作对象,下面首先来验证一下。
    class Demo {
        private int filed =100;
        public void say(){
            System.out.println(123456);
        }
        public void print() {
            System.out.println("当前对象:" + this);
            this.say();
            System.out.println(this.filed);
        }
    }
    
    public class Test {
        public static void main(String args[]) {
            Demo demo1 = new Demo();
            Demo demo2 = new Demo();
            System.out.println(demo1);
            demo1.print();
            System.out.println(demo2);
            demo2.print();
            
        }
    }
    
    Demo@2a139a55
    当前对象:Demo@2a139a55
    123456
    100
    
    Demo@15db9742
    当前对象:Demo@15db9742
    123456
    100



    程序中Person类中定义了一个compare方法,此方法的主要功能就是专门完成两个对象的比较操作,
    在比较时,首先进行地址的比较,如果两个对象的地址一样,则肯定是同一个对象,
    而如果地址不相等,则将一个个属性依次进行比较。对象比较操作在开发中是一个重要的概念,要重点掌握
    class Person {
      private String name ;
      private int age ;
      public Person(String name,int age) {
      this.name = name ;
      this.age = age ;
    }
    // 一个类可以接收本类引用
    // 接收完成之后可以直接调用本类中的私有操作
    public boolean compare(Person per) {
    if (per == null) {
    return false ; // 直接返回false
    }
    if (this == per) { // 地址相同
    return true ;
    }
    // 这样一来在compare()方法之中有两个对象:传入的Person,另外一个是this
    if (this.name.equals(per.name)
    && this.age == per.age) {
    return true ;
    }
    return false ; //其他情况
    }
    public void setName(String name) {
    this.name = name ;
    }
    public void setAge(int age) {
    this.age = age ;
    }
    public String getName() {
    return this.name ;
    }
    public int getAge() {
    return this.age ;
    }
    }
    public class TestDemo { public static void main(String args[]) { Person per1 = new Person("张三",20) ; Person per2 = new Person("张三",20) ; if (per1.compare(per1)) { System.out.println("是同一个对象。") ; } else { System.out.println("不是同一个对象。") ; } } }



  • 相关阅读:
    Mac 安装 mysqlclient
    Linux下切换Python版本的几种方法
    django执行python manage.py makemigrations 时报错AttributeError: 'str' object has no attribute 'decode'
    Linux下切换Python版本的几种方法
    django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.7.17).
    解决https网页无法加载http资源问题
    Git——本地仓库与远程仓库关联
    vue项目笔记(五)——vue不同环境配置不同的打包命令
    配置系统读取配置2
    依赖注入概要
  • 原文地址:https://www.cnblogs.com/cs-lcy/p/7413826.html
Copyright © 2020-2023  润新知