首页 > 代码库 > 通用程序设计

通用程序设计

1、将局部变量的作用域最小化

  java允许在任何可以出现语句的地方声明变量。要使局部变量的作用域最小化,最有力的方法就是在第一次使用它的地方声明。如果变量在使用之前进行声明,会对视图理解程序功能的读者造成混乱。

  过早声明局部变量不仅会使它的作用域过早地扩展,而且结束得也过于晚。局部变量的作用域从它被声明的点开始扩展,一直到外围快的结束处。如果变量是在“使用它的块”之外声明的,当程序退出该块之后,该变量扔是可见的。

2、for-each循环优先于传统的for循环

  java 1.5版本中引入了for-each循环,通过完全隐藏迭代器或者索引变量,避免了混乱和出错的可能。这种模式适用于集合和数组。

  使用for-each循环不会有性能损失,实际上,在某些情况,比起普通的for循环,它还稍有些优势,因为它对数组索引的边界值只计算一次。在对多个集合进行嵌套迭代时,for-each循环相对于传统的for循环的优势更明显,代码也更简洁

  

        Integer[] nums = {1, 2, 3, 4, 5, 6, 7, 8, 9};
        List<Integer> list = new ArrayList<>(Arrays.asList(nums));
        //传统for循环
        for (int i = 0; i < list.size(); i++) {
            Integer n1 = list.get(i);
            for (int j = 0; j < list.size(); j++) {
                Integer n2 = list.get(j);
                System.out.println(n1 * n2);
            }
        }
        //for-each循环
        for (Integer n1 : list) {
            for (Integer n2 : list) {
                System.out.println(n1 * n2);
            }
        }

3、如果需要精确的答案,请避免使用float和double

  float和double类型主要是为了科学计算和工程计算而设计的。 它们执行二进制浮点预算,这是为了在广泛的数值范围上提供较为精准的快速近似计算而设计,它们并没有提供完全精确的结果,所以不应该用于需要精确结果的场合。尤其不适用于货币的计算,因为要让一个float和double精确的表示0.1或者10的任何其他负数次方值是不可能的。

4、基本类型优先于装箱基本类型

  java 1.5版本增加了自动装箱和自动拆箱。这种特性模糊了但并没有完全抹去基本类型和装箱类型之前的区别。基本类型和装箱基本类型之间有三个主要区别:

  ①:基本类型只有值,而装箱基本类型具有与它们的值不同的同一性

  ②:基本类型只有功能完备的值,而每个装箱基本类型除了它对应的基本类型的功能值之外,还有个非功能值:null

  ③:基本类型通常比装箱基本类型更节省时间和空间

        Integer num1 = 127;
        Integer num2 = 127;

        Integer num3 = 129;
        Integer num4 = 129;
        int num5 = 129;
        System.out.println(num1 == num2);// true num1和num2初始化时,自动装箱调用Integer.valueOf(int i)方法,JDK默认对-128至127的进行缓存
        System.out.println(num3 == num4);// false 引用比较
        System.out.println(num3 == num5);// true 自动拆箱,值比较

 

5、当心字符串连接的性能

  字符串连接操作符(+)是吧多个字符串合并为一个字符串的便利途径,单它不适合运用在大规模的场景中,为连接n个字符串而重复地使用字符串连接操作符,需要n的平方及的时间。这是由于字符串不可变而导致的结果。当两个字符串连接在一起时,它们的内容都要被拷贝。为了获得更好的性能,使用StringBuilder或StringBuffer append方法代替。

6、通过接口引用对象

  如果有合适的接口类型存在,那么对于参数、返回值、变量或域来说,就都应该使用接口类型进行声明。

  当养成了接口作为类型的习惯,你的程序将会更加灵活。当你决定更换实现时,所需做的就只是更改构造器中的类的名称。

 

通用程序设计