Address的无参构造器

来源:3-5 [Hibernate单表操作] 组件属性

慕函数9281397

2016-10-28 14:56

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

写回答 关注

7回答

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

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

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

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

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

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



    慕函数928... 回复未之未央丿

    我意思是,这个案例中我不写无参构造器为什么程序功能无法实现,我又看了一遍,程序里没有引用Address的无参对象的地方

    2016-10-31 12:51:08

    共 3 条回复 >

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

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

     

    慕函数928...

    有道理,想想应该是这样的,这样就理解深刻多了

    2016-10-31 15:17:09

    共 1 条回复 >

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

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

    慕函数928...

    谢啦,我去试试

    2016-10-31 15:09:11

    共 1 条回复 >

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

    Student的一个成员属性是  Address类   

    慕函数928...

    。。。。我初学,还是不懂。。。Student里面的Address也只是声明,并没有new的操作啊,只有在调用setAddress(address)方法之前才会有调用构造器的操作,而且都是有参的构造器

    2016-10-31 15:06:33

    共 1 条回复 >

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

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

    慕函数928...

    所以我原本想问的就是视频案例里,Address类也没有调用无参构造方法,可是我自己照视频敲代码之后去掉Address的无参构造方法程序运行就有问题了,想找大神问问来着。。。

    2016-10-31 14:55:35

    共 1 条回复 >

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

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

    慕函数928...

    public class People { public static void main(String[] args) { Student p=new Student(1, "zzz"); System.out.println(p.name); } } class Student{ int id; String name; public Student(int id, String name) { this.id = id; this.name = name; } }

    2016-10-31 14:47:17

    共 2 条回复 >

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

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

    慕函数928...

    你去网上查查,在写了有参构造器的情况下,系统是没有无参构造器的,除非你自己写一个无参构造器,这点不用怀疑的

    2016-10-31 12:46:59

    共 2 条回复 >

Hibernate初探之单表映射

Java持久化框架Hibernate入门教程,掌握Hibernate基本概念

74810 学习 · 793 问题

查看课程

相似问题