【足迹C++primer】19、构造函数再探

首先说一下为什么要特别写一个文档来说明这个层次结构的事情,各位都在eclipse中使用java.io.File类读取过workspace中的文件,我相信在不了解eclipse目录层次结构的情况很少有人可以一次性把路径给写对了,为了避免以后再出现这种令人难堪的情况,还是编写这样一篇扫盲性的说明文档比较合适。当然重点绝不是上面的资源路径怎么编写,而是影响围绕整个工程的生命周期的构建活动。

首先看一下eclipse在默认情况下创建一个普通的Java Project的目录结构:

从上面可以看出来eclipse在创建一个Java Project的时候会创建一个默认的Source folder名为src,该文件夹下的所有文件经过编译之后会输出到同级的bin目录下。关于working set,很好理解,用来分类管理项目工程,你创建的工程主要用来做什么?属于什么类别?考虑完这两个问题你就知道放置在哪个具体的working set中了。

默认情况下,Package Explorer不显示working set,这需要将working set作为顶级元素的设定方法如下:

很多人在编写测试用例的时候喜欢用一个main方法在被测试程序内部中进行测试,如此把测试代码和生产代码混合在一起对程序可读性简直是毁灭性的打击,所以还是建立一个专门的测试类吧,测试类的命名最好遵从一定的规范这样大家都容易识别,建议将被测试类名+Test作为基本测试类的命名规则。关于测试类的存放又是有门道的,很多人喜欢在src下建立一个package叫做test,然后在这里面存放所有的测试用例。还是那句话,测试类不应该出现在生产环境下,所以还是将测试类放到一个单独的source
folder下面吧。

下面分享一个创建测试用例的简便方法:

现在我有一个这样的类需要进行测试

package cn.seit.eclipse;

public class HelloEclipse {

public static String sayHello(String name) {

return "Hello" + name;

}

}

首先在Package Explorer中选中HelloEclipse这个java文件,然后新建一个JUnit Test Case,eclipse会自动完成下面这些事情:

点击Next,选择需要测试的方法

完成之后,可以发现被测试类和测试用例的关系如下:

这样一来两者之间就建立了一定的对应关系,通过一方可以轻松知道另一方的存放位置。

引用上面将测试用例存放在一个专门的资源文件夹下的思想,我们同样可以将工程中产生的配置文件放置在一个专一的资源文件夹下。

Java Project发布一般是通过jar包的方式,我们可以在导出jar的时候做一下轻松设定,就将测试用例从生产环境中脱离了。

上面主要就是讲述了一个工程的资源文件的合理存放位置,用过maven的朋友对这种方式会非常熟悉,因为maven的工程结构就是这样子的。

Maven提倡使用一个共同的标准目录结构,使开发人员能在熟悉了一个Maven工程后,对其他的Maven工程也能清晰了解。这样做也省去了很多设置的麻烦。

以下的文档介绍是Maven希望的目录结构,并且也是目录创建工程是采用的目录结构。Maven推荐大家尽可能的遵守这样的目录结构。


src/main/java


Application/Library sources


src/main/resources


Application/Library resources


src/main/filters


Resource filter files


src/main/assembly


Assembly descriptors


src/main/config


Configuration files


src/main/webapps


Web application sources


src/test/java


Test sources


src/test/resources


Test resources


src/test/filters


Test resource filter files


src/site


Site


LICENSE.txt


Project‘s license


README.txt


Project‘s readme

看,maven的思想还是相当值得借鉴的,使用一个统一的标准目录层级结构可以为开发者大大降低沟通成本,提高团队的执行效率。我想在软件开发整个行业里面,大家遵循统一的标准对行业的发展会起到一个很好的促进作用,谢谢。

作者:萧易客

时间:2014/6/4

【足迹C++primer】19、构造函数再探

时间: 2024-12-08 17:46:59

【足迹C++primer】19、构造函数再探的相关文章

【C++ Primer 第七章】 构造函数再探、委托构造函数

构造函数初始值列表 1.  构造函数的初始值有时必不可少 • 有时我们可以忽略数据成员初始化和赋值之间的差异,但并非总能这样.如果成员时const或者是引用的话,必须将其初始化.类似的,当成员属于某种类类型且该类没有定义默认构造函数时,也必须将这个成员初始化. 例如: 1 class ConstRef 2 { 3 public: 4 ConstRef(int ii); 5 private: 6 int i; 7 const int ci; 8 int &ri; 9 }; 和其他常量对象或者引用一

【C++ Primer | 10】再探迭代器

反向迭代器 1. 测试代码: 1 #include<iostream> 2 #include<vector> 3 #include<iterator> 4 using namespace std; 5 6 int main() 7 { 8 vector<int> vec = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 9 for (auto r_iter = vec.crbegin(); r_iter != vec.crend();

【足迹C++primer】33、再探迭代器

再探迭代器 这里有插入迭代器,有流迭代器,反向迭代器,移动迭代器. 插入迭代器 这是一种迭代器适配器,接受一个容器,生成一个迭代器,实现向给定容器添加元素. 插入迭代器有三种类型,差异在于元素插入的位置 back_inserter创建一个使用push_back的迭代器. front_inserter创建一个使用push_front的迭代器. inserter创建一个使用insert的迭代器. void fun1() { list<int> lst={1,2,3,4}; list<int&

【足迹C++primer】54、继承类的范围,构造函数和拷贝控制

继承类的范围,构造函数和拷贝控制 当用派生类执行函数的时候,首先会在当前的类里面找 如果找不到就一级一级地往上找. Name Lookup Happens at Compile Time class Quote { public: Quote()=default; Quote(const string &book, double sales_price):bookNo(book), price(sales_price) {cout<<"Quote gouzhao functi

【足迹C++primer】45、拷贝控制示例

拷贝控制示例 那么接下来尽情欣赏这个案例吧!!! /** * 功能:拷贝控制示例 * 时间:2014年7月14日10:57:39 * 作者:cutter_point */ #include<iostream> #include<set> #include<vector> #include<string> using namespace std; class Folder; /** Message类 */ class Message { friend void

【足迹C++primer】39、动态内存与智能指针(2)

动态内存与智能指针(2) 直接管理内存 void fun1() { //此new表达式在自由空间构造一个int型对象,并返回指向该对象的指针 int *pi1=new int; //pi指向一个动态分配.未初始化的无名对象 string *ps3=new string; //初始化为空string int *pi2=new int; //pi指向一个未初始化的int int *pi3=new int(1024); //pi指向的对象的值为1024 string *ps4=new string(1

【足迹C++primer】47、Moving Objects(1)

Moving Objects(1) * 功能:Moving Objects * 时间:2014年7月17日08:46:45 * 作者:cutter_point */ #include<iostream> #include<string> #include<memory> #include<utility> #include<vector> #include<algorithm> #include<set> #include

【足迹C++primer】38、关联容器操作(2)

关联容器操作(2) map的下标操作 map的下标操作 map和unordered_map容器提供了下标运算符合一个对应的at函数 对于一个map使用下标操作,其行为与数组或vector上的下标操作很不相同: 使用一个不再容器中的关键字作为下标,会添加一个此关键字的元素到map中 map和unordered_map的下标操作 c[k] 返回关键字为k的元素,如果关键字k不再c中,添加一个关键字为k的元素,对其进行值初始化 c.at(k) 访问关键字为k的元素,带参数检测,如果k不再c重那么返回一

【足迹C++primer】26、顺序容器操作

顺序容器操作 向顺序容器添加元素 forward_list //有自己专有版本的insert和emplace: forward_list //不支持push_back和emplace_back vector, string //不支持push_front和emplace_front c.push_back(t), c.emplace_back(args) //在c的尾部创建一个值为t的或者由args创建的元素,返回void c.push_front(t), c.emplace_back(args