Java 高效代码
来源:互联网 发布:怎么才能通过网络赚钱 编辑:程序博客网 时间:2024/06/03 19:57
考虑用静态工厂方法代替构造器:
优点:1.静态工厂方法有名称,可以直接阐明意图,解决多个构造函数给用户的困扰(需要查明api了解个参数含义,才能实例化)。
2.不必在每次调用时都创建一个新的对象。
3.它们可以返回原返回类型的任何子类型对象。参考
4.在创建参数化类型实例的时候,它们使代码变得更加简洁。
缺点:
1.类如果不含有公共的或受保护的构造器,就不能被子类化。
2.它们与其他静态方法实际上没有任何区别。利用javadoc提供API时,并不能在文档中明确标识它,因此给查询实例化一个对象造成困难。
遇到多个构造器参数时要考虑用构建器:
优点:1.既能保证重叠构造器模式那样的安全性(线程安全),也能保持像Javabean模式那样好的可读性。
2.可以有多个可变参数。参考
3.可以利用单个构建器构建多个不同对象。
4.设置了参数的builder生成了一个很好的抽象工厂。参考
缺点:
为了创建对象,必须先创建构建器,在十分注重性能的情况下,构建器的开销可能就成为问题了。
用私有构造器或者枚举类型强化单例属性:
1:通过public final static字段实例化对象,保证了实例的全局唯一性。2:通过饿汉式或懒汉式创建单例对象时,该方式更加灵活。参考
注意:利用1,2这两种方式创建单例时,可以通过反射机制调用私有构造器,破坏实例唯一性,如果要抵御这种攻击,可以修改构造器,让它在要求创建第二个实例时抛出异常。而且利用1,2这两种方式在反序列化实例时(实现了java序列化接口Serializable),也会破坏实例唯一性,如果要防止这种情况,则需要声明所有实例域都是瞬时的,而且要提供一个readResolver方法,该方法确保类的开发人员在序列化将会返回怎样的object上具有发言权,在序列化创建实例的时候被引用。[参考]。
3:通过枚举类型创建单例对象时,代码简洁,而且无偿提供了序列化机制,绝对防止多次实例化,杜绝攻击。
用私有化构造器强化不可实例化的能力
避免创建不必要的对象
1:对于同时提供了静态工厂方法和构造器的不可变类,通常使用静态工厂方法而不是构造器,以避免创建不必要的对象。2:优先使用基本类型而不是装箱基本类型,要当心无意识的自动装箱。
注意:当你应该重用现有对象的时候,请不创建新的对象。
覆盖equals方法时请遵循通用约定(自反性,一致性,对称性,传递性,非空性)
覆盖equals总要覆盖hashcode
始终覆盖toString方法
推荐阅读 《Effective Java》
0 0
- Java 高效代码
- 编写java高效代码
- 编写高效的java代码
- 避免NullPointerException之Java高效代码
- 编写高效java代码的建议
- 高效编写JAVA代码的30条建议
- 高效编写JAVA代码的30条建议
- 高效编写Java代码的30条建议
- 摸清java的本性,编写高效的代码
- 高效编写JAVA代码的30条建议
- 高效编写Java代码的几条建议
- JRockit读书笔记I — Java代码的高效执行
- 高效编写Java代码的几条建议
- 高效编写Java代码的几条建议
- 如何在Android上编写高效的Java代码
- 如何在Android上编写高效的Java代码
- 如何在Android上编写高效的Java代码
- 高效编写Java代码的几条建议
- Ubuntu下架设FTP服务器实现Windows、openwrt、ubuntu互传文件
- 关于Hadoop的一些自问自答
- hdu1869六度分离(spfa&&dijkstra)
- AngularJS——搭建PhoneCat项目的开发与测试环境
- 大学快混完了~
- Java 高效代码
- 《打造Facebook-亲历Facebook爆发的5年》读书笔记
- Android开源项目第一篇——个性化控件(View)篇
- 黑马程序员——Java基础---基础语法(三)
- 初识Ubuntu——使用SecureCRT连接Ubuntu&命令行显示当前路径
- Android开源项目第四篇——开发及测试工具篇
- socket编程中对sigpipe信号的处理
- NAT穿越-TCP打洞
- linux进程间同步和共享内存