【Java中的构造器(构造方法)_基本语法_详细解读】

目录标题

  • 什么是构造方法?
  • 基本语法
  • 构造方法的需求和作用
  • 注意事项和使用细节
  • 尾言

什么是构造方法?

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

基本特征:

  1. 方法名和类名相同。
  2. 没有返回值和返回类型
  3. 在创建对象时,编译器会自动调用该类的构造方法完成对象的初始化。

基本语法

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

构造方法的需求和作用

首先,让我们来看下面的一段代码

public class Person {
    public String name;
    public int age;
    public void Display() {
        System.out.println(name + " " + age);
    }
    public static void main(String[] args) {
        Person person1 = new Person();
        Person person2 = new Person();
        person1.name = "张三";//代码冗余,重复
        person1.age = 18;//
        person2.name = "李四";//
        person2.age = 28;//
        person1.Display();
        person2.Display();
    }
    //输出
    //张三 18
    //李四 28
}

那么此时,我们就有了一种需求

前面我们在创建人类的对象时,是先把一个对象创建好后,再给他的年龄和姓名属性赋值,如果现在我要求,在创建人类的对象时,就直接指定这个对象的年龄和姓名,该怎么做?

这时就可以使用构造方法。

public class Person {
    public String name;
    public int age;
	//构造方法
    public Person(String pname, int page) {
        name = pname;
        age = page;
        System.out.println("构造方法被使用");
    }

    public void Display() {
        System.out.println(name + " " + age);
    }
    public static void main(String[] args) {
        Person person1 = new Person("张三",18);//直接通过构造方法完成初始化
        Person person2 = new Person("李四",28);
        person1.Display();
        person2.Display();
    }
}

输出结果:

可以看出来,构造方法被调用了两次

【Java中的构造器(构造方法)_基本语法_详细解读】_第1张图片

我们将上述Person类中的构造的方法,单独拉出来分析

    public Person(String pname, int page) {
        name = pname;
        age = page;
    }

分析结果:

  1. 可以看出,该构造方法不像普通方法一样,他没有任何的返回值(return)和返回类型(例如:int void double等等)。
  2. 该构造方法的名称和自己所属的类名相同,都为Person
  3. (String pname, int page)中是构造方法的形参列表,用法与普通的方法相同,一般来说都是对成员变量的初始化。

注意事项和使用细节

既然构造方法与普通的方法如此类似,那它是否拥有类似的性质呢?

重载

  1. 一个类可以定义多个不同的构造器,即构造器重载。在调用对象时,编译器自动调用对应的构造方法。

比如:我们可以再给Person类定义一个构造器,用来创建对象的时候,只指定人名,不需要指定年龄。
只指定年龄,不需要指定人名。

public class Person {
    public String name;
    public int age;

    public Person(String pname, int page) {
        name = pname;
        age = page;
        System.out.println("构造方法被使用 name 和 age");
    }
    public Person(String pname) {
        name = pname;
        System.out.println("构造方法被使用 name");
    }
    public Person(int page) {
        age = page;
        System.out.println("构造方法被使用 age");
    }

    public void Display() {
        System.out.println(name + " " + age);
    }
    public static void main(String[] args) {
        Person person1 = new Person("张三",18);
        Person person2 = new Person("李四");
        Person person3 = new Person(28);
        person1.Display();
        person2.Display();
        person3.Display();
    }
}

输出结果:

【Java中的构造器(构造方法)_基本语法_详细解读】_第2张图片
可能有的初学者会疑惑,person2 中的 age 和 person3 中的 name 没有初始化,为何也打印出来了?

可以参考以下以下表格(成员变量和引用变量的初始值)
【Java中的构造器(构造方法)_基本语法_详细解读】_第3张图片

  1. 构造方法名和类名一定相同,没有返回值和返回类型。

【Java中的构造器(构造方法)_基本语法_详细解读】_第4张图片

  1. 构造方法是对对象的初始化,不是创建对象。(new 的时候对象已经被创建完毕,随后构造方法才开始被调用)

看下面一段代码

public class Person {
    public String name;
    public int age;
    public void Display() {
        System.out.println(name + " " + age);
    }
    public static void main(String[] args) {
        Person person = new Person();
        person.Display();
    }
}

输出结果:

【Java中的构造器(构造方法)_基本语法_详细解读】_第5张图片

可能这时候有的读者会问,我没有构造方法

那 Person person = new Person();中是不是就没有调用构造方法呢?

  1. 如果自己没有定义构造方法,系统会自动给类生成一个默认无参构造方法(也叫默认构造器)。

【Java中的构造器(构造方法)_基本语法_详细解读】_第6张图片

那么问题又出现了,若自己定义了构造方法,那默认的还存在吗?
【Java中的构造器(构造方法)_基本语法_详细解读】_第7张图片
若想继续使用,必须显式定义

public class Person {
    public String name;
    public int age;
    public Person() {
        //显示定义,自己将默认的写出来
        //实际就是 重载
    }
    public Person(String pname, int page) {
        name = pname;
        age = page;
    }
    public void Display() {
        System.out.println(name + " " + age);
    }
    public static void main(String[] args) {
        Person person = new Person();//不报错
        Person person1 = new Person("张三", 18);
        person.Display();
        person1.Display();
    }
}
//输出结果
//null 0
//张三 18

尾言

梦想永在凌云意,意气风发。 代码筑就万世基,积沙镇海。

诸君加油(ง •_•)ง

请添加图片描述

你可能感兴趣的:(Java零基础学习,java,c++,jvm)