【总结】Effective java经验之谈,创建和销毁对象

转载请注明出处:http://blog.csdn.NET/supera_li/article/details/44940277

关于Effective Java 这本书,自己的一些总结性的思考。篇幅可能不按照目录来,因为自己喜欢先看哪一章就直接阅读了。不过能确定的是,每一章都会有总结。欢迎大家拍砖与补充。

Effective java系列
1.Effective java经验之谈,创建和销毁对象
2.Effective java经验之谈,泛型
3.Effective java经验之谈,类与接口
4.Effective java经验之谈,通用方法
5.Effective java经验之谈,枚举,注解,方法,通用设计,异常
6.Effective java经验之谈,并发编程

1.      考虑用静态工厂的方法代替构造器。优点:有名字,不必每次创建对象,返回任何子类型对象,简洁的代码。缺点:该类将不能被子类化(复合大于继承,也是优点),不方便doc工具输出文档,一般约定的命名规则:

valueOf  转换类型

getInstance 获得对象实例

newInstance 创建新的对象实例

getType 获得返回对象的类型

newType 置入返回对象的类型,在不同类中方便区别工厂方法

2.       遇到多个构造器参数(4个以上)时要考虑用构建器。重叠构造器代码冗长,后期不能有效的维护,javaBean模式的构造器在多线程下不安全,没有达到类不可变性,原因是暴露出去了setter方法。Builder模式的构造器是不错的选择。

                       Class A{

              //属性

   static class Bulid{

//属性

Bulid(){//接受初始化参数 }

Bulid a(){ Return bulid; //添加参数返回Bulid产生调用链}

..

A bulid(){ return A(this);} //构造器对象初始化A对象返回

}

A(Bulid b){ //将b中参数传递给A参数域}

}

3.       用私有构造器或者枚举类型强化Singleton属性。对于私有构造器有2种方案,导出公有的静态成员的实例与提供静态工厂返回私有的静态成员实例。但是并非安全的,采用AccessibleObject,通过反射技术可以调用私有的构造器,产生第二对象,解决方案是产生第二实例的时候抛出异常。使得Singleton序列化,(implementsSerializble)+(实例域transient)+(readResolve方法返回实例)。单元素的枚举类型是实现Singleton的最佳方案。

4.       通过私有构造器强化不可实例的能力。提供显示的构造方法比编译器提供默认的好,特别是私有的构造器,并在私有的构造器中抛出AssertionError。由于这一技术的使用,使得该类无法被子类化。

5.       避免创建不必要的对象。考虑的方向有,字符串类,static{}域,视图view(Map中的set等),自动装箱拆箱,对象池object pool。

6.      消除过期的对象引用。Stack.pop后,不使用的元素未置空引起的内存泄露,磁盘交换,严重的情况导致OOM异常。内存泄露另一个来源是缓存问题。如果key中不在保持引用,那么WeakHashMap自动清除过期的key。如果随着时间的增长,某些key可能不用了,那么采用LinkedHashMap。removeEldestEntry方法将实现这一方案。第三个来源是监听器和其他回调,采用保持弱引用的方法,即WeakHashMap的方案来处理。关于内存泄露的一个Heap剖析工具Heap Profiler。

7.      避免使用终结方法。Finalizer的方法JVM并不一定执行,即使调用了System.gc。System.runFinalization。除非使用System.runFinalizersOnExit,Runtime.runFinalizersOnExit方法(ThreadStop,不建议使用)。尝试着使用try{}finally{}结构来显示的调用终结方法确保及时终止。如果子类覆盖了超类的终结方法,但是忘记手工调用超类的终结方法super.finalize,那么超类的终结方法将永远也不会被调用。


如果将本章内容联系到实际的编码之中呢?我也进行的思考,由于自己在类库方面开发经验很少,没有通读过jdk全部的源码,所以有些建议不一定准确。


1.当你在创建类的时候,就应当想这个类未来要做什么?是什么类型?构造参数多吗?适用经验1,2,3,4

2.当你在编写某段代码的时候,你应当想到该对象是否可以重复利用?如果是集合类,那么思考,传入的对象是否未来会不使用?如果觉得这段代码或者方法,以及涉及到该类在全局上随着运行会消耗较大的内存?那么可以尝试着使用5,6,7三个总结来处理这种问题。

毕竟上面都是一些方法论,在实践过程中,需要自己有经验的去判断如何做才是最优的(可能是目前最优,亦或者未来效果很好),这些都是不同场景下产生的,并不一定会有效的去解决。


转载于:https://www.cnblogs.com/kimyong/p/6291144.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值