社区
Java SE
帖子详情
为何构造函数中少作事情好呢?
jayli426
2008-07-28 02:25:16
例如有个类
Class A
{
public A()
{
}
public A(Ojbect value)
{
initValue();
}
public void initValue(Ojbect value)
{
}
}
但是用的时候,我看一般都倾向与
这样用
即先构造,然后再初始化
A a = new A()
a.initValue(new Object());
而不是
A a= new A(Object value);
为何一般采取第一种选择呢?
...全文
122
18
打赏
收藏
微信扫一扫
点击复制链接
分享
举报
写回复
18 条
回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
greathawker
2008-07-30
如果构造函数抛错, 不好跟踪.
打赏
举报
回复
赞
huaya23
2008-07-29
个人看法!
打赏
举报
回复
赞
magicxin031
2008-07-29
thinking in java第七章中讲构造器内部的多态方法行为时讲到过编写构造器的时候有一条有益原则:尽可能用简单的方法使对象进入正常状态,如果可以得话,避免调用其他方法。在构造器唯一能能够安全调用的那些方法是基类(父类)中的final方法。
这是因为当构造器中有多态方法时的构造器调用方法与一般方法不同,为了避免这种调用方法的不安全性而定的。这与楼主的“不要让构造器做太多事”是否有关有待查证……
打赏
举报
回复
赞
ZangXT
2008-07-29
我怀疑lz是不是看C ++的书看的,C++有的书里有这样的提法.
因为C++需要程序员自己回首内存,当在构造函数中出问题的时候,对象没有构造,所以无法调用析构函数,这样很多分配的 内存,打开的文件等就无法处理了.所以可能在构造方法中尽量少做事情好.
但是java中由于垃圾自动回收,以及比较好的异常处理机制,可以避免这些问题,我感觉应该不存在这个说法吧.
个人推断,仅供拍砖
打赏
举报
回复
赞
jayli426
2008-07-29
好像答案都不是很ok哦?
打赏
举报
回复
赞
finalzhzhk
2008-07-28
“不要让构造函数做太多的事情 ”
实际应用中可以更加灵活。
比如我们做的项目中,需要做权限控制,那么没有某个组件的权限就不初始化。
(为什么不控制在new呢,因为是反射机制加载的。)
打赏
举报
回复
赞
ZangXT
2008-07-28
在C++ 里好像有这样的说法 ,忘了在哪本书看的了.
不过设计到初始化的话最好还是在构造函数里进行,只要这样才能确保调用.
打赏
举报
回复
赞
justinavril
2008-07-28
既然你知道功能一样 那就是说没有区别 那不同的编写习惯就倾向于不同的使用习惯呗...
打赏
举报
回复
赞
jishu_vip
2008-07-28
不要让构造函数做太多的事情
这个还没有听说过!
打赏
举报
回复
赞
小爽昵称已被占用
2008-07-28
[Quote=引用 7 楼 wenzheng38 的回复:]
不带参数的也可以不写啊,编译时有默认的构造函数
但是带参数的构造函数往往是对类内的私有成员变量进行初始化的
[/Quote]
当然可以不写,最后写上为好,我觉得。
打赏
举报
回复
赞
ZangXT
2008-07-28
设计构造函数的初衷就是为了确保进行初始化工作,避免用户忘记了执行init方法导致的问题.
打赏
举报
回复
赞
wenzheng38
2008-07-28
不带参数的也可以不写啊,编译时有默认的构造函数
但是带参数的构造函数往往是对类内的私有成员变量进行初始化的
打赏
举报
回复
赞
小爽昵称已被占用
2008-07-28
[Quote=引用 3 楼 yousite1 的回复:]
没有一般采取第一种选择这种说法吧,呵呵
因为你显式的声明了带参的构造函数, public A(Ojbect value) ,如果你没加上public A()不带参的
构造函数会导致执行A a = new A() 时会出错,所以当然要加显式的写上这个
不带参的构造函数了.
[/Quote]
也就是说没区别?
其实默认的都最好写上。
打赏
举报
回复
赞
JeffFang
2008-07-28
好像我在哪本书里看到的,不要让构造函数做太多的事情
打赏
举报
回复
赞
hmilj245216
2008-07-28
只是习惯问题
打赏
举报
回复
赞
yousite1
2008-07-28
没有一般采取第一种选择这种说法吧,呵呵
因为你显式的声明了带参的构造函数, public A(Ojbect value) ,如果你没加上public A()不带参的
构造函数会导致执行A a = new A() 时会出错,所以当然要加显式的写上这个
不带参的构造函数了.
打赏
举报
回复
赞
小爽昵称已被占用
2008-07-28
我觉得没区别。
打赏
举报
回复
赞
相关推荐
java
构造函数
可以抛出异常吗_关于java:使
构造函数
抛出异常是一种
好
习惯吗?...
让
构造函数
抛出异常是一个
好
的实践吗?例如,我有一个类Person,我将age作为它的唯一属性。现在我提供的课程是class Person{int age;Person(int age) throws Exception{if (age<0)throw new Exception("invalid ...
为什么this()和super()必须是
构造函数
中的第一条语句?
Java要求,如果您在
构造函数
中调用this()或super(),则它必须是第一条语句。 为什么? 例如: public class MyClass { public MyCla
为什么使用拷贝
构造函数
对于我来说,在写代码的时候能用得上复制
构造函数
的机会并不多,不过这并不说明复制
构造函数
没什么用,其实复制
构造函数
能解决一些我们常常会忽略的问题。 为了说明复制
构造函数
作用,我先说说我们在编程时会遇到的...
java缺省拷贝构造器_复制
构造函数
(拷贝
构造函数
)
也许很多C++的初学者都知道什么是
构造函数
,但是对复制
构造函数
(copy constructor)却还很陌生。对于我来说,在写代码的时候能用得上复制
构造函数
的机会并不多,不过这并不说明复制
构造函数
没什么用,其实复制构造...
为什么要有复制
构造函数
?
我们已经会用
构造函数
初始化对象,那么我们能不能象简单变量的初始化一样,直接用一个对象来初始化另一个对象
呢
?答案是肯定的。我们以前面定义的Point类为例: Point pt1(15, 25); Point pt2 = pt1; ...
再谈C++中的
构造函数
,深入理解
构造函数
(下篇)
继续上篇文章再谈C++中的
构造函数
,深入理解
构造函数
(上篇),来聊C++中的
构造函数
再谈对
构造函数
初始化列表的理解(2)
构造函数
的初始化列表不仅仅是比在
构造函数
体内的赋值语句初始化看得高级: 其实有些情况1. ...
拷贝
构造函数
拷贝
构造函数
,顾明思议,就是通过拷贝对象的方式创建一个新对象。拷贝
构造函数
有两种原型: book(book &b); book(const book &b); ...这两种原型都是book类对象的引用。下面一种原型则规定在创建新...为什么...
少说话多写代码之Python学习046——类的成员(
构造函数
)
构造函数
是一个类里比较特殊的函数,一般即时不写
构造函数
,类也会默认有一个默认
构造函数
,比如像下面这样的, __init__ 其实是一个默认
构造函数
。 class Book: bookName='书名' def __init__(self): ...
构造函数
与析构函数
在 C + + 中, 由
构造函数
来完成这些工作。
构造函数
是属于某一个类的,它可以由用户提供, 也可以由系统自动生成。与
构造函数
对应的是析构函数, 当撤消类对象时, 析构函数就回收存储空间,并做一些善后工作。析构函数也...
C#中
构造函数
的执行序列(
构造函数
初始化器 this base)
任何
构造函数
都可以配置为在执行自己的代码前调用其他
构造函数
。在讨论
构造函数
前,先看下 在默认情况下,创建类的实例时会发生什么情况。除了把初始化代码集中起来之外,还要了解这些代码。在开发过程中,由于调用...
构造函数
和原理
构造函数
是一种特殊的函数,主要用来初始化对象,即为对象成员变量赋初始值,它总与new一起使用,我们可以把对象中一些公共的属性和方法抽出来,然后封装到这个函数里面。 在js中,使用
构造函数
时要注意两点: 1....
复制
构造函数
也许很多C++的初学者都知道什么是
构造函数
,但是对复制
构造函数
(copy constructor)却还很陌生。对于我来说,在写代码的时候能用得上复制
构造函数
的机会并不多,不过这并不说明复制
构造函数
没什么用,其实复制构造...
《C++Primer》第十三章-复制控制-学习笔记(1)-复制
构造函数
&赋值操作符
复制
构造函数
的定义与其他
构造函数
一样:它与类同名,没有返回值,可以(而且应该)使用
构造函数
初始化列表初始化新创建对象的成员,可以在函数体中做任何其他必要工作。 后续章节中将给出一些需要定义复制
构造函数
...
C++11构造与禁用默认函数
在继承体系中,假设派生类想要使用基类的
构造函数
,必须要在
构造函数
中显式声明。 举个小例子: class Base { public: int value1; int value2; Base() { value1 = 1; } Base(int value) : Base() { // ...
复制
构造函数
与拷贝
构造函数
对于我来说,在写代码的时候能用得上复制
构造函数
的机会并不多,不过这并不说明复制
构造函数
没什么用,其实复制
构造函数
能解决一些我们常常会忽略的问题。 为了说明复制
构造函数
作用,我先说
Th3.15:继承的
构造函数
、多重继承、虚继承之详述
本博客将记录:新经典课程知识点的第15节的笔记! 本小节的知识点分别是继承的
构造函数
、多重继承、虚继承。...(我觉得还是少用为妙,因为这样写了会隐藏了子类的
构造函数
的细节实现,不利于日后维护代码!为...
2022广西三月三风俗的作文十篇.docx
2022广西三月三风俗的作文十篇.docx
公路改建工程监理工作执行报告.zip监理报告DOC文档资料下载
公路改建工程监理工作执行报告.zip监理报告DOC文档资料下载公路改建工程监理工作执行报告.zip监理报告DOC文档资料下载公路改建工程监理工作执行报告.zip监理报告DOC文档资料下载公路改建工程监理工作执行报告.zip监理报告DOC文档资料下载 1.合个人学习技术做项目参考合个人学习技术做项目参考 2.适合学生做毕业设计项目参考适合学生做毕业设计项目技术参考 3.适合小团队开发项目技术参考适合小团队开发项目技术参考
在线听•音乐网站的设计与实现_kaic.docx
摘要 Abstract 1 绪论 1.1 题目背景、目的 1.2 系统重点 2 系统相关技术 2.1 系统开发的技术要求 2.2 系统相关技术、平台和数据的选择 2.3 系统开发框架和工具库的介绍 2.4 前后端分离开发模式 3 系统需求分析 3.1 系统开发目的 3.2 性能需求 3.3 可行性分析 3.4 系统功能分析 3.5 操作流程图 3.6 需要满足的目标 4 系统概要设计 4.1 系统功能模块划分 4.2 数据库的设计 4.2.4 各个实体的E-R模型 5 系统详细设计 5.1 数据库表结构 5.2 管理员端设计 5.3 模块设计 6 系统实现 6.1 用户登录界面 6.2 用户注册界面 6.3 用户浏览首页信息界面 6.4 用户浏览歌单界面 6.5 用户浏览歌手界面 6.6 用户浏览我的音乐界面 6.7 管理员登录界面 7 测试与分析 7.1 测试目的 7.2 测试方法 7.3 测试环境 7.4 功能测试模块 结 论 参考文献 致 谢
算法 课件和源码(初中高)
算法 课件和源码(初中高)
中小学教师信息技术应用能力提升2.0工程《教师个人研修计划》作业.pdf,这是一份不错的文件
中小学教师信息技术应用能力提升2.0工程《教师个人研修计划》作业.pdf,这是一份不错的文件
2022护士节演讲比赛演讲稿.docx
2022护士节演讲比赛演讲稿.docx
计算机软件-商业源码-标准窗口.zip
计算机软件-商业源码-标准窗口.zip
ERP物料编码五大雷区分析,走出物料编码误区的方法.pdf,这是一份不错的文件
ERP物料编码五大雷区分析,走出物料编码误区的方法.pdf,这是一份不错的文件
STM32F107VCT6+DP83848CVV 车牌识别控制板PDF原理图PCB+AD集成封装库文件.zip
STM32F107VCT6+DP83848CVV 车牌识别控制板PDF原理图PCB+AD集成封装库文件 PCB封装库: Component Count : 36 Component Name ----------------------------------------------- 2EDGRC-5.08-2P-90 2EDGRC-5.08-4P-90 BYT12232CF CAP-0805 CAP-D8SMD CDRH-127 ECAP-H FHDR2.54-2*4P-180 FHDR2.54-2*6P-180 FUS-1812 HC-49SMD HK4100F KEY-SMD12*12*4.3 LED-0805-G LED-0805-R LL-34 LL-41_BI LQFP-48 LQFP-100 PHDR2.54-1*3P-180 RES-0805 RJ45_LED SMA(DO-214AC) SMB(DO-214AA)-BI SMD-4 SOIC-8 SOP-8 SOT-23-3 SOT-223 SPK-12095 TC-38 TO-263-5 USB-A-180 V
2.0信息技术数学作业.pdf,这是一份不错的文件
2.0信息技术数学作业.pdf,这是一份不错的文件
微信云开发点餐小程序模拟支付版本
微信云开发点餐小程序模拟支付版本
2013-2020 各省 31省 城镇居民人均可支配收入
2013-2020 各省 31省 城镇居民人均可支配收入
Jovi输入法(1.8.7.2112200).apk
Jovi输入法(1.8.7.2112200).apk jovi输入法app这是比较简便的一款输入法应用,这款软件有十分简单的界面,让用户能够使用起来更加方便,并且这里还支持各种输入类型,不管是语音、笔划、手写还是其他多种输入类型,这里通通都能够满足你,让你打字更快,聊天更迅速。 jovi输入法app简介: Jovi输入法是一款输入表达工具,具备拼音九键输入、拼音全键输入、手写输入、笔画输入、语音输入、英文输入等输入功能。
计算机软件-商业源码-超级漂亮的日历控件源码.zip
计算机软件-商业源码-超级漂亮的日历控件源码.zip
发帖
Java SE
加入
微信扫一扫
点击复制链接
6.2w+
社区成员
30.7w+
社区内容
Java 2 Standard Edition
申请成为版主
帖子事件
创建了帖子
2008-07-28 02:25
社区公告
暂无公告