构造器(Constructor)

构造器又称为构造方法,那是因为它长的很像方法。但是和方法还有有所区别的。

构造器的作用

要创建一个类的实例对象,必须调用一个对象的构造器,来完成类的实例初始化过程。实例初始化过程就是为实例变量赋初始值的过程。

当一个对象被创建时候,构造方法用来初始化该对象,给对象的成员变量赋初始值。

注意:无论你与否自定义构造方法,所有的类都有构造方法,因为Java自动提供了一个无参数构造方法,一旦自己定义了构造方法,Java自动提供的默认无参数构造方法就会失效。

构造方法的定义格式

【修饰符】 构造器名(){
    // 实例初始化代码
}
【修饰符】 构造器名(参数列表){
	// 实例初始化代码
}

示例代码如下:

public class Student {
	private String name;
	private int age;
	// 无参构造
  	public Student() {} 
 	// 有参构造
  	public Student(String n,int a) {
		name = n;
    	age = a; 
	}
    //此处其他代码省略
}

构造器的执行时机

在实例化对象时,调用(实例化一次调用一次)

注意事项

  1. 构造器名必须与它所在的类名必须相同。
  2. 它没有返回值,所以不需要返回值类型,甚至不需要void
  3. 如果你不提供构造器,系统会给出无参数构造器,并且该构造器的修饰符默认与类的修饰符相同
  4. 如果你提供了构造器,系统将不再提供无参数构造器,除非你自己定义。
  5. 构造器是可以重载的,既可以定义参数,也可以不定义参数。
  6. 构造器不能被static、final、synchronized、abstract、native修饰

示例

(1)声明一个员工类,

  • 包含属性:编号、姓名、薪资、性别,要求属性私有化,提供get/set方法,
  • 提供无参构造器和有参构造器
  • 提供getInfo()

(2)在测试类的main中分别用无参构造和有参构造创建员工类对象,调用getInfo方法

class Test02_Constructor_Exer{
	public static void main(String[] args){
		//分别用无参构造和有参构造创建对象,调用getInfo
		Employee e1 = new Employee();
		System.out.println(e1.getInfo());
		
		Employee e2 = new Employee("1001","张三",110000,'男');
		System.out.println(e2.getInfo());
		
		e2.setSalary(120000);
		System.out.println(e2.getInfo());
		
		System.out.println("e1薪资:" + e1.getSalary());
	}
}
class Employee{
	private String id;
	private String name;
	private double salary;
	private char gender;
	
	//提供无参构造器
	Employee(){
		
	}
	//提供有参构造器
	Employee(String i, String n){
		id = i;
		name = n;
	}
	Employee(String i, String n, double s, char g){
		id = i;
		name = n;
		salary = s;
		gender = g;
	}
	
	//提供get/set,
	public void setId(String i){
		id = i;
	}
	public String getId(){
		return id;
	}
	public void setName(String n){
		name = n;
	}
	public String getName(){
		return name;
	}
	public void setSalary(double s){
		salary = s;
	}
	public double getSalary(){
		return salary;
	}
	public void setGender(char g){
		gender = g;
	}
	public char getGender(){
		return gender;
	}
	//提供getInfo()
	public String getInfo(){
		return "编号:" + id + ",姓名:" + name + ",薪资:" + salary + ",性别:" +gender;
	}
}