java编程思想体会

最近阅读java编程思想的第五版这本书,用来记录一些自己的体会吧
1.存储区域速度排序,CPU>栈>堆>常量存储>非RAM存储,尽量用局部变量存在栈中,避免全局变量
2.高精度计算附用BigInteger和BigDecimal,牺牲速度还来精度
3.尽量少用new 创建新对象,分配存储空间的过程会影响性能
4.用完后要关闭流,释放资源,防止造成不良后果
5.尽量重用对象
6.懒加载,需要的时候创建对象
7.try catch 不要在for while中使用,放在外面
8.能估计的范围内,尽量指定数组的长度,不然降低代码运行效率,浪费存储空间
9.用位移操作乘除法,不要再循环内创建对象,for循环中可能创建i*j次对象,消费内存,在外面创建好对象
10.为了提高效率和类型检查,多用Array,无法估计数组大小则用ArrayList
11.必要的地方用单例模式
12.同步代码块代替同步方法
13.使用带缓冲的输入输出流
14.顺序插入随机访问用ArrayList 删除和中间插入用LinkedList
15.字符串比较:写if(1.equals(str)),常量写前面避免空指针异常
16.不使用的数据要及时清理掉,不然系统内存泄漏风险
17.toString()代替String.valueOf
18.遍历Map

public static void main(String[] args)
{
    HashMap<String, String> sb = new HashMap<String, String>();
    sb.put("傻逼", "杨晟");
     
    Set<Map.Entry<String, String>> entrySet = sb.entrySet();
    Iterator<Map.Entry<String, String>> iter = entrySet.iterator();
    while (iter.hasNext())
    {
        Map.Entry<String, String> entry = iter.next();
        System.out.println(entry.getKey() + "\t" + entry.getValue());
    }
}
try
{
    a.close();
    b.close();
}
catch (Exception e)
{
    ...
}
建议修改为:

try
{
    a.close();
}
catch (Exception e)
{
    ...
}
try
{
    b.close();
}
catch (Exception e)
{
    ...
}
//如果a或者b中一个抛出异常了,那就全catch了另一个执行不了了

20.使用ThreadLocal前或者后一定要remove一下,不然很可能set或者get上一个线程的内容
21.

// reuse/SprinklerSystem.java
// (c)2017 MindView LLC: see Copyright.txt
// We make no guarantees that this code is fit for any purpose.
// Visit http://OnJava8.com for more book information.
// Composition for code reuse

class WaterSource {
  private String s;
  WaterSource() {
    System.out.println("WaterSource()");
    s = "Constructed";
  }
  @Override
  public String toString() { return s; }
}

public class SprinklerSystem {
  private String valve1, valve2, valve3, valve4;
  private WaterSource source = new WaterSource();
  private int i;
  private float f;
  @Override
  public String toString() {
    return
      "valve1 = " + valve1 + " " +
      "valve2 = " + valve2 + " " +
      "valve3 = " + valve3 + " " +
      "valve4 = " + valve4 + "\n" +
      "i = " + i + " " + "f = " + f + " " +
      "source = " + source; // [1]
  }
  public static void main(String[] args) {
    SprinklerSystem sprinklers = new SprinklerSystem();
    System.out.println(sprinklers);
  }
}
/* Output:
WaterSource()
valve1 = null valve2 = null valve3 = null valve4 = null
i = 0 f = 0.0 source = Constructed
*/


用向上转型来代替继承
22.当方法操纵的是一个类而非接口时,它就只能作用于那个类或其子类。如果想把方法应用于那个继承层级结构之外的类,就会触霉头。接口在很大程度上放宽了这个限制,因而使用接口可以编写复用性更好的代码
23.迭代器

使用 iterator() 方法要求集合返回一个 Iterator。 Iterator 将准备好返回序列中的第一个元素。
使用 next() 方法获得序列中的下一个元素。
使用 hasNext() 方法检查序列中是否还有元素。
使用 remove() 方法将迭代器最近返回的那个元素删除。

你可能感兴趣的:(技术总结)