浅谈Java构造器

时间:2022-03-14 07:50:55

Java构造器

每个类都有构造方法。如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法。

在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。

下面是一个构造方法示例:

class Puppy{
public Puppy(){
System.out.println("I'm a constructor!");
}
public Puppy(String name){
System.out.println("My name is " + name);
// 这个构造器仅有一个参数
}
}

上面的代码非常有意思,一个是可以传参的构造方法,一个是不可以,所以在创建对象的过程中,如果没有传参,系统会默认调用有参数的构造方法。如果传了参,系统会自动调用没有参数的构造方法。

例如,根据以上代码我新建两个对象

Puppy dog1 = new Puppy();
Puppy dog2 = new Puppy("Lilly");

那么输出结果将会是:

>>> I'm a contructor!
>>> My name is Lilly

有意思的是,系统不会允许你再创建一个传入相同数据类型的构造器,例如再写一个传入String的构造器

	public Puppy(String bark){
System.out.println(bark);
}

这样编译器会报错

Duplicate method Puppy(String) in type Puppy

但是,我们仍可以创建传入其他数据类型的构造器

	public Puppy(int num){

    }
//这样是允许的

或者,构造器需要传入多个参数时,改变顺序也是允许的。

	public Puppy(int a, double b){

    }

	public Puppy(double b, int a){

    }
//这样也是允许的

需要注意的点:

  • 构造器可以有任何访问的修饰符:public, default, protected, private,但是不可以有任何非访问性质的修饰符包括 abstract, final, native, static, 或者 synchronized。

  • 众所周知,方法必须要有返回值,能返回任何类型的值或者无返回值(void),但是构造器没有返回值,也不需要void。(且经过测试,如果在构造器前加void,编译器会认为你是在写一个方法,从而引起引用对象时出错)

  • 构造器使用和类相同的名字,而方法则不同。按照习惯,方法通常用小写字母开始,而构造器通常用大写字母开始。

    构造器通常是一个名词,因为它和类名相同;而方法通常更接近动词,因为它说明一个操作。

  • 构造方法:只有在对象创建的时候才会去调用,而且只会调用一次。

  • 构造器是不能被继承的。构造器只能显式或隐式地被调用,派生类对象被创建时会隐式调用基类的无参构造器。