问答详情
源自:3-5 [Hibernate单表操作] 组件属性

Address的无参构造器

Address的无参构造器并没有用到,可是我实际测试时,去掉Address的无参构造器,写入数据会失败,为什么?

提问者:慕函数9281397 2016-10-28 14:56

个回答

  • 未之未央丿
    2016-10-28 17:48:18
    已采纳

    一:在JAVA中,重写构造函数必须先写一遍不带参数的构造方法

        在该视频中,这里的POJO对象重写了构造函数.,所以必须写。

    二:如果没有重写构造函数,可以不写无参构造函数,因为系统默认是有这个方法的

    三:当new一个对象的时候,已经使用到了无参构造函数,例如:

    Student student = new Student();  这里new的时候已经使用了无参构造方法



  • wangdd3
    2016-10-31 15:13:16

    5分13秒的时候  你看那个视频,他有定义接收数据所用的对象模型。那你想象一下,他获取这个数据,并把数据放到Address类的里面,你认为用的方法是有参数构造方法么?  我个人认为是用到的new (无参数)    然后应用set方法放到对象中的。这属于  hibernate 底层获取数据以后进行封装的知识了,你可以尝试查一下

     

  • wangdd3
    2016-10-31 15:05:44

    还有 假如你用一些架构的时候,像这个Hibernate,他返回数据类型的时候,假如你用Student类进行接收,那么他有可能的顺序是  先调用一个无参数方法  创建新对象,然后进行封装。不过这个我不确定,因为我也在看,只是我个人的理解。所以,有的时候,无参数构造方法的调用是不经意间的。需要记住的就是  无参数构造方法 一定不可以没有(如果不写,默认会有)。   如果你想找到  哪里调用了这个无参构造方法,那你可以打个断点看一下

  • wangdd3
    2016-10-31 14:59:46

    Student的一个成员属性是  Address类   

  • wangdd3
    2016-10-31 14:51:23

    是的  你这样根本不会出错 因为你根本就没有调用无参的构造方法 你怎么可能出错呢。在写程序的时候  无参数的构造方法是必须的,无论用或者不用都必须写上。如果你就这么些  你创建对象 Student s = new Student();  你看看你报错不。   我都说过了   就算你正常创建类的时候  如果你不写构造方法,编译时,会自动给你加上一个构造方法, 如果你写了其他的构造方法,那么程序就自然就不会给你加入构造方法了。但是你一旦要是调用了无参构造方法来创建对象   那肯定是要报错的啊。   就好像你调用了一个没有定义的方法  怎么会不报错呢

  • wangdd3
    2016-10-31 14:28:54

    构造器其实就是构造对象实例的方法,无参数的构造方法是默认的,但是如果你创造了一个带有参数的构造方法,那么无参的构造方法必须显式的写出来,否则会编译失败。  这是网上搜到的原话,你自己好好理解理解。不要总是怀疑别人说的,怎么和你说的完全相反呢?而且你说的这个不用怀疑  明明就是错的

  • wangdd3
    2016-10-28 17:34:37

    不应该吧。正常虽然你代码里面不写无参数构造方法  但是编译时  实际上是默认有的。所以并不会出错的。
    还有一点  无参构造器是必须的。尽管你不写,编译也会自动加入的。只不过你写的代码里没有而已