为了账号安全,请及时绑定邮箱和手机立即绑定

Address的无参构造器

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

正在回答

7 回答

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

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

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

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

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



0 回复 有任何疑惑可以回复我~
#1

慕函数9281397 提问者

视频里面new Address对象的时候都是new的有参对象啊,只是在调用方法传参的时候有一个Address address声明,但这个并没有new对象,按理说这个无参构造器不是必须的,所以这点就有点不懂
2016-10-31 回复 有任何疑惑可以回复我~
#2

未之未央丿 回复 慕函数9281397 提问者

前面的Address address只是在声明对象,后面的new 构造方法,才是得到这个对象的值,如果只有Address address; 此时输出这个address是为null的
2016-10-31 回复 有任何疑惑可以回复我~
#3

慕函数9281397 提问者 回复 未之未央丿

我意思是,这个案例中我不写无参构造器为什么程序功能无法实现,我又看了一遍,程序里没有引用Address的无参对象的地方
2016-10-31 回复 有任何疑惑可以回复我~

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

 

1 回复 有任何疑惑可以回复我~
#1

慕函数9281397 提问者

有道理,想想应该是这样的,这样就理解深刻多了
2016-10-31 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~
#1

慕函数9281397 提问者

谢啦,我去试试
2016-10-31 回复 有任何疑惑可以回复我~

Student的一个成员属性是  Address类   

0 回复 有任何疑惑可以回复我~
#1

慕函数9281397 提问者

。。。。我初学,还是不懂。。。Student里面的Address也只是声明,并没有new的操作啊,只有在调用setAddress(address)方法之前才会有调用构造器的操作,而且都是有参的构造器
2016-10-31 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~
#1

慕函数9281397 提问者

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

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

0 回复 有任何疑惑可以回复我~
#1

慕函数9281397 提问者

我写了个test DEMO,mian函数里面new一个Student的有参对象并输出到控制台,而且我没写无参构造器,程序能正常运行没有出错
2016-10-31 回复 有任何疑惑可以回复我~
#2

慕函数9281397 提问者

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 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~
#1

慕函数9281397 提问者

没有,在写了有参构造器的情况下,无参构造器不是必须的吧?而且编译也能通过
2016-10-31 回复 有任何疑惑可以回复我~
#2

慕函数9281397 提问者

你去网上查查,在写了有参构造器的情况下,系统是没有无参构造器的,除非你自己写一个无参构造器,这点不用怀疑的
2016-10-31 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

Address的无参构造器

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信