1.用静态工厂方法代替构造器说明在方法内部添加一个静态方法,用于获取一个对象,代替构造器的功能;比如,在boolean包装Boolean类中,就有valueOf方法可以代替构造方法获得一个Boolean对象;publicstaticBooleanvalueOf(booleanb){return(b?TRUE:FALSE);}优势静态方法有名字,可以指定一个功能作为方法名;实现对象重用,优化程序运行;在对象使用结束后,可以将对象缓存起来,若下次调用可以再次使用;相对对象重用,创建一个新的对象损耗可能会更大;在情况允许时,尽量多地使用对象重用,减少创建对象造成额外损耗;如Boolean类:Bool
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
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
《EffectiveJava》第16条:要在仅有类中使用访问方法而非公有域一、问题有时候我们需要定义一些类用来集中实例域(Java对象中的数据)。经常我们会把这些数据域声明为public,可以被直接访问。这样公有类暴露了它的数据域,有以下两个缺点:1、要想在将来改变其内部表示法是不可能的,因为公有类的客户端代码已经遍布各处了二、分析classPoint{publicdoublex;publicdoubley;}上面数据域是可以被直接访问,没有提供封装功能,我们应该用包含私有域和公有方法的类代替classPoint{privatedoublex;privatedoubley;publicPoin
《EffectiveJava》第16条:要在仅有类中使用访问方法而非公有域一、问题有时候我们需要定义一些类用来集中实例域(Java对象中的数据)。经常我们会把这些数据域声明为public,可以被直接访问。这样公有类暴露了它的数据域,有以下两个缺点:1、要想在将来改变其内部表示法是不可能的,因为公有类的客户端代码已经遍布各处了二、分析classPoint{publicdoublex;publicdoubley;}上面数据域是可以被直接访问,没有提供封装功能,我们应该用包含私有域和公有方法的类代替classPoint{privatedoublex;privatedoubley;publicPoin
前言:effectiveC++是一本经典之作,其翻译较为贴合原著,但读起来未免有些僵硬而让人摸不着头脑,所以,我会以更为贴近中国人的理解,对此书进行一些阐释。条款01:把C++看成一个语言联邦C++由几个重要的次语言构成C语言:区块,语句,预处理器,数组,指针等等。类:class,封装,继承,多态......(动态绑定等等)模板:涉及泛型编程,内置数种可供套用的函数或者类。STL:STL是个模板库,主要涉及容器,算法和迭代器在不同情况下使用适合的部分,可以使C++实现高效编程条款02:用const,enum,inline替换#define1、#define修饰的记号,在预处理的时候,已经全部被
前言:effectiveC++是一本经典之作,其翻译较为贴合原著,但读起来未免有些僵硬而让人摸不着头脑,所以,我会以更为贴近中国人的理解,对此书进行一些阐释。条款01:把C++看成一个语言联邦C++由几个重要的次语言构成C语言:区块,语句,预处理器,数组,指针等等。类:class,封装,继承,多态......(动态绑定等等)模板:涉及泛型编程,内置数种可供套用的函数或者类。STL:STL是个模板库,主要涉及容器,算法和迭代器在不同情况下使用适合的部分,可以使C++实现高效编程条款02:用const,enum,inline替换#define1、#define修饰的记号,在预处理的时候,已经全部被
第2条:在类的头文件中尽量少引入其他头文件1.向前声明@class***使用@class的必要性?***将引入头文件的时机尽量延后,只在确有需要时才引入,这样就可以减少类的使用者所需引入的头文件数量。向前声明也解决了两个类互相引用的问题。2.#import***#import存在的必要性?***有时候必须要在头文件引入其他头文件。如果所写的类继承自某个超类,则必须引入定义那个超类的头文件。如果要声明所写的类遵从某个协议,那么该协议必须有完整定义,且不能使用向前声明(向前声明只能告诉编译器有某个协议,而此时编译器却要知道该协议中定义的方法)。然而,有些协议例如“委托协议(delegateprot
第2条:在类的头文件中尽量少引入其他头文件1.向前声明@class***使用@class的必要性?***将引入头文件的时机尽量延后,只在确有需要时才引入,这样就可以减少类的使用者所需引入的头文件数量。向前声明也解决了两个类互相引用的问题。2.#import***#import存在的必要性?***有时候必须要在头文件引入其他头文件。如果所写的类继承自某个超类,则必须引入定义那个超类的头文件。如果要声明所写的类遵从某个协议,那么该协议必须有完整定义,且不能使用向前声明(向前声明只能告诉编译器有某个协议,而此时编译器却要知道该协议中定义的方法)。然而,有些协议例如“委托协议(delegateprot
第四章:设计与声明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