返回顶部
扩大
缩小

Yeap

构造方法

在创建实例的时候,我们经常需要同时初始化字段

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

是否有一种方法可以让我们在创建实例的时候就直接完成对字段的初始化:

这就需要用到 构造方法

一般来说创建 实例的时候,是通过构造方法来完成初始化实例的。


class Person {
    private String name;
    private int age;

    public Person(String name, int age) { //有参构造方法
        this.name = name;
        this.age = age;
    }
    
    public String getName() {
        return this.name;
    }

    public int getAge() {
        return this.age;
    }
}

public class Main {
    public static void main(String[] args) {
        Person p = new Person("Xiao Ming", 15);
        System.out.println(p.getName());
        System.out.println(p.getAge());
    }
}


构造方法的名称就是 类名。构造方法的参数没有限制,在方法内部,也可以编写任意语句。但是和普通的方法相比,构造方法没有返回值,调用构造方法,必须用 new操作符。

默认构造方法

任何的class都有构造方法。

也就是说 如果我们没有显示的定义构造方法我们的编译器会自动给我们生成一个默认的构造方法。一个无参的构造方法,同样,没有执行语句:

class Person {
    public Person() {
    }
}

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

public class Main {
    public static void main(String[] args) {
        Person p1 = new Person("Xiao Ming", 15); // 既可以调用带参数的构造方法
        Person p2 = new Person(); // 也可以调用无参数构造方法
    }
}

class Person {
    private String name;
    private int age;

    public Person() { //无参构造方法
    }

    public Person(String name, int age) {//有参构造方法
        this.name = name;
        this.age = age;
    }
    
    public String getName() {
        return this.name;
    }

    public int getAge() {
        return this.age;
    }
}

也就是,如果我们自己定义了一个有参的构造方法 ,在new对象的时候,使用了有参构造方法,那么我们也必须创建一个无参的构造方法,不然会报错。

一个构造方法可以调用其他的构造方法,这样做的目的是便于代码的复用。调用其他构造方法 的语句是 this(....);

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); // 调用另一个构造方法Person(String, int)
    }

    public Person() {
        this("Unnamed"); // 调用另一个构造方法Person(String)
    }
}

posted on 2020-11-22 16:38  YP泡泡  阅读(114)  评论(0)    收藏  举报

导航