一.构造器的作用
- 创建对象,初始化类的对象,并返回对象的地址 : 类名 对象名 = new 构造方法;
- 初始化属性(同时给多个属性初始化),创建对象的同时初始化属性
- 任何类定义出来,默认就自带了无参构造器,写不写都有。
- 一旦定义了有参构造器,无参构造器就没有了,此时就需要自己写无参构造器了。
二.构造方法的格式
- (普通方法) 格式:public 返回值类型 方法名(参数类型 参数名...){方法体...}
- 构造方法 格式:public 类名(参数类型 参数名...){方法体...}
- 1.构造方法没有返回值 2.构造方法名必须是类名
三.构造器的分类
- 无参构造器(默认存在的):初始化对象时,成员变量的数据均采用默认值。
- 有参构造器:在初始化对象的同时可以为对象进行赋值。
四.方法重载(Overload)
- 构造方法是一种典型的方法重载
- 方法重载发生在同一个类中,同一个类中需要使用的相同的方法名但实现过程不同的时候用到重载。
- 方法重载(Overload): 1.方法名重名
2.形参列表不同:方法的参数类型(个数/顺序)不一样
- 为什么要方法重载:为了适应各种场景下的需求,为了让同一个方法可以实现不同的功能。
- 方法重载的作用:同样的方法经过重载之后可以实现不同的功能,虽然方法名不变,但实现的功能是完全不一样的。
- 方法重载不仅是构造方法可以重载,普通方法也可以重载。
- 构造方法重载的作用/特点:可以利用不同的构造方法创建出不同需求的对象。因为重载构造方法它的参数会不一样, ,那么这个时候你利用不同参数的构造方法创建出来的对象是不一样的,即同一个方法可以实现不同的功能 。
// 定义学生类
public class Student {
public String name;
public int age;
// 有参构造方法
public Student(String name,int age){
System.out.println("调用的是有参构造方法!");
this.name = name; // 参数给属性赋值
this.age = age;
}
// 无参构造方法
public Student(){
System.out.println("调用的是无参构造方法!");
}
public void study(){
System.out.println(name + "年龄:" + age);
System.out.println(name + "正在学习!");
}
}
public class Manage {
// 主函数
public static void main(String[] args) {
// 创建对象 格式:类名 对象名 = new 构造方法;
// 通过new构造方法创建出来的对象
// 调用的是有参构造方法
Student s1 = new Student("小明",18);
s1.name = "小李"; // 相当于在修改name属性
s1.study(); // 调用的是有参构造方法!
// 小李年龄:18
// 小李正在学习!
// 调用的是无参构造方法
Student s2 = new Student();
s2.name = "小美";
s2.age = 20;
s2.study();// 调用的是无参构造方法!
// 小美年龄:20
// 小美正在学习!
}
}
五.构造器的注意事项
- 任何类定义出来,默认就自带了无参构造器,写不写都有
- 一旦定义了有参数构造器,那么无参数构造器就没有了,如果还想用无参数构造器,那么此时就需要自己手写一个无参构造器。
public class Car {
// 属性(成员变量)
String name;
double price;
// 无参构造器
public Car(){
System.out.println("无参数构造器被触发执行~~~");
}
// 有参构造器
public Car(String name,double price){
System.out.println("有参数构造器被触发执行");
this.name = name;
this.price = price;
}
}
public class Test {
public static void main(String[] args) {
// 通过无参构造器初始化对象并返回
Car c = new Car(); // 无参构造器是默认的,是被默认调用的
System.out.println(c.name);
System.out.println(c.price);
// 通过有参构造器初始化对象并返回
Car c2 = new Car("保时捷",100);
System.out.println(c2.name);
System.out.println(c2.price);
}
}