There is no default constructor available in xxx错误引发

不知道为啥特别暴躁,突然出了这个问题也没有反应过来。查询了解之后醒悟。
==》前提:继承ArrayAdapter的时候,子类出现该错误。创建构造函数依旧出错。
==》原因:ArrayAdapter没有无参构造函数,所以子类继承时,构造函数中必须显式调用父类构造方法,并且传递对应所需要的参数。
==》基础不够牢固犯的错误

==》开贴原因:遇到一篇好帖子,pa过来保存一下。
好帖链接:http://bbs.csdn.net/topics/350150672

子类初始化的时候,先调用父类的构造方法。只有初始化以后再能调用类里面的非静态方法。在执行构造器前之前,当前类及父类所有的静态方法,静态变量,静态代码块都提前执行了,

规则1、一个类只要有父类,那么在它实例化的时候,一定是从顶级的父类开始创建。对于java来说要一直追述到Object
祖宗(Object)-> 曾爷爷 -> 爷爷 -> 父亲 -> me
这个思维很自然,没有祖宗,何来后代?祖宗的一些东西都没准备好,后代怎么继承去用?

规则2、一个类如果显式的定义了带参构造函数,那么默认无参构造函数自动失效
我们都知道一个类如果没有定义构造函数,那么会有一个默认的无参构造函数供你调用就是MyClass()。
但是如果你定义了一个带参构造函数,而没有显式的定义无参构造函数,那么无参构造函数就被隐藏了。
举个例子,把下面的代码编译一下,会报 The constructor MyClass() is undefined 错误。
public class MyClass {

public MyClass(int i){
return;
}

public static void main(String[] args) {
MyClass myClass = new MyClass();
}
}
为什么会报错?呵呵,这个我也不是很明白,高人给解释一下,为什么自己定义了构造函数,默认构造函数就必须无效了。
我自己的理解是既然定义了有参构造函数,就必须保证将参数初始化,是一种健壮性的体现(除非你自己定义无参构造函数,表示参数确实不需要显式的初始化)。

规则3:类本身的装载是在实例化自身之前进行的
类本身也是对象,只是没有初始化表示类对象之间区别的成员属性,一个没有任何成员属性的类其实就是一个【静态类】。因为你即使new了它,所有对象之间也没有区别。

规则3、静态方法不属于某一个实例对象,它属于类,简单的说,一个静态方法可以不用实例化类即可通过类名直接调用。
为什么需要静态方法?如果某个方法的执行结果和类实例对象无关或者需要对所有的实例共享,那么就有必要定义实例方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值