黑马程序员技术交流社区

标题: 默认构造函数的一个小疑惑 [打印本页]

作者: blackstones1    时间: 2014-7-3 20:33
标题: 默认构造函数的一个小疑惑
当创建了一个类 没有定义构造函数时 系统会自动默认给这个类加入一个空参数构造函数
class Abc
{
         //Abc(){}
}
视频上说是为了方便该类的初始化,要是没有的话,对象就建立不出来。
是不是说如果系统没加Abc(){}  就不能 Abc a = new Abc();
想问下 这是为什么      新手 求大婶指点

作者: ⋛⋌⋚JEEP    时间: 2014-7-3 20:43
本帖最后由 ⋛⋌⋚JEEP 于 2014-7-3 20:46 编辑

       如果在该类中系统不默认创建一个空参数的构造函数,你的确是不能实现该类的实例(建立对象)。你可以用在该类定义一个非空参数的构造函数,如Abc(int a){this.a=a;}  ;主函数里调用 Abc a = new Abc();编译一定报错的。因为你在该类中建立独立非空参数的构造函数,所以系统不会默认帮你建立空参数的构造函数,你就无法建立这个对象,需要传入参数才可以。
      由此可以证明,系统没加Abc(){}  就不能 Abc a = new Abc();{:3_57:}
作者: blackstones1    时间: 2014-7-3 20:51
这是jvm的规则还是说有什么原理。话说 、两个类即没有继承关系又没有实现关系,一个类中为什么可以创建另一个类的对象············
作者: cheye0207    时间: 2014-7-3 21:02
new对象必须符合某个构造函数类型。例如 类中只有ABC(int x)构造函数,就不能new ABC(String str).
同理,若类中没有空参构造函数,也不能new空参对象
作者: 我为你着迷    时间: 2014-7-3 21:25
这个我觉得其实没有什么为什么。当你创建Abc a = new Abc();一个对象的时候,那么在对象调用的时候,系统必须自动给你加一个空参数的构造函数你才可以进行对象调用,否则你什么事都干不聊。这是java语言的内部运行机制导致的,这个你不用纠结 亲
作者: xp8812    时间: 2014-7-3 22:09
是不是说如果系统没加Abc(){}  就不能 Abc a = new Abc(); ---------------------是的,系统不加Abc(){} 的话,只能说明你自己创建了构造方法,对象还是可以用你自己创建的构造方法创建出来的
作者: 那片天空    时间: 2014-7-3 22:28
这个,如果自己加了系统就不给加了(包括带参数和无参数构造方法)

public class A {
public static void main(String[] args) {
       B b=new B();//报错
        }
}
class B {
   public B(int sum) {
  }
}

这种情况下是会报错的;

作者: ⋛⋌⋚JEEP    时间: 2014-7-9 10:00
blackstones1 发表于 2014-7-3 20:51
这是jvm的规则还是说有什么原理。话说 、两个类即没有继承关系又没有实现关系,一个类中为什么可以创建另一 ...

创建一个类的对象,是看该类中的构造函数的,跟它的神马继承和实现关系没关系,只要构造函数不是私有的就好。
作者: 晴儿    时间: 2014-7-9 12:13
构造函数对类进行初始化。
作者: 導ぷ仙″兲蕐    时间: 2014-7-9 12:28
java语言硬性规定吧




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2