1.1 构造方法
实例化一个类的对象后,如果要为这个对象中的属性赋值,则必须用setter方法,那么有没有一种简单的方法,可以在对象实例化时就直接把对象的值赋给属性呢?此时,就可以通过构造方法玩车国内这样的操作,在面向对对象程序中构造方法的主要作用是为类中的属性初始化。
可以回顾对象的产生格式,例如,现在要铲射给你一个类的对象,则必须使用一下格式的代码:
类名称 对象名称 = new 类名称()
可以发现,在程序中只要有“()”就表示调用了方法,那么这个方法实际上就是表示要调用构造方法,构造方法可视为一种特殊的方法,它的定义方式与普通方法类似,其语法如下。
class 类名称{
访问权限 类名称(类型1 参数1,类型2 参数2,…){
程序语句;
… //构造方法返回值
}
}
在构造方法的声明中:
构造方法的名称必须与类名称一致
构造方法的声明处不能有任何返回值类型的声明。
不能在构造方法中使用return返回一个值。
声明一个构造方法:
class Person2{
public Person2(){
System.out.println("一个新的Person对象产生"); //声明构造方法
}
}
class ConsDemo01{
public static void main(String[] args) {
System.out.println("声明对象:Person per = null;");
Person2 per = null; //声明对象时不调用构造
System.out.println("实例化对象:per = new Person();");
per = new Person2(); //实例化对象时调用构造
}
}
运行结果:
声明对象:Person per = null;
实例化对象:per = new Person();
一个新的Person对象产生
程序实例化对象的过程与之前一样的,在类中定义一个Person类的构造方法,但是从程序的运行结果可以发现,当调用new关键字实例化对象时才会调用构造方法。
如果没有声明构造方法,则在编译时会直接生成一个无参数的、什么都不做的构造方法。正因为如此,所以前面的程序中即使没有构造方法,对象也是可以进行对象的实例化操作的。
通过构造方法为属性赋值:
class Person03{
private String name;
private int age;
public Person03(String name, int age){
this.setName(name);
this.setAge(age);
}
public void tell(){
System.out.println("姓名:" + getName() + ", 年龄:" + getAge());
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age > 0 && age < 150) {
this.age = age;
}
}
}
class ConsDemo02{
public static void main(String[] args) {
Person03 per = new Person03("张三",12);
per.tell();
}
}
运行结果:
姓名:张三, 年龄:12
以上程序就是直接通过构造方法进行赋值,可以发现,这样赋值 比对象实例化之后再单独调用setter方法更方便。
与普通方法一样,构造方法也是可以重载的,只要每个构造方法的参数类型或参数个数不同,即可实现重载。
构造方法重载:
class Person04{
private String name;
int age;
public Person04(){
}
public Person04(String name){
this.setName(name);
}
public Person04(String name,int age){
this.setName(name);
this.setAge(age);
}
public void tell(){
System.out.println("姓名:" + getName() + ", 年龄:" + getAge());
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age > 0 && age < 150) {
this.age = age;
}
}
}
class ConsDemo07{
public static void main(String[] args) {
Person04 per = new Person04("李四");
per.tell();
}
}
运行结果:
姓名:李四, 年龄:0