帮忙解惑,在构造函数中初始化为什么不好

问题描述

各位高手,我在看《Ajile Java Crafting Code With DDT》中的setup小节的时候看到了一句话,不是很理解,就请假各位,原文是这样“Even though you could create a constructor and supply common initialization code in it, doing so is considered bad practice. The preferred idiom for test initialization in JUnit is to use the setUp method.”,为什么在构造函数里面初始化不是很好呢?请教各位帮忙解惑。先谢谢了,在前几节,作者也提到了“ you can have more than one constructor; initializing at the field level saves you from duplicate initialization code in each constructor.”,但是构造函数可以互相调用,就没有作者说的那种情况了。

解决方案

也没有什么不好,事事无绝对,只是遵循一定的规则可以更多的避免将来可能的错误理论上来讲,构造函数只是让你构造一个对象,从这个职责上来讲的话,只要构造了这个对象就可以了。而使用这个对象的人也假定你在里面只做了简单的初始,没做什么复杂的东西。主要的其他 的动作放到其他函数里执行最好。要 理解这个比较困难,从面向对象的角度来讲的话,类提供了很多的函数,这些函数值应该做这些函数规定的事情,而且值应该做这个函数规定作的事情,这样才能在协议的基础上而不是在实现的基础上设计系统。构造函数也是这样的,从协议层次上来讲,构造函数就是做初始化相关东西的,不应该做其他的东西。你如果要打开 数据库,最好加一个明确的方法,这个方法用来打开数据库。这样从协议的层次上来讲变得完全了,你从构造函数里搞得话,缺少了数据库打开的操作,这样的类看起来不是很好。还有,在设计类的方法时,操作尽量的更小颗粒,就是把一些操作尽量分解成多点方法,这样给用户提供了更好的可控性。当然也曾加了使用的麻烦性,这样 可以通过一个更大的方法来实现。看起来复杂了,但是做出来的类比较好用。也比较健壮。

时间: 2024-09-23 10:14:52

帮忙解惑,在构造函数中初始化为什么不好的相关文章

c++-C++类的私有成员中定义了一个数组,怎么在构造函数中初始化这个数组?

问题描述 C++类的私有成员中定义了一个数组,怎么在构造函数中初始化这个数组? 写了这样一个类: class Base{ private: int r[MAX_SIZE]; int length; public: Base() { r[MAX_SIZE] = {1,2,0,5,8,9,7,3,6,4}; //编译的时候在这边出错 length = 10; } void swap_data(int,int); void Show(const Base &ob); friend int Bubble

c++构造函数的初始化列表中初始化了一个类类型的成员,调用的是类类型的复制构造函数吧?

问题描述 c++构造函数的初始化列表中初始化了一个类类型的成员,调用的是类类型的复制构造函数吧? 如题:c++构造函数的初始化列表中初始化了一个类类型的成员,调用的是类类型的复制构造函数吧? 解决方案 什么?复制构造函数? 解决方案二: C++类构造函数列表初始化C++类构造函数初始化列表c++中什么类型的成员变量只能在构造函数的初始化列表中进行 解决方案三: 真是初始化列表,跟复制构造函数没关系,调用复制构造函数要看你是如何初始化的 解决方案四: 参数列表初始化成员是调用成员的构造函数,但是什

C++编程规范之48:在构造函数中使用初始化代替赋值

摘要:     设置一次,到处是用:在构造函数中,使用初始化代替复制来设置成员变量,能够防止发生不必要的运行时操作,而输入代码的工作量则保持不变.     构造函数会在系统内部生成初始化代码.考虑如下代码: class Employee { string firstName, lastName; public: Employee(){ firstName ="Leo"; lastName = "Chu" } };     实际上,生成的构造函数代码将类似于: Emp

代码-问一个JAVA的基础问题,希望大神们帮忙解惑。

问题描述 问一个JAVA的基础问题,希望大神们帮忙解惑. 有一段如下的代码,有几个疑惑: 1.定义了一个final的test1和一个static里面的test1,为什么定义2个test1不会有问题? 2.为什么在一个类中直接写static{ },这个是什么原理? 3.还有什么类似static{ }这样的写法?是什么原理? public class MyOwenTest{ public static final String test1 = "a"; static{ String tes

c++-C++课程设计 求大神帮忙写下构造函数和析构函数

问题描述 C++课程设计 求大神帮忙写下构造函数和析构函数 1.网格世界类网格中每个元素存放各种生物对象的指针或者为空.模拟过程中,我们需要移动生物,还有繁殖和饥饿(死亡),所以在网格类中,我们可以将一只生物放到网格中:可以读取网格中的某个指定位置的生物,获取它的指针,以便在每一个time step中对它进行处理(移动.繁殖和饥饿死亡).在一个time step中,网格中每只生物都要处理一遍,先狮蚁,后蚂蚁.另外,应该有一个显示网格的成员函数.2.有机生物类生物要能够放到网格中,所以每一只生物都

构造函数 继承-C++:子类成员变量和基类哪个先产生?产生 和构造函数中的代码没关系吗?

问题描述 C++:子类成员变量和基类哪个先产生?产生 和构造函数中的代码没关系吗? 代码:(VS控制台程序) #include "stdafx.h" #include "iostream" using namespace std; class A//GameClientView { public: A(); }; A::A() { cout<<"create:A"<<endl; } class B//GameClientD

为什么不能再构造函数中执行大量的内存分配、文件读写等复杂操作??

问题描述 为什么不能再构造函数中执行大量的内存分配.文件读写等复杂操作?? 大婶们啊:为什么不能再构造函数中执行大量的内存分配.文件读写等复杂操作??? 解决方案 可以啊!谁告诉你不行的? 只是在构造函数做太复杂的操作,当出错时发现错误有时会很困难.特别是定义为全局变量时,程序还没有运行.就出错了. 解决方案二: 构造函数主要进行一些初始化工作,复杂的工作放到成员函数中处理,这样比较符合OOP设计 解决方案三: 以牺牲对象分配的时间来换取代码的简单行· 是可以的·! 但是不推荐 解决方案四: 这

构造函数中的this指针

-------------------------------原理------------------------------- 某些人认为不应该在构造函数中使用this指针,因为这时this对象还没有完全形成. 但是,只要小心,是可以在构造函数中使用this指针的: ●在函数体中 ●初始化列表中 因为"对象还没有完全形成"不意味着"什么都没有". 在进入构造函数(及其chaining)之前,Compiler会: ●给class的instance分配内存 ●建立运行

基类构造函数和初始化器的执行顺序

标题比较抽象,所以我写了一个Demo来说明问题: public class A { public A() { Console.WriteLine("A的构造函数被调用"); } } public class B : A { private X x = new X(); //初始化器 } public class X { public X() { Console.WriteLine("X的构造函数调用"); } } static void Main(string[]