对于java对象的构造:总的来说有6种方法,第一种是有参数的构造函数,第二种是无参数的构造函数,第三种是重载构造函数,第四种是调用其他构造器的构造函数,第五种是使用初始化块,第六种是使用显式域初始化

下面就一一介绍这几种方法并给出示例,最后还要说明一下一些需要注意的方面:

第一种:最普通的一种,有参数的构造函数

示例代码:

package InitTest;

import static java.lang.System.*;

public class EmployeeTest {

	public static void main(String[] args) {
		Employee Amy=new Employee("Amy",3000.0);
		out.println("员工"+Amy.getName()+"的薪水为每月"+Amy.getSalary()+"元");
	}
}

class Employee{
	private String name;
	private double salary;
	
	public Employee(String aName,double aSalary) {
		name=aName;
		salary=aSalary;
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String aName) {
		name=aName;
	}
	
	public double getSalary() {
		return salary;
	}
	
	public void setSalary(double aSalary) {
		salary=aSalary;
	}
}

运行结果:

java类的对象构造 java 构造对象_对象

第二种:无参数的构造函数

示例代码:

package InitTest;

import static java.lang.System.*;

public class EmployeeTest {

	public static void main(String[] args) {
		Employee aEmployee=new Employee();
		out.println("员工"+aEmployee.getName()+"的薪水为每月"+aEmployee.getSalary()+"元");
	}
}

class Employee{
	private String name;
	private double salary;
	
	public Employee() {
		name="aEmployeeName";
		salary=0.0;
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String aName) {
		name=aName;
	}
	
	public double getSalary() {
		return salary;
	}
	
	public void setSalary(double aSalary) {
		salary=aSalary;
	}
}

运行结果:

java类的对象构造 java 构造对象_构造器_02

第三种:重载构造函数

示例代码:

package InitTest;

import static java.lang.System.*;

public class EmployeeTest {

	public static void main(String[] args) {
		Employee aEmployee=new Employee();
		out.println("员工"+aEmployee.getName()+"的薪水为每月"+aEmployee.getSalary()+"元");
		Employee Amy=new Employee("Amy",3000.0);
		out.println("员工"+Amy.getName()+"的薪水为每月"+Amy.getSalary()+"元");
	}
}

class Employee{
	private String name;
	private double salary;
	
	public Employee() {
		name="aEmployeeName";
		salary=0.0;
	}
	
	public Employee(String aName,double aSalary) {
		name=aName;
		salary=aSalary;
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String aName) {
		name=aName;
	}
	
	public double getSalary() {
		return salary;
	}
	
	public void setSalary(double aSalary) {
		salary=aSalary;
	}
}

运行结果:

java类的对象构造 java 构造对象_构造函数_03

第四种:调用其他构造器的构造函数

package InitTest;

import static java.lang.System.*;

public class EmployeeTest {

	public static void main(String[] args) {
		Employee aEmployee=new Employee();
		out.println("员工"+aEmployee.getName()+"的薪水为每月"+aEmployee.getSalary()+"元");
		Employee Amy=new Employee("Amy",3000.0);
		out.println("员工"+Amy.getName()+"的薪水为每月"+Amy.getSalary()+"元");
		Employee John=new Employee("John",4000.0,"A组组长");
		out.println("员工"+John.getName()+"的薪水为每月"+John.getSalary()+"元,备注:"+John.getDescription());
	}
}

class Employee{
	private String name;
	private double salary;
	private String description;
	
	public Employee() {
		name="aEmployeeName";
		salary=0.0;
	}
	
	public Employee(String aName,double aSalary) {
		name=aName;
		salary=aSalary;
	}
	
	public Employee(String aName,double aSalary,String aDescription) {
		this(aName,aSalary);
		description=aDescription;
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String aName) {
		name=aName;
	}
	
	public double getSalary() {
		return salary;
	}
	
	public void setSalary(double aSalary) {
		salary=aSalary;
	}
	
	public String getDescription() {
		return description;
	}
	
	public void setDescription(String aDescription) {
		name=aDescription;
	}
}

运行结果:

java类的对象构造 java 构造对象_java类的对象构造_04

第五种:使用初始化块

package InitTest;

import static java.lang.System.*;
import java.util.Random;

public class EmployeeTest {

	public static void main(String[] args) {
		Employee aEmployee=new Employee();
		out.println("员工"+aEmployee.getName()+"的薪水为每月"+aEmployee.getSalary()+"元");
		out.println("目前id:"+Employee.getRandomPointer());
		Employee Amy=new Employee("Amy",3000.0);
		out.println("员工"+Amy.getName()+"的薪水为每月"+Amy.getSalary()+"元");
		out.println("目前id:"+Employee.getRandomPointer());
		Employee John=new Employee("John",4000.0,"A组组长");
		out.println("员工"+John.getName()+"的薪水为每月"+John.getSalary()+"元,备注:"+John.getDescription());
		out.println("目前id:"+Employee.getRandomPointer());
	}
}

class Employee{
	
	private static int randomPointer;
	{
		Random generator=new Random();
		randomPointer=	generator.nextInt();
	}
	
	private String name;
	private double salary;
	private String description;
	
	public Employee() {
		name="aEmployeeName";
		salary=0.0;
	}
	
	public Employee(String aName,double aSalary) {
		name=aName;
		salary=aSalary;
	}
	
	public Employee(String aName,double aSalary,String aDescription) {
		this(aName,aSalary);
		description=aDescription;
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String aName) {
		name=aName;
	}
	
	public double getSalary() {
		return salary;
	}
	
	public void setSalary(double aSalary) {
		salary=aSalary;
	}
	
	public String getDescription() {
		return description;
	}
	
	public void setDescription(String aDescription) {
		name=aDescription;
	}
	
	public static int getRandomPointer() {
		return randomPointer;
	}
}

运行结果:

java类的对象构造 java 构造对象_对象_05

第六种:

示例代码:

package InitTest;

import static java.lang.System.*;
import java.util.Random;

public class EmployeeTest {

	public static void main(String[] args) {
		Employee aEmployee=new Employee();
		out.println("员工"+aEmployee.getName()+",描述:"+aEmployee.getDescription());
		
	}
}

class Employee{
	
	private String name;
	private String description="aDescription";
	
	public Employee() {
		name="aEmployeeName";
	}
	
	public String getName() {
		return name;
	}
	
	public void setName(String aName) {
		name=aName;
	}
	
	public String getDescription() {
		return description;
	}
}

运行结果:

java类的对象构造 java 构造对象_构造器_06


以下是几点注意事项:

(1)如果在构造器中没有显式的给域赋予初值,那么就会自动地赋为默认值:数值为0,布尔值为false,对象引用为null

(2) 如果初始化块使用的是static,则只执行一次

(3)下面是java中调用构造器的具体处理步骤:

1.所有数据被初始化为默认值(0,false,null)

2.按顺序执行域初始化语句和初始化块

3.执行构造器,如果构造器里面使用了其他构造器,则首先执行里面的构造器。

(4)另外还有一个finalize方法用于销毁对象,但是由于java的垃圾回收机制相当完善,因此这个方法并不常用