一、概述
构造方法也叫作构造器、构造函数。但是我们平时习惯上还是会叫做构造方法。
作用:在创建对象的时候给成员变量进行初始化。
这里的
初始化
是一个专业名字,其实就是赋值的意思。因此构造方法简单理解:就是在创建对象的时候给成员变量进行赋值的。
在以前的代码中,小括号中都是空着的,什么也不写。此时就表示我们调用的是空参的构造方法。
二、构造方法格式
1)格式
public class Student {
修饰符 类名(参数) {
方法体;
}
}
2)特点
- 方法名与类名必须完全一样,大小写也要一致。
- 构造方法它虽然叫做方法,但是它是没有返回值类型的,连void都不能写。
- 因为构造方法没有返回值,因此在大括号里面是不能写return的,一旦写了,代码就会报错。
3)示例
第一个是 空参构造
(空参构造一般是空的,什么也不写),利用空参构造来创建对象的时候,成员变量都是默认初始化值。
第二个是 带全部参数构造方法
,在方法里面就可以给所有的成员变量进行赋值了。这样我们在创建对象的时候,name 和 age就有值了,就省的我们再去调用 set方法
进行赋值了,可以让我们的代码变得更加的简单。
4)执行时机
- 创建对象的时候由虚拟机调用,不能手动调用构造方法
- 每创建一次对象,构造方法就会被调用一次
三、代码示例
Student.java
package com.itheima.test5;
public class Student {
private String name;
private int age;
// 如果我们自己没有写任何的构造方法
// 那么虚拟机给我们加一个空参构造方法
/* public Student(){
System.out.println("看看我执行了吗?");
} */
// 有参构造
public Student(String name,int age){
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
StudentTest.java
package com.itheima.test5;
public class StudentTest {
public static void main(String[] args) {
//创建对象
//调用的空参构造 tudent ss = new Student();
Student ss = new Student("zhangsan",23);
System.out.println(ss.getName());
System.out.println(ss.getAge());
}
}
四、赋值的原理
在我们创建对象的时候,会自动根据后面的参数去调用对应的构造方法。
因为我这里传了两个参数,一个是 String,一个是 int,所以它会调用这里的有参构造。
Student ss = new Student("zhangsan",23);
一般写代码的时候有参构造和无参构造我们一般都是会写上的。因为在实际开发中,有的时候我们创建对象时,是不知道属性值的。例如:对象的属性值不是直接写死的,而是由键盘录入来的,此时我创建对象的时候,就不知道对象里的属性是什么了,此时我只能先用空参构造先把对象创建出来,然后等用户键盘录入了,此时再通过 s.setName"";
,把用户键盘录入的数据进行复制。
五、构造方法注意事项
1、构造方法的定义
- 如果没有定义构造方法,系统将给出一个默认的无参数构造方法
- 如果定义了构造方法,系统将不再提供默认的构造方法
Student.java
package com.itheima.test5;
public class Student {
private String name;
private int age;
// 有参构造
public Student(String name,int age){
this.name = name;
this.age = age;
}
}
由于在 Student
类中已经定义了一个有参构造,系统将不再提供默认的构造方法,下述代码就会报错。
// 会调用Student的无参构造
Student s = new Student(); // 报错
2、构造方法的重载
带参构造方法,和无参构造方法,两者方法名相同,但是参数不同,这叫做构造方法的重载。
推荐的使用方式:无论是否使用,都手动书写无参数构造方法,和带全部参数的构造方法。这是因为在以后的实际开发,基本上不是你一个人写一个项目,而是很多人一起开发的。假设现在自己只用到了有参构造,但是别人却可能使用无参构造。因此无论是否使用,都手动书写无参数构造方法,和带全部参数的构造方法,这已经成为了一个习惯了。
六、总结
1、构造方法的作用?
创建对象的时候,由虚拟机自动调用,给成员变量进行初始化的。
2、构造方法有几种,各自的作用是什么?
- 无参数构造方法(空参构造方法):初始化对象时,成员变量的数据均采用默认值。
- 有参数构造方法:在初始化对象的时候,同时可以为对象进行赋值。
3、构造方法有哪些注意事项?
- 任何类定义出来,默认就自带了无参数构造器,写不写都有。
- 一旦定义了有参数构造器,无参数构造器就没了,此时就需要自己写无参数构造器了。
- 建议在任何时候都手动写上空参和带全部参数的构造方法。
七、构造方法扫盲
有很多资料书都这么解释:构造方法就是用来创建对象的。其实这句话是错误的。
真正创建对象其实是 new
关键字干的。虚拟机在创建对象的时候其实是有很多很多步骤的,其中调用构造方法只是创建对象的其中一步而已,这一步就是为了给成员变量进行初始化的。
因此真正构造方法的作用就是:在创建对象的时候,虚拟机会自动调用构造方法,它的作用是给成员变量进行初始化的。