• Effective java -- 7 通用程序设计


    第四十五条:将局部变量的作用域最小化

    第四十六条:加强版for循环优于传统for循环

    第四十七条:了解和使用类库
    书中提到了一个生成随机数的例子。正好需要。

      public static void main(String[] args) {
        Random rnd = new Random();
        int n = 2 * (Integer.MAX_VALUE / 3);
        int low = 0;
        for (int i = 0; i < 10000000; i++) {
          if (Math.abs(rnd.nextInt() % n) < n / 2) {
            low++;
          }
        }
        System.out.println(low);
      }

    一般写随机数,都是这么写,以为这会Math.random会生成一个完全随机的随机数。上面那个low计算出来的结果是随机数落在设定的数的前半部分的个数。按照设想应该10000000 / 2 个, 但是最后的结果总是落在6666666左右,也就是随机数并不平均,落在前 1/2 的概率比较大。还有一个问题,因为这个程序调用Math.abs,如果nextInt()返回Integer.MIN_VALUE,那么Math.abs也会返回Integer.MIN_VALUE,假设n不是2的n次方,那么取模(%)后就不是0,是一个负数,这段程序能生成负数。而且这个特别难发现。这里还涉及到尾随机数,如果n是一个比较小的2的乘方,经过一段时间之后,生成的随机数序列将会重复。
    Random.nextInt(int),这个方法就能生成真正的随机数。目前为止是。

    第四十八条:如果需要精确的答案,请避免使用float和double

    用BigDecimal,int和long惊醒货币计算。

    第四十九条:基本类型由于装箱基本类型

    第五十条:如果其他类型更合适,则尽量避免使用字符串

    第五十一条:当心字符串连接的性能
    当字符串连接(+)过多时用,StringBuilder代替String。

    第五十二条:通过接口引用对象
    没什么说的,就是面向接口编程而非实现。

    第五十三条:接口优先于反射机制
    用反射需要付出的代价:1,丧失了编译时类型检查的好处。2,代码笨拙。3,性能损失
    反射机制很强大,对于特定的复杂系统编程任务,它是必要的,但也有缺点。

    第五十四条:谨慎地使用本地方法

    第五十五条:谨慎地进行优化

    第五十六条:遵守普遍接受的命名习惯

  • 相关阅读:
    [转] Java中的static关键字解析
    [转] Java中public,private,final,static等概念的解读
    [转] Java关键字final、static使用总结
    Android Studio代码调试大全
    [转] Java接口_interface_implements
    中介者模式
    责任链模式
    命令模式
    桥接模式
    单例模式
  • 原文地址:https://www.cnblogs.com/badboyf/p/6292466.html
Copyright © 2020-2023  润新知