Effective Java其他碎片建议1
来源:互联网 发布:数据库黑客大曝光 编辑:程序博客网 时间:2024/06/07 11:39
Rule4、通过私有化构造器来强化不可实例化的能力
不应该通过抽象化类来强化类不可实例化的能力,因为抽象类仍然可以被继承,一旦该类被继承则可以被实例,而且很容易误导到代码阅读者,认为这个类就是用来继承的。
Rule5、避免创建不必要的对象
String a = new String("abcd");//这是绝对不可以的
String a = "abcd";//最好这样写 因为字符串"abcd"会到常量区去寻找是否存在"abcd"这个字符串,如果存在就不用创建新的字符串,而是直接重用该对象。
可以使用map存储多个key-value,名称-对象键值对,这样可以做到当名称相同的时候总是返回相同的实例,而不是重新创建新的对象。
尽量使用基本类型而不是装箱后的基本类型,比如使用int i= 0 ;而不是Integer i = 0;,避免无意识的自动装箱。
关于Int和Integer的区别
当应该创建新的对象的时候,不要尝试重用当前的对象
当应该重用当前对象的时候,不要尝试去创建新的对象
Rule6、消除过期的对象引用
java是一门具有垃圾回收功能的语言,然而这不代表程序员可以完全不考虑垃圾回收问题,比如对于以下程序段,进行一个弹栈操作:
public Object pop(){ return element[size--];//为了简便 这里就不考虑弹栈失败了}是不是除了没判断size之外没有什么问题,然而事实上以上的代码出现了内存泄漏的问题,严重时可能会出现程序失败(OutOfMemoryError),为什么会这样,因为栈内部维护着被pop出来的过期引用,所谓过期引用就是永远不会被解除的引用,这些引用是需要被清除的。所以需要做出以下修改:
public Object pop(){ Object result = element[size]; element[size] = null;//help gc return result;//为了方便我还是没判断size 23333}
Rule7、避免使用终结方法(finalize)
这个东西是不可预测、危险、而且没有必要的,不要把它和C/C++的析构函数混为一谈。
Rule8、重写equals需要注意的问题
之前写过
Rule9、如何重写hashCode()
1、选择一个非0的常数值,比如17,保存在一个名为result的变量里。
2、对于对象中每个关键域f,完成以下步骤:
①.为该域计算int类型的散列码c:
a. boolean --> (f?1:0)
b. byte/char/short/int -->(int)f
c. long -->(int)(f^(f>>>32))
d. float -->Float.floatToIntBits(f)
e. double -->Double.doubleToLongBits(f) 然后再计算这个long类型对应的值
f. 如果是一个对象引用,则递归调用这个对象的hashCode()
g. 对于数组,每个元素都当成一个单独的域
②.针对①中每一个散列码,用下面的方式合并到result中:
result = 31*result+c;
3、返回result,单元测试,适当修改
在计算hashCode的过程中可以把冗余码排除在外,也就是可以由已知域计算出来的域可以排除。
Rule10、始终覆盖toString() //个人觉得没前面那些那么重要
Rule11、谨慎覆盖clone()
专家级程序员一般不覆盖clone方法,也不去调用它
Rule12、考虑实现comparable接口
Rule13、使类和成员的可访问性最小化
信息隐藏是软件设计的基本原则之一
1、尽可能使每个类或者成员不被外界访问
2、实例域绝对不能使公开的,如果域是非final的,或者是一个指向可变对象的final引用,那么一旦这个域变成共有的,这个域的变化便是不可控的,也就意味着包含共有可变域的类不是线程安全的。
3、长度非0的数组总是可变的,所以类具有静态final数组域或者返回这种域的访问方法几乎总是错误的。
Rule14、在共有类中使用访问方法而不是共有域
简单来说就是使用getter/setter方法代替共有域
未完待续...
- Effective Java其他碎片建议1
- Effective Java其他碎片建议2
- Effective Java其他碎片建议3
- 《Effective Java》中的建议
- Effective Java中的57条建议
- Effective Java中的57条建议
- 《Effective Java》的前26条建议
- 《Effective Java》经典建议系列(3)
- 【Effective Java】最佳实践 其他合集
- Effective Java中对于实现高质量equals的建议
- 《Effective Java》中关于异常处理的几条建议
- java碎片
- JAVA碎片
- Effective STL 建议
- Effective Java 1
- Effective Java: Item 1
- Effective java读书笔记1
- Effective Java 读书笔记1
- Chapter 7.Better Living in Objectville
- html基础-表单控件、密码框、单选按钮、复选框、多行文本框、下拉列表、按钮(提交、图片、重置)
- WeChat小程序学习心得——模板使用
- SpringMVC与Web解读(一):SpringMVC环境构建与ContextLoaderListener
- 多媒体文件管理-数据库external.db,internal.db (一)
- Effective Java其他碎片建议1
- qt creator 内存查看器
- MySql教程____mysql架构体系
- 样式(style)和主题(theme)(一)
- Spring4 之 AOP
- PAT甲级 1049. Counting Ones (30)
- 原生js实现倒计时
- Coursea吴恩达《卷积神经网络》课程笔记(2)深度卷积网络
- [saiku] 将saiku自带的H2嵌入式数据库迁移到本地mysql数据库