构造器(constructor)

SOBER大约 3 分钟

构造器(constructor)

基本介绍

构造方法又叫构造器( constructor ),是类的一种特殊的方法,它的主要作用是 完成对新对象的初始化。它有几个特点:

构造器特点

  • 方法名和类名必须相同
  • 没有返回值
  • 在创建对象时,系统会自动的调用该类的构造器完成对对象的初始化
  • 构造器的修饰符可以默认
  • 参数列表 和 成员方法一样的规则

基本语法

[修饰符] 方法名(形参列表){ 方法体; }

演示

在创建人类的对象时,就直接指定这个对象的年龄和姓名

public class Hello {
    public static void main(String[] args){
        Person p = new Person('yang', 27);
        System.out.println(p.name + p.age);
    }
}
class Person {
    String name;
    int age;
    /**
     * 1.构造器没有返回值,也不能写void
     * 2.构造器的名称和类Person一样
     * 3.(string pName, int pAge) 是构造器形参列表,规则和成员方法一样
     * */
    public Person(String pName, int pAge){
        System.out.prinyln("构造器被调用~~ 完成对象的初始化")
        name = pName;
        age = pAge;
    }
}

注意事项和使用细节

  1. 一个类可以定义多个不同的构造器,即构造器重载 比如: 我们可以再给 Person 类定义一个构造器,用来创建对象的时候,只指定人名不需要指定年龄
    public class Hello {
        public static void main(String[] args){
            Person p1 = new Person('yang', 27); /** 第一个构造器*/
            Person p2 = new Person('yang'); /** 第二个构造器*/
        }
    }
    class Person {
        String name;
        int age;
        /** 第一个构造器*/
        public Person(String pName, int pAge){
            name = pName;
            age = pAge;
        }
        /** 第二个构造器*/
        public Person(String pName){
            name = pName;
        }
    }
    
  2. 构造器名和类名要相同
  3. 构造器没有返回值
  4. 构造器是完成对象的初始化,并不是创建对象
  5. 在创建对象时,系统自动的调用该类的构造方法
  6. 如果程序员没有定义构造器,系统会自动给类生成一个默认无参构造方法(也叫默认构造方法),比如 Dog (){},使用 javap 指令 反编译看看
    • 反编译步骤
    public class Hello{
        public static void main(String[] args){
            Dog dog1 = new Dog();
        }
    }
    class Dog{
        /**
         * Dog是默认构造器
         * Dog(){}
         */
    }
    
    javac Hello.java   # 先编译java文件
    javap Dog.class    # 反编译 class 文件 也可省略 .class 后缀
    # 输出默认构造器
    # class Dog {
    # Dog();
    # }
    
  7. 一旦定义了自己的构造器,默认的构造器就覆盖了就不能再使用默认的无参构造器,除非显式的定义一下,即: Person(){}
        class Dog{
            public Dog(String dName){} //覆盖默认构造器
            Dog(){} // 显示的定义 无参数构造器
    }
    

演示


对象创建的流程分析(重点)

this 关键字

什么是 this

java虚拟机会给每个对象分配 this,代表当前对象

演示

    public class Hello {
        public static void main(String[] args){
            Person p1 = new Person('yang', 27);
            Person p2 = new Person('yang2', 30);
            System.out.println("p1的hashCode()" + p1.hashCode());
            System.out.println("p2的hashCode()" + p2.hashCode());
        }
    }
    class Person {
        String name;
        int age;
        public Person(String name, int age){
            // this 就是指向当前对象的属性
            this.name = name;
            this.age = age;
            System.out.println("this的hashCode()" + this.hashCode());
        }
    }

this 的注意事项和细节

  1. this 关键字可以用来访问本类的属性、方法、构造器
  2. this 用于区分当前类的属性和局部变量
  3. 访问成员方法的语法: this.方法名(参数列表);
  4. 访问构造器语法: this(参数列表): 注意只能在构造器中使用
  5. this 不能在类定义的外部使用,只能在类定义的方法中使用