1.避免建立没必要要的对象
静态的初始化器,能够避免重复建立对象。
2.内存泄露
a.对象过时。
b.缓存。
c.监听器和其它回调。
监视工具:Heap剖析工具。
3.避免使用终结方法
使用终结方法有一个很是严重的性能损失,因此才会出现池化技术,好比数据库池,线程池。
显示终止方法:InputStream等文件流,try-finally结构。
4.尽可能使用equals代替“==”
由于使用“==” 会检查参数是否为这个对象的引用。
补充:使用instanceof操做符检查参数是否为正确的类型。
检查是否为空:
java
(file == null ? o.filed == null : filed.equals(o.filed))
5.确保惟一
覆盖equals时总要覆盖hashCodespring
6.使可变性最小数据库
静态工厂也使得客户端间能够共享现有的实例,而不用建立新的实例。注意:static、final等关键词
7.复合优于继承缓存
构造器不能调用可被覆盖的方法,不管是直接调用,仍是间接调用。ide
public class Supper{ public Supper(){ } public void ovverideMe(){ } } public final class Sub extends Supper{ private final Date date; Sub(){ date = new Date(); } public void ovverideMe(){ System.out.println(date); } public static void main(String[] args){ Sub sub = new Sub(); sub.ovverideMe(); } }
你可能会期待这个程序会打印日期两次,可是它第一次打印的是null,由于ovverideMe方法被Supper构造器调用的时候,构造器Sub尚未机会初始化date域。
8.枚举类型工具
为了将数据与枚举类型常量关联起来,得声明实例域,并编写一个带有数据并将数据保存在域中的构造器。
注意:枚举类型使用时一类的,而且数据量还不少,其它的可使用常量。
好比:App中的错误码,不可能把每一个错误定义一个常量。尚未在springMVC中渲染的页面,也可使用枚举类型进行管理。
9.方法性能
a.检查参数的有效性。
b.慎用可变参数。
10.通用程序设计ui
a.若是须要精确的答案,请避免使用float 和 double。
货币单位,最明显的作法是以分单位计算,使用int和long。
b.基本类型因为装箱基本类型。
基本类型:int,long;装箱基本类型:Integer,Long.
之间的区别:1.基本类型只有值,而装箱基本类型则具备与他们的值不一样的同一性。2.基本类型只有功能完备的值,而每一个装箱基本类型除了
它对应基本类型的全部值以外,还有非功能值:null。3.基本类型比装箱基本类型更节省时间和空间。
总结:1.装箱基本类型是类,类是能够为null,这是主要的区别。因此若是使用“==”判断,在Integer是有问题的。
2.当在一项操做操做中混合使用基本类型和装箱基本类型时,装箱基本类型就会自动拆箱。
c.小心字符串链接的功能。就是“+”
可使用StringBuild代替String的“+”,或者使用StringBuffer。
11.异常spa
a.优先使用经常使用异常。
线程