Java构造器的理解

构造器的引入

当我们想获取某一个类的对象的时候,其中最简单也是最快的方法就是通过 new 关键字来获取:

//获取 people 对象
People perple = new People();

这个过程,就是引用了 People 类的无参构造器,这就确保了你能操作对象之前,它已经被初始化了。在 Java 中,通过提供构造器,类的设计者可以保证每个对象都能得到初始化。

构造器就是一个在创建对象时被自动调用的特殊方法,该方法没有返回值。这与返回值为空(void)的情况不同,对于空返回值,尽管方法本身不会返回什么,但仍可选择让它返回别的东西。构造器则不会返回任何东西,new 表达式确实返回了新建对象的引用,但构造器本身没有任何返回值。

构造器的命名

既然构造器是一个方法,那么就产生了第一个问题,构造器的命名不能与类里面的方法名冲突;第二个问题就是必须让编译器知道应该调用哪个方法。Java 采用的解决方案就是构造器与类具有相同的名称。该方法完美解决了以上的两个问题(方法命名和自动调用)。

此处需要注意一点,由于构造器具有与类相同的命名,所以首字母需要大写,”方法首字母小写” 的编码风格不适用于构造器。

构造器的形式

不接受任何参数的构造器叫做默认构造器,也称为无参构造器。当类的设计者没有在类中添加构造器的时候,编译器会默认的加上一个无参构造器。

public class People {
	private String name;
	
	//无参构造器
	public People() {
	}
}

但在初始化对象时需要带有形式参数的时候,就可以使用有参构造器了。

public class People {

	private String name;
	
	//有参构造器
	public People(String name) {
	    this.name = name;
	}
}

这样就可以通过有参构造器创建带有 name 的 People 对象了。

//创建带有名字的对象
People people = new People(“Tom”);

如果 People 类中只有一个有参构造器 People(String name),那么编译器就不会允许你用其他的方式创建 People 的对象了,比如使用 new People() 的方式来创建不带 name 的 People 对象,这种操作是不被允许的,如果想完成这个操作,那么在类中再创建一个无参构造器即可。

public class People {

	private String name;
	
	//无参构造器
	public People() {
	}
	
	//有参构造器
	public People(String name) {
	    this.name = name;
	}
}

这样就可以通过有参构造器和无参构造器来创建带有 name 和不带 name 的对象了。

super 关键字

构造器是不能被继承的,如果子类要调用父类中的构造器,那么就必须要用到 super 关键字了。

public class Chinese extends People {

	public Chinese() {
	    super();
	}
	
	public Chinese(String name) {
	    super(name);
	}
}

Chinese 类中的两个构造器中包含了 super 关键字,它的作用就是父类中的构造器实例化,加入到 Chinese 中。super 关键字只能放在首行,并且如果没有加上 super 关键字,编译器会自动加上。如果子类中没有添加任何构造器,那么子类会默认调用父类中的无参构造器,如果父类没有无参构造器,子类又没有显示地调用父类中的构造器,那么将会报错。

欢迎关注公众号:一盐难进

在这里插入图片描述

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值