课程
/后端开发
/Java
/Hibernate初探之单表映射
Address的无参构造器并没有用到,可是我实际测试时,去掉Address的无参构造器,写入数据会失败,为什么?
2016-10-28
源自:Hibernate初探之单表映射 3-5
正在回答
一:在JAVA中,重写构造函数必须先写一遍不带参数的构造方法
在该视频中,这里的POJO对象重写了构造函数.,所以必须写。
二:如果没有重写构造函数,可以不写无参构造函数,因为系统默认是有这个方法的
三:当new一个对象的时候,已经使用到了无参构造函数,例如:
Student student = new Student(); 这里new的时候已经使用了无参构造方法
慕函数9281397 提问者
未之未央丿 回复 慕函数9281397 提问者
慕函数9281397 提问者 回复 未之未央丿
5分13秒的时候 你看那个视频,他有定义接收数据所用的对象模型。那你想象一下,他获取这个数据,并把数据放到Address类的里面,你认为用的方法是有参数构造方法么? 我个人认为是用到的new (无参数) 然后应用set方法放到对象中的。这属于 hibernate 底层获取数据以后进行封装的知识了,你可以尝试查一下
还有 假如你用一些架构的时候,像这个Hibernate,他返回数据类型的时候,假如你用Student类进行接收,那么他有可能的顺序是 先调用一个无参数方法 创建新对象,然后进行封装。不过这个我不确定,因为我也在看,只是我个人的理解。所以,有的时候,无参数构造方法的调用是不经意间的。需要记住的就是 无参数构造方法 一定不可以没有(如果不写,默认会有)。 如果你想找到 哪里调用了这个无参构造方法,那你可以打个断点看一下
Student的一个成员属性是 Address类
是的 你这样根本不会出错 因为你根本就没有调用无参的构造方法 你怎么可能出错呢。在写程序的时候 无参数的构造方法是必须的,无论用或者不用都必须写上。如果你就这么些 你创建对象 Student s = new Student(); 你看看你报错不。 我都说过了 就算你正常创建类的时候 如果你不写构造方法,编译时,会自动给你加上一个构造方法, 如果你写了其他的构造方法,那么程序就自然就不会给你加入构造方法了。但是你一旦要是调用了无参构造方法来创建对象 那肯定是要报错的啊。 就好像你调用了一个没有定义的方法 怎么会不报错呢
构造器其实就是构造对象实例的方法,无参数的构造方法是默认的,但是如果你创造了一个带有参数的构造方法,那么无参的构造方法必须显式的写出来,否则会编译失败。 这是网上搜到的原话,你自己好好理解理解。不要总是怀疑别人说的,怎么和你说的完全相反呢?而且你说的这个不用怀疑 明明就是错的
不应该吧。正常虽然你代码里面不写无参数构造方法 但是编译时 实际上是默认有的。所以并不会出错的。还有一点 无参构造器是必须的。尽管你不写,编译也会自动加入的。只不过你写的代码里没有而已
举报
Java持久化框架Hibernate入门教程,掌握Hibernate基本概念
2 回答为什么address类里面必须有无参的构造函数啊
2 回答为什么我不定义Address的无参构造方法 运行主程序会报错
3 回答关于创建有参构造方法
3 回答address类中为什么要把自定义构造方法中的super();注释掉?
3 回答重写Address类的toString()怎么输出address=null呢?