Java构造器解释
在java的源文件中,只能有一个公共类,并且源文件的类名必须与公共类的类名相同,但可以有多个非公共类。
构造器也叫做构造函数,在Java中,构造器其实就是一个方法,只不过与其他方法不同,构造器总是结合new运算符来调用,不能对一个已经存在的对象调用构造函数来重新对该对象的实列字段重置。
构造器的作用:在构造类的对象时,将类中的实列字段初始化为所希望的初始状态,说简单点,就是将类中的变量赋值为你想给这些变量的值。 以Employee的类的构造器为例:
public Employee(String s,double s,int year,int month,int day)
{
name=n;
salary=s;
hireDay=LocalDate.of(year,month,day);
}
当我们执行下面的代码,使用构造器初始化Employee类的对象m时,
var m=new Employee("shuaishuaixi",100000,2003,05,25);
我们将会把对象m中的实例字段设置为: name=“shuaishuaixi”; salary=100000; hireDay=LocalDate.of(2003,05,25);
Java中的构造器必须满足以下条件:
- 构造器与类同名
- 每个类可以有一个及以上的构造器
- 构造器可以有0,1或多个参数
- 构造器没有返回值
- 构造器一般伴随着new操作符一起使用(类似于LocalData和NumberFormat这两个类,使用静态工厂犯法来构造对象,本文中不作详细说明,感兴趣的小伙伴可以自行去了解)
Java的构造器类型
系统的默认构造器
如果我们在类中没有提供类的构造器,系统会为我们自动生成一个构造器,当我们在初始化类的对象时,系统会给字段设置默认的初始值:数值为0,布尔值为false,对象引用为null。 以Employee类为例,当我们调用系统默认的构造器时, name=null; s=0; hireDay=null
无参数的构造器
由无参数构造器创建对象时,对象的状态可以设置为默认值,不同于系统的默认构造器,这个默认值我们可以自己设置,以Employee类的无参数构造器为例:
public Employee()
{
name="编号1";
salary=10000;
hireDay=LocalData.now();
}
当我们调用构造参数创建对象m时,m.name=“编号1”,m.salary=10000;m.hireDay=当前日期;
有参数的构造器
下面就是Employee类有两个参数的构造器
public Employee(string n,double s)
{
name=n;
salary=s;
}
当我们执行下面的代码创建对象m,
var m=new Employee("shuhaishuaixi",100000);
对象中的实例字段会被赋值为: name=s; salary=100000; hireDay=null; 因为hireDay在构造器中没有形参,所以系统给它默认赋值为null。
构造器的重载
构造器也是一种方法,方法可以重载,同样构造器也可以重载。 如果多个方法有相同的名字、不同的参数,便出现了重载。
**要完整地描述一个方法时,需要指定方法名以及参数类型,这叫作方法的签名。**例如,Java中的String类有4个名为indexOf的公共方法,它们的签名是:
indexOf(int);
indesOf(int int);
indexOf(String);
indexOf(String int);
注意:返回类型不是方法签名的一部分。
如果类中至少提供了一个有参数的构造器,但是没有提供无参数的构造器,那么构造对象时不提供参数是不合法的。
另外,如果构造器的第一个语句形如this(…),这个构造器将调用同一个类的另一个构造器。比如:
public Employee(double s)
{
this("Employee #“+nextId,s);
nextId++;
}
当调用new Employee(60000)时,Employee(double)构造器调用Employee(String,double)构造器。采用这种方式使用this关键字非常有用,这样对公共的构造器代码只需要编写一次就行。
我是shuaishuaixi,一位在读双非本科生,若有什么问题,欢迎大家在下面留言讨论,文章有什么错误,也欢迎大家指出,共同进步。
|