Java中的构造方法

手写笔记转换

构造方法的作用

用于给对象实例进行初始化,只有在构造方法被调用的时候,对象才会被分配内存空间。

构造方法的调用时机

每次使用 new 关键字创建对象的时候,构造方法至少会被调用一次。

定义构造方法的规则

  • 构造方法的名字必须和类名一样
  • 构造方法没有返回类型,包括 void
  • 构造方法不能是抽象的( abstract )、静态的( static )、最终的( final )、同步的( synchronized )。
    • 由于构造方法不能被子类继承,所以用 finalabstract 关键字修饰没有意义;
    • 构造方法用于初始化一个对象,所以用 static 关键字修饰没有意义;
    • 多个线程不会同时创建内存地址相同的同一个对象,所以用 synchronized 关键字修饰没有必要。

无参构造方法(默认构造方法)

如果一个构造方法中没有任何参数,那么它就是一个默认构造方法,也称为无参构造方法。

通常情况下,无参构造方法是可以缺省的,开发者并不需要显式的声明无参构造方法,编译器将提供一个无参数,方法体为空的构造方法。

当用户显式定义了构造方法后,系统将不再提供默认构造函数。

默认构造方法的目的主要是为对象的字段提供默认值

有参构造方法

有参数的构造方法被称为有参构造方法,参数可以有一个或多个。有参构造方法可以为不同的对象提供不同的值。

如果没有有参构造方法的话,就需要通过 setter 方法给字段赋值了。

重载构造方法

构造方法它也可以像方法一样被重载。构造方法的重载只需要提供不同的参数列表即可。编译器会通过参数的数量来决定应该调用哪一个构造方法。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class OverloadingConstrutorPerson {
    private String name;
    private int age;
    private int sex;

    public OverloadingConstrutorPerson(String name, int age, int sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    public OverloadingConstrutorPerson(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void out() {
        System.out.println("姓名 " + name + " 年龄 " + age + " 性别 " + sex);
    }

    public static void main(String[] args) {
        OverloadingConstrutorPerson p1 = new OverloadingConstrutorPerson("王二",18, 1);
        p1.out();

        OverloadingConstrutorPerson p2 = new OverloadingConstrutorPerson("王三",16);
        p2.out();
    }
}

拷贝构造方法

利用一个已有对象将该对象的参数字段直接传递给新的对象

语法格式

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// 语法格式
class_name(class_name obj)
{
	//字段赋值操作
}

//示例代码
public class CopyConstrutorPerson {
    private String name;
    private int age;

    public CopyConstrutorPerson(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public CopyConstrutorPerson(CopyConstrutorPerson person) {
        this.name = person.name;
        this.age = person.age;
    }

    public void out() {
        System.out.println("姓名 " + name + " 年龄 " + age);
    }

    public static void main(String[] args) {
        CopyConstrutorPerson p1 = new CopyConstrutorPerson("沉默王二",18);
        p1.out();

        CopyConstrutorPerson p2 = new CopyConstrutorPerson(p1);
        p2.out();
    }
}
最后更新于 2025-04-16 14:45 UTC
그 경기 끝나고 좀 멍하기 있었는데 여러분 이제 살면서 여러가
使用 Hugo 构建
主题 StackJimmy 设计