effective java coding

注:以下来源于个人日常的整理
创建对象:
1.不要提前创建对象;避免在循环体中创建对象,循环前应该创建对象,避免浪费更多内存空间和增加GC负担
2.数据格式化首选操作符格式化,即‘+’号,次选其他方法MessageFormat
3.尽量用对象的valueOf转换对象
4.集合创建如果知道大小,就赋予大小

类和接口:
1.组合优于继承(指extends)
   继承(extends)中,构造方法中决不能调用可被覆盖的方法(@override);clone和readObject也不可以调用可覆盖方法
2.接口优于抽象类
3.尽量不要用接口定义常量,常量可用工具类或枚类型

异常:(少用异常)
受检异常:exception 调用者希望有适当的恢复机制,就用受检异常
未受检异常:RuntimeException or ERROR 不必声明

失败原子性:失败的方法调用应该使对象保持在调用之前的状态
实现方法:1.设计不可变对象 2.执行操作前检查参数有效性或调整计算的处理过程(先处理不发生状态变化的逻辑)
3.提供恢复代码4.在对象的临时拷贝上执行操作

性能相关:
1.尽量产生少的对象
    a.如果一个对象能重复使用,可以不用每次都new
2.尽量产生少的函数调用
    a.inline
    b.在new 一个带多个属性的对象时候,尽量采用构造初始化函数,少用set形式
3.循环处理
    a.不用try{}catch{}
    b.优先使用for
    c.原则1
4.区别处理基本类型类和包装类型类
    基本类型数据产生和处理在栈中,包装类型是对象,会在堆中产生实例,JVM对包装类处理首先会调用valeOf得到实际值,再做其他操作
    a.适用包装类型的场合:集合类对象,有对象方面需求时候
    b.其他提倡使用基本类型
5.避免产生JVM无法马上回收的无用的引用的对象
    比如数组或其他集合中某些个对象无用了,要手工释放对象:obj =null;
6.字符串处理
    拼接:StringBuildder、StringBuffer
7.数组拷贝
    System.arrayCopy 是native调用
8.多线程
    a.尽量避免使用多线程
    b.synchronized func(){} 比 func(){synchronized(this){}} 上高效,前提后一种锁的代码片段比较少
9.系统间调用
    a.远程调用尽量减少远程调用的次数,比方使用粗粒度传输对象
    b.同一系统(进程)间调用内使用本地接口,不要用远程
    c.webService适用公开对外发布接口,针对不同平台系统,同一平台间调用尽量不要用。
     比方都是java平台,可以用hessian协议
10.类变量不要再给默认的初始值
   比如:int a=0; 这样会导致多赋值一次

你可能感兴趣的:(java,多线程,编程,性能)