java 构造器

1)java 构造器不是函数,所以他不能被继承,这在我们写子类的构造器的时候,即使子类构造参数和父类是完全一样的,我们也要写super()的原因;
2)构造器的修饰符比较有限,就public,priate,protected三种,其他任何的修饰符都不能对其使用,也就是说构造器不能被修饰成抽象,同步,静态等
3)因为构造器不是函数,所以构造器不能有返回值,但要说明的是构造器中允许存在retrun语句,但是return语句中什么也不能返回。
4)在构造其中中this和super只能选其一,不能同时出现在同一个构造其中,而且二者的位置都是构造器的第一行。
5)如果子类的构造器没有显示地挑用超类的构造器,则将自动地调用超类默认(没有参数)的构造器。如果此时超类没有默认的构造器,则Java编译器将报告错误.一般无参构造器为缺省的构造器,当我们写一个没有构造器的类,编译的时候,编译器会自动加上一个不带参数的构造器。但是类中有构造器,编译器就不会再自动给加上一个不带参数的构造器,所以我们在编程的时候要记得把缺省的构造器写上,以防子类调用。
6)其他的构造器也能使用super或者this,调用成一个递归构造链,最后的结果是父类的构造器(可以是多层级的父类构造器)总是在子类的构造器前执行,递归的调用父类构造器。
7)构造器中一定不能创建自身的实例,否则会造成调用栈溢出错误,这个规则也使用于对象的实例变量,如果对象中有自身的引用,那么这个引用一定不能在定义中或者构造器中初始化。
class a
{
a _a = new a();

public a()
{
a _b = new a();
}
} 呵呵,这样会造成一个无穷递归的调用栈
8)如果父类是一个抽象类,那通过调用父类的构造器,也可以将它初始化,并且初始化其中的数据。
9)如果你要在构造器中调用一个方法时,将该方法声明为private。
对于这个规则是需要一些说明的,假使你的父类构造器中要调用一个非静态方法,而这个方法不是private的又被子类所重载,这样在实际创建子类的过程中递归调用到了父类的构造器时,父类构造器对这个方法的调用就会由于多态而实际上调用了子类的方法,当这个子类方法需要用到子类中实例变量的时候,就会由于变量没有初始化而出现异常(至于为什么子类中的实例变量没有初始化可以参考上边的实例初始化过程),这是Java不想看到的情况。而当父类构造器中调用的方法是一个private方法时,多态就不会出现,也就不会出现父类构造器调用子类方法的情况,这样可以保证父类始终调用自己的方法,即使这个方法中调用了父类中的实例变量也不会出现变量未初始化的情况(变量初始化总是在当前类构造器主体执行之前进行)。

总结

主题 构造器 方法
功能 建立一个类的实例 java功能语句
修饰 不能用bstract, final, native, static, or synchronized 能
返回类型 没有返回值,没有void 有返回值,或者void
命名 和类名相同;通常为名词,大写开头 通常代表一个动词的意思,小写开头
this 指向同一个类中另外一个构造器,在第一行 指向当前类的一个实例,不能用于静态方法
super 调用父类的构造器,在第一行 调用父类中一个重载的方法
继承 构造器不能被继承 方法可以被继承
编译器自动加入一个缺省的构造器 自动加入(如果没有)
编译器自动加入一个缺省的调用到超类的构造器 自动加入(如果没有) 不支持
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值