A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 章成 黑马帝   /  2011-7-18 09:31  /  3318 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看到有些代码会写在构造方法里,像图形界面swing那部分的,涉及到建界面的代码都是写在构造方法里,这样写有什么好处,写在一方法里,再调用行不行?

评分

参与人数 1技术分 +2 收起 理由
admin + 2 这个问题问得不错!

查看全部评分

3 个回复

倒序浏览
黑马网友  发表于 2011-7-18 09:35:58
沙发
可以写在别的方法里...
构造方法主要的好处就是有些默认要执行的代码或初始化的参数在对象创立的时候就直接执行或初始化了...
我认为主要是为了方便,没有什么特别的
回复 使用道具 举报
黑马网友  发表于 2011-7-18 10:10:34
藤椅
初始化对象
回复 使用道具 举报
黑马网友  发表于 2011-7-21 16:24:03
板凳

回复 楼主 的帖子

老实说,构造方法一般用来初始化对象的,代码都写在构造方法里,好处就是创建了对象之后不需调用方法就可以实现功能。看起来挺方便的,但是不是好习惯,有坏处。
    1、比如一个对象要实现某个功能,加入代码全部写在构造方法里,那么我们就不知道这个对象的功能,做不到见名知意,逻辑上不通。
2、在多线程环境中,当在构造方法中创建一个线程时,显式(直接将它传递给构造方法)、隐式(Thread或Runnable是所属对象的内部类),this(就是当前对象)几乎总是被线程共享,于是线程在当前对象完成构造前就能看见(也就是访问,当然有可能修改)它。所以最好不要立即启动它,而是在构造方法外start()方法来启动线程。
3、而且如果代码有要捕获的异常,那怎么办?此时实例对象都没有完全创建成功(就是没有正确初始化),谁来捕获异常?
4、构造方法是不能继承的,那么如何让代码重用?Java的多态性怎么体现呢?
    这是我能想到的坏处了,请多多指教。

但是在构造方法中调用其他方法可能会出现问题。
在构造方法中调用覆盖的(既不是final也不是static)的方法出现问题,如果子类覆盖了这个方法,那么子类实例化时会先调用父类的构造方法,而它又调用了被覆盖的方法,由于多态性,实际调用的是子类对象的同名方法,但是此时子类实例对象还没创建!所以矛盾了。

评分

参与人数 1技术分 +1 收起 理由
admin + 1 先加分再看

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马