Java:浅谈类的构造器

0. 预备

阅读本篇需要你预先了解 Java 中类的基本知识。

  1. 世间一切皆对象;
  2. 类是对象的模板;
  3. 类包含属性、方法、静态成员和静态方法。
  4. 类可以继承。

1. 类定义

[访问修饰符] class 类名称 [extends 父类名称]
{
		[访问修饰符] 类型 成员名;
		[访问修饰符] 类型 方法名;
}

2. 构造器

  1. 构造器是和类名同名,且不返回任何东西的方法。
  2. 构造器用于构造对象,还可以初始化对象的信息。
  3. 一个类中定义的多个构造器,彼此构成重载;
  4. 如果没有显式定义构造器,则编译器提供一个默认的空参构造器;
  5. 如果显式定义了构造器,则编译器不在提供默认的空参构造器。

3. 例子

有一个 “Person” 类,有五个属性:姓名、性别、年龄、身高和体重。

// 为了篇幅,不考虑封装性
String name;
boolean gender;
int age;
double height;
double weight;

3.1. 空参构造器

public class Person
{
	String name;
	boolean gender;
	int age;
	double height;
	double weight;
}

在上面的代码中,我没有写任何方法,当然包括构造器。

编写一段代码进行测试:

public class Solution
{
	public static void main(String[] args)
	{
		Person person = new Person();
		System.out.println(person.name);
		System.out.println(person.gender);
		System.out.println(person.age);
		System.out.println(person.height);
		System.out.println(person.weight);
	}
}

运行结果:
在这里插入图片描述

在下面的代码中,编写一个空参构造器

public class Person
{
	String name;
	boolean gender;
	int age;
	double height;
	double weight;

	public Person()
	{
	}
}

运行结果:
在这里插入图片描述

默认构造器可以构造一个对象,但是对象的属性值都是默认值,包含的信息很少。

问1:为什么我没写构造器,还是能构造对象?
答1:因为编译器提供一个默认的空参构造器。

3.2. 有参构造器

有些时候,你只知道对象的部分信息。

public class Person
{
	String name;
	boolean gender;
	int age;
	double height;
	double weight;
	
	public Person()
	{
	}
	
	public Person(String name, boolean gender)
	{
		this.name = name;
		this.gender = gender;
	}
}

测试

public class Solution
{
	public static void main(String[] args)
	{
		Person person = new Person("Ana", false);
		System.out.println(person.name);
		System.out.println(person.gender);
		System.out.println(person.age);
		System.out.println(person.height);
		System.out.println(person.weight);
	}
}

运行结果:
在这里插入图片描述

3.2. 重载构造器

有些时候,你知道对象的所有信息。

public class Person
{
	String name;
	boolean gender;
	int age;
	double height;
	double weight;
	
	public Person()
	{
	}
	
	public Person(String name, boolean gender)
	{
		this.name = name;
		this.gender = gender;
	}
	
	public Person(String name, boolean gender, int age, double height, double weight)
	{
		this.name = name;
		this.gender = gender;
		this.age = age;
		this.height = height;
		this.weight = weight;
	}
}

测试

public class Solution
{
	public static void main(String[] args)
	{
		Person person = new Person("Ana", false, 18, 170, 45);
		System.out.println(person.name);
		System.out.println(person.gender);
		System.out.println(person.age);
		System.out.println(person.height);
		System.out.println(person.weight);
	}
}

测试结果:
在这里插入图片描述

上面三个构造器彼此构成重载

public Person()
public Person(String name, boolean gender)
public Person(String name, boolean gender, int age, double height, double weight)

4. 额外补充

关键字 this 的作用。

  1. 关键字 this 指代当前调用方法的对象;
  2. 调用方法;
  3. 调用重载构造器。

这里,讲讲 this 调用重载构造器。

构造器 “Person(String name, boolean gender)” 和构造器 “public Person(String name, boolean gender, int age, double height, double weight)” 有一部分代码是重复的。

public Person(String name, boolean gender)
{
	this.name = name;
	this.gender = gender;
}

public Person(String name, boolean gender, int age, double height, double weight)
{
	this.name = name;
	this.gender = gender;
	this.age = age;
	this.height = height;
	this.weight = weight;
}

改进后:

public Person(String name, boolean gender)
{
	this.name = name;
	this.gender = gender;
}

public Person(String name, boolean gender, int age, double height, double weight)
{
	this(name, gender); // 关键点,调用重载构造器
	this.age = age;
	this.height = height;
	this.weight = weight;
}

测试:

public class Solution
{
	public static void main(String[] args)
	{
		Person person = new Person("Ana", false, 18, 170, 45);
		System.out.println(person.name);
		System.out.println(person.gender);
		System.out.println(person.age);
		System.out.println(person.height);
		System.out.println(person.weight);
	}
}

结果:
在这里插入图片描述
注意事项

  1. 调用格式: this(零个或多个参数);
  2. 必须处在重载构造器的第一句;
  3. 一个构造器中,最多只能调用一个重载构造器。
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值