zoukankan      html  css  js  c++  java
  • Java 面向对象之构造函数和 this 关键字

    1. 构造函数
    2. this 关键字

    1. 构造函数

    class Person
    {
        private String name;
        private int age;
    
        // 定义一个 Person 类的构造函数
        Person() // 构造函数, 而且是空参数的.
        {
            System.out.println("person run");
        }
    
        // 如果有的孩子一出生就有名字
        Person(String n)
        {
            name = n;
        }
    
        // 如果有的孩子一出生既有名字,又有年龄
        Person(String n, int a)
        {
            name = n;
            age = a;
        }
    
        public void speak()
        {
            System.out.println(name+":"+age);
        }
    }
    
    class Demo
    {
        public static void main(String[] args)
        {
            Person p = new Person(); // 构造函数: 构建创造对象时,调用的函数.给对象进行初始化
            Person p1 = new Person("旺财");
            Person p2 = new Person("小强",20);
            p2.speak();
        }
    }
    
    

    特点:

    1. 函数名与类名相同
    2. 不用定义返回值类型
    3. 没有具体的返回值

    作用: 可以给对象进行初始化.

    备注:

    1. 创建对象都必须要通过构造函数初始化
    2. 一个类中如果没有定义过构造函数, 那么该类中会有一个默认的空参数构造函数.
      如果在类中定义了指定的构造函数, 那么类中的默认构造函数就没有了.

    一般函数和构造函数的区别

    1. 构造函数: 对象创建时,就会调用与之对应的构造函数,对对象进行初始化
      一般函数: 对象创建后,需要该函数功能时才调用
    2. 构造函数: 对象创建时,会调用且只调用一次
      一般函数: 对象创建后,可以被调用多次
    3. 构造函数首字母大写,一般函数首字母小写

    什么时候定义构造函数

    在描述事物时,该事物一存在就具备的一些内容,这些内容都定义在构造函数中.

    构造函数的内存图解

    构造函数细节

    1. 构造函数与一般方法 set 不冲突, 构造函数只在对象初始化的时候调用, 一般方法 set,需要时调用.
    2. 如果定义过构造函数, 默认的空构造函数就不存在了.
    3. 构造函数有 return 语句.

    2. this 关键字

    特点:

    this 代表对象, 就是所在函数所属对象的引用.简单说: 哪个对象调用了 this 所在的函数, this 就代表哪个对象.

    this 的应用

    1. 当成员变量和局部变量重名时,可以用关键字 this 来区分
    class Person
    {
        private String name;
        private int age;
    
        Person(String name)
        {
            this.name = name;
        }
    
        public void speak()
        {
            System.out.println(this.name+":"+this.age); // 注意 this 关键字
        }
    }
    
    class Demo
    {
        public static void main(String[] args)
        {
            Person p = new Person("旺财");
            p.speak();
            Person p1 = new Person("小强");
        }
    }
    


    1. 构造函数与构造函数之间的访问
    class Person
    {
        private String name;
        private int age;
    
        Person(String name)
        {
            this.name = name;
        }
    
        Person(String name,int age)
        {
            // this.name = name;
            this(name); // 调用 Person(String name) 构造函数, 只能定义在构造函数的第一行
            this.age = age;
        }
    
        public void speak()
        {
            System.out.println(this.name+":"+this.age); // 注意 this 关键字
        }
    }
    

    1. 本类方法中调用本类对象
    // 需求: 判断是否是同龄人
    class Person
    {
        private String name;
        private int age;
    
        Person(String name)
        {
            this.name = name;
        }
    
        Person(String name)
        {
            // this.name = name;
            this(name);
            this.age = age;
        }
    
        // 判断是否是同龄人
        public boolean compare(Person p)
        {
            return this.age == p.age;
        }
    }
    
    class Demo
    {
        Person p1 = new Person("aa",30);
        Person p2 = new Person("xx",14);
        p1.compare(p2);
    }
    



    参考资料:

  • 相关阅读:
    CentOS7虚拟机安装Linux教程及安装后所遇到的问题
    华为测试用例模板简写
    python字符串大小写转换
    python解释器的下载和安装
    Git安装和常用命令
    python保留两位小数
    python中list的使用
    安装Maven及Eclipse中配置Maven
    伪静态技术
    CI框架两个application共用同一套 model
  • 原文地址:https://www.cnblogs.com/linkworld/p/7435267.html
Copyright © 2011-2022 走看看