黑马程序员技术交流社区
标题:
关于无参构造的问题
[打印本页]
作者:
宋旭东
时间:
2013-7-4 17:05
标题:
关于无参构造的问题
class Demo1
{
public static void main(String[] args)
{
Human h = new Human(); //创建一个Human类对象
}
}
class Human
{
//这是当前Human类的一个构造方法
public Human(String name){
System.out.println("这是一个Human类的构造方法");
}
}
关于这段代码Demo1中创建了Human对象,在没有提供构造函数的情况下、虚拟机会自动添加无参构造函数,但下面自己写了构造函数,这里的构造函数是有参构造,编译会报错
我的疑问是编译时下面没有无参构造、虚拟机为什么不自动添加无参构造而报错了,希望详细解释下,谢谢
作者:
oxf974025918
时间:
2013-7-4 18:19
在没有构造函数的情况下jvm会自动带有默认隐藏的无参构造函数,但是你这里有了带参构造函数,所以那个无参构造函数要自己写为显示无参构造函数。具体是为什么的话不要纠结那么多,这就是语法,记住要这样就行了。如有高手解释,我愿洗耳恭听。
作者:
木偶_freedom
时间:
2013-7-4 18:47
在程序本身没有写构造函数的情况下,生成实例时 系统会默认调用一个 无参的构造函数。 如果你重载构造方法 那么系统就不提供那一个默认的构造方法了。建议楼主看一下 毕老师 的 单例设计模式 的视频(day06)。 思考下 毕老师为什么把 构造函数 private 就会明白了。
作者:
杨翔
时间:
2013-7-4 20:09
额,这样理解吧,你自己不写构造函数,虚拟机好心好意帮你提供无参构造函数,但是现在你不鸟虚拟机,非得自己写构造函数,等你new对象了,还想厚着脸皮去问虚拟机要一个无参数的构造函数,人家当然不乐意啦,报你错呗。。。。{:soso_e113:}哈哈,开个玩笑
作者:
王洪波
时间:
2013-7-4 20:47
定义了有参构造方法后,编译器便不会再自动添加加默认的无参构造方法.
此时要想使用无参构造方法,只有显示声明出
作者:
mo﹎雲℡
时间:
2013-7-4 21:04
你的疑问是编译时下面没有无参构造、虚拟机为什么不自动添加无参构造而报错了。
因为:1,每个类中都有一个默认的无参构造器。这个无参构造器是隐藏的。
2,你自己手动创建了一个构造器,在主方法main中创建对象的时候,系统就会自动查找有没有构造器,如果有他就直接调用。如果没有他才自动添加默认隐藏构造器。
3,
Human h = new Human();
此时创建的是一个无参的对象,但是你的类中没有无参构造器,所以系统报错。
作者:
chslzj
时间:
2013-7-5 12:48
当你写了一个构造函数的时候,编译器就默认你是自己写的构造函数,不需要编译器提供构造函数,然后你还没有写不带参数的构造函数。。。
作者:
一木榜公
时间:
2013-7-5 13:01
我的理解:这个问题其实就是,用你的构造函数,还是用虚拟机的构造函数? 只能二选一。
你建立了构造函数虚拟机就用你的,他不会再给你提供默认的构造函数。
你没有建立构造函数,虚拟机认为你要用他建立的默认构造函数。
作者:
李海鹏
时间:
2013-7-5 13:49
Human h = new Human(); 此时创建的是一个无参的对象,但是你的类中没有无参构造器,所以系统报错。
作者:
在乎..
时间:
2013-7-11 19:56
JVM会优先使用程序员定义的构造函数,如果没有定义则会调用自己的默认构造函数,你这定义了,JVA检测到要带参数的构造函数,你没有用到就报错。
作者:
徐卓
时间:
2013-7-11 20:51
你已经写了构造函数,就不能出现无带入值得构造函数,java是这样默认的,么办法
作者:
小狼
时间:
2013-7-12 16:29
也受教了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2