一、构造器/构造方法
首先说明,构造器和构造方法是一个东西,翻译的问题。
假设一个场景,通常我们在实例化一个类的对象时,例如实例化人类的对象,一般是先new一个对象,然后再给该对象的属性赋值(名字、年龄等)。但是如果我想在实例化对象的时候,就直接设置该对象的属性,这时就要用到构造器。
构造器的作用是初始化对象,要注意在调用构造器之前,对象已经实例化了(已经存在),调用构造器只不过是将对象初始化。
二、构造器的语法
[修饰符] 方法名(参数列表){方法体;}
Tips:
- 修饰符可以不写(默认),也可以是public、protected和private。
- 构造器没有返回值(一般来说void代表方法没有返回值,但是在构造器中void都不要写!)
- 方法名必须与类名一样,大小写都要一样。
- 构造器的调用,是由系统完成的。当创建对象时,系统会自动调用该类的构造器,帮我们完成对象的初始化。
三、构造器的例子
public class Constructor01{
public static void main(String[] args){
//new一个对象时,直接通过构造器指定名字和年龄
Person p1 = new Person("smith", 80);
}
}
class Person{
String name;
int age;
//1.构造器没有返回值,连void都没有!
//2.构造器的名称和类名一模一样
//3.(String pName, int pAge)是构造器形参列表,规则和成员方法一样
public Person(String pName, int pAge){
sout("构造器被调用了")
name = pName;
age = pAge;
}
}
Tips:构造器Person是真真实实要被调用的,"构造器被调用了"这句话是会被输出的。
四、构造器的使用细节
- 一个类可以定义多个不同的构造器,即构造器重载。
-
//构造器重载 public class Constructor01{ public static void main(String[] args){ //初始化第一个对象 Person p1 = new Person("smith", 80); //初始化第二个对象 Person p2 = new Person("smith"); } } class Person{ String name; int age; //第一个构造器 public Person(String pName, int pAge){ name = pName; age = pAge; } //第二个构造器 public Person(String pName){ name = pName; } }
- 构造器名和类名要相同。
- 构造器没有返回值。
- 构造器是完成对象的初始化,并不是创建对象。
- 在创建对象时,系统自动调用该类的构造器。(构造器其实也是个方法,只不过叫构造器/构造方法)
- 如果没有定义构造方法,系统会自动的给类生成一个默认的无参构造方法(也叫默认构造方法)。
-
class Dog{ Dog(){ //默认构造器 } }
- 一旦定义了自己的构造器,默认的构造器就会被覆盖,就无法再使用默认的无参构造器,除非再显式的定义一下,Dog(){}。
-
public class Constructor01{ public static void main(String[] args){ //自定义的构造器 Person p1 = new Person("smith", 80); //默认构造器;如果没有在class Person类中显式声明默认构造器,这里是会报错的,因为它会调用自定义的构造器,但这里并没有传参数 Person p2 = new Person(); } } class Person{ String name; int age; //自定义的构造器 public Person(String pName, int pAge){ name = pName; age = pAge; } //显示默认构造器 Person(){ } }