草庐IT

Cost-Effective

全部标签

《Effective Java》第9条:try-with-resources优先于try-finally

220812_《EffectiveJava》第9条:try-with-resources优先于try-finally一、问题Java类库中包含许多需要通过调用close来关闭的资源,例如:InputStream、OutputStream和java.sql.Connection。在编程过程中如果没有关闭会产生性能问题。二、范例,使用try-finally使用try-finally来关闭资源,如下所示:publicclassFirstLineOfFile_Version1{staticStringfirstLineOfFile(Stringpath)throwsIOException{Buffer

《Effective Java》第16条:要在仅有类中使用访问方法而非公有域

《EffectiveJava》第16条:要在仅有类中使用访问方法而非公有域一、问题有时候我们需要定义一些类用来集中实例域(Java对象中的数据)。经常我们会把这些数据域声明为public,可以被直接访问。这样公有类暴露了它的数据域,有以下两个缺点:1、要想在将来改变其内部表示法是不可能的,因为公有类的客户端代码已经遍布各处了二、分析classPoint{publicdoublex;publicdoubley;}上面数据域是可以被直接访问,没有提供封装功能,我们应该用包含私有域和公有方法的类代替classPoint{privatedoublex;privatedoubley;publicPoin

《Effective Java》第16条:要在仅有类中使用访问方法而非公有域

《EffectiveJava》第16条:要在仅有类中使用访问方法而非公有域一、问题有时候我们需要定义一些类用来集中实例域(Java对象中的数据)。经常我们会把这些数据域声明为public,可以被直接访问。这样公有类暴露了它的数据域,有以下两个缺点:1、要想在将来改变其内部表示法是不可能的,因为公有类的客户端代码已经遍布各处了二、分析classPoint{publicdoublex;publicdoubley;}上面数据域是可以被直接访问,没有提供封装功能,我们应该用包含私有域和公有方法的类代替classPoint{privatedoublex;privatedoubley;publicPoin

EFFECTIVE C++ (万字详解)(一)

前言:effectiveC++是一本经典之作,其翻译较为贴合原著,但读起来未免有些僵硬而让人摸不着头脑,所以,我会以更为贴近中国人的理解,对此书进行一些阐释。条款01:把C++看成一个语言联邦C++由几个重要的次语言构成C语言:区块,语句,预处理器,数组,指针等等。类:class,封装,继承,多态......(动态绑定等等)模板:涉及泛型编程,内置数种可供套用的函数或者类。STL:STL是个模板库,主要涉及容器,算法和迭代器在不同情况下使用适合的部分,可以使C++实现高效编程条款02:用const,enum,inline替换#define1、#define修饰的记号,在预处理的时候,已经全部被

EFFECTIVE C++ (万字详解)(一)

前言:effectiveC++是一本经典之作,其翻译较为贴合原著,但读起来未免有些僵硬而让人摸不着头脑,所以,我会以更为贴近中国人的理解,对此书进行一些阐释。条款01:把C++看成一个语言联邦C++由几个重要的次语言构成C语言:区块,语句,预处理器,数组,指针等等。类:class,封装,继承,多态......(动态绑定等等)模板:涉及泛型编程,内置数种可供套用的函数或者类。STL:STL是个模板库,主要涉及容器,算法和迭代器在不同情况下使用适合的部分,可以使C++实现高效编程条款02:用const,enum,inline替换#define1、#define修饰的记号,在预处理的时候,已经全部被

《Effective Objective-C 2.0 》 阅读笔记 item2

第2条:在类的头文件中尽量少引入其他头文件1.向前声明@class***使用@class的必要性?***将引入头文件的时机尽量延后,只在确有需要时才引入,这样就可以减少类的使用者所需引入的头文件数量。向前声明也解决了两个类互相引用的问题。2.#import***#import存在的必要性?***有时候必须要在头文件引入其他头文件。如果所写的类继承自某个超类,则必须引入定义那个超类的头文件。如果要声明所写的类遵从某个协议,那么该协议必须有完整定义,且不能使用向前声明(向前声明只能告诉编译器有某个协议,而此时编译器却要知道该协议中定义的方法)。然而,有些协议例如“委托协议(delegateprot

《Effective Objective-C 2.0 》 阅读笔记 item2

第2条:在类的头文件中尽量少引入其他头文件1.向前声明@class***使用@class的必要性?***将引入头文件的时机尽量延后,只在确有需要时才引入,这样就可以减少类的使用者所需引入的头文件数量。向前声明也解决了两个类互相引用的问题。2.#import***#import存在的必要性?***有时候必须要在头文件引入其他头文件。如果所写的类继承自某个超类,则必须引入定义那个超类的头文件。如果要声明所写的类遵从某个协议,那么该协议必须有完整定义,且不能使用向前声明(向前声明只能告诉编译器有某个协议,而此时编译器却要知道该协议中定义的方法)。然而,有些协议例如“委托协议(delegateprot

《Effective C++》阅读总结(四): 设计、声明与实现

第四章:设计与声明18.让接口更容易被正确使用,不易被误用将你的class的public接口设计的符合class所扮演的角色,必要时不仅对传参类型限制,还对传参的值域进一步限制。19.设计class犹如设计type内置类型如int、float等,本质也是一个class,用户自定义的class的行为和状态应当与内置类型类似的。设计class时,首先要考虑构造和析构、然后是赋值操作如何实现、考虑class是否要继承某一已有class、尽量使你的class一般化等等需要考虑的问题。20.宁以pass-by-reference-to-const替代pass-by-value这个准则很常见,使用cons

《Effective C++》阅读总结(四): 设计、声明与实现

第四章:设计与声明18.让接口更容易被正确使用,不易被误用将你的class的public接口设计的符合class所扮演的角色,必要时不仅对传参类型限制,还对传参的值域进一步限制。19.设计class犹如设计type内置类型如int、float等,本质也是一个class,用户自定义的class的行为和状态应当与内置类型类似的。设计class时,首先要考虑构造和析构、然后是赋值操作如何实现、考虑class是否要继承某一已有class、尽量使你的class一般化等等需要考虑的问题。20.宁以pass-by-reference-to-const替代pass-by-value这个准则很常见,使用cons

《Effective C++》阅读总结(五): 继承与面向对象设计&模板&内存&杂项讨论

第六章继承与面向对象设计32.确定你的public继承塑模出is-a关系public继承意味着要塑模出is-a的关系,所以每一个子类对象也是相应的父类对象,故适用于父类对象的每一个操作也都适用于子类对象。33.避免遮掩继承而来的名称派生类中的名称(包括数据名称和函数名称(不考虑不同传参))会遮掩基类中的名称,这种机制类似于作用域,先从当前类中搜索名称,如果找不到则到基类中搜索,以此类推。这个名称遮掩规则主要是防止新建的子类继承了较为疏远的基类同名函数,这在大部分情况下是不期望的。如果期望不要遮掩,使用using显式暴露即可。34.区分接口继承和实现继承class的成员函数可分为三类:一般函数、