廖雪峰Java2-2数据封装-2构造方法

在2-2-1中,创建1个实例需要3步

        Person ming = new Person();
        ming.setName("  小明  ");
        ming.setAge(16);

问题:能否在创建对象实例时就把内部字段全部初始化为合适的值?
构造方法因此应运而生

1.单个构造方法

  • 构造方法可以在创建对象实例时初始化对象实例
  • 构造方法名就是类名
  • 构造方法的参数没有限制
  • 构造方法没有返回值(也没有void)
  • 必须用new操作符调用构造方法
    Person.java
public class Person {
    private String name;
    private int age;
    public Person(String name,int age) {
        this.name = name;
        this.age = age;
    }
    public void info() {
        System.out.printf("我是%s,今年%d岁" ,name,age);
    }
}

Hello.java

public class Hello {
    public static void main(String[] args) {
        Person ming = new Person("小明",12);
        ming.info();
    }
}


如果一个类没有定义构造方法,编译器会自动生成一个默认构造方法:

  • 无参数
  • 无执行语句
public Person() {   }

如果我们定义了构造方法,编译器不会再自动创建默认的构造方法

构造方法初始化顺序:

  • 先初始化字段
  • 没有赋值的字段初始化为默认值:基本类型=0;引用类型=null
  • 再执行构造方法的代码

多个构造方法

可以定义多个构造方法,编译器通过构造方法的参数数量、位置和类型区分
一个构造方法可以调用其他构造放方法,便于代码复用。
调用其他构造方法的语法是this(...)
Person.java

public class Person {
    private String name;
    private int age;
    public Person(String name,int age) {
        this.name = name;
        this.age = age;
    }
    public Person(String name) {
        this(name,18);
    }
    public Person() {
        this("Unnamed");
    }
    public void info() {
        System.out.printf("我是%s,今年%d岁\n" ,name,age);
    }
}

Hello.java

public class Hello {
    public static void main(String[] args) {
        Person ming = new Person("小明",12);
        ming.info();
        Person hong = new Person("小红");
        hong.info();
        Person jun = new Person();
        jun.info();
    }
}

3.总结:

实例在创建时会调用构造方法
构造方法用于初始化实例
没有定义构造方法时,编译器会自动创建默认的构造方法。
可以定义多个构造方法,编译器根据参数自动判断

猜你喜欢

转载自www.cnblogs.com/csj2018/p/10262390.html