1.1 构造方法

实例化一个类的对象后,如果要为这个对象中的属性赋值,则必须用setter方法,那么有没有一种简单的方法,可以在对象实例化时就直接把对象的值赋给属性呢?此时,就可以通过构造方法玩车国内这样的操作,在面向对对象程序中构造方法的主要作用是为类中的属性初始化。

可以回顾对象的产生格式,例如,现在要铲射给你一个类的对象,则必须使用一下格式的代码:

类名称 对象名称 = new 类名称()

可以发现,在程序中只要有“()”就表示调用了方法,那么这个方法实际上就是表示要调用构造方法,构造方法可视为一种特殊的方法,它的定义方式与普通方法类似,其语法如下。

class 类名称{

访问权限 类名称(类型参数1,类型参数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