通用程序设计

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、通过接口引用对象

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

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

时间: 2024-10-12 02:45:55

通用程序设计的相关文章

[Effective Java]第八章 通用程序设计

第八章      通用程序设计 45.      将局部变量的作用域最小化 将局部变量的作用域最小化,可以增强代码的可读性和可维护性,并降低出错的可能性. 要使用局部变量的作用域最小化,最有力的方法就是在第一次使用它的地方才声明,不要过早的声明. 局部变量的作用域从它被声明的点开始扩展,一直到外围块的结束外.如果变量是在“使用它的块”之外被声明有,当程序退出该块之后,该变量仍是可见的,如果它在目标使用区之前或之后意外使用,将可能引发意外错误. 几乎每个局部变量的声明都应该包含一个初始化表达式,如

7.通用程序设计_EJ

第45条: 将局部变量的作用域最小化 该条目与第13条(使类和成员的可访问性最小)本质上是类似的.要使局部变量的作用域最小化,最有利的方法就是在第一次使用它的地方声明.在每个局部变量的声明处都应该包含一个初始化表达式.还要使方法小而集中. 第46条: for-each循环优于传统的for循环 传统的for循环的迭代器和索引变量在每个循环中会出现三次,这很容易出错.考虑下面的例子: public class Suits { public static void main(String[] args

Effective Java之通用程序设计

这一章里面讲的都是一些编码的小技巧,或者说是编码时建议遵守的一些原则,下面就一条一条来列举: 1.局部变量的作用域最小.这条规则的原因很简单,在用到局部变量的时候采取创建局部对象,这样便于阅读程序,同时,能够保证局部变量在使用完后能够尽快释放,同时,在创建局部变量时,最好对局部变量进行赋值,如果实在没有办法,可以用null代替. 2.用for-each代替传统的for循环.在JDK1.5之后,Java提供了for-each的循环方式来代替传统的迭代循环,包括集合对象以及数组对象的循环方式.for

Effective Java 读书笔记之七 通用程序设计

一.将局部变量的作用域最小化 1.在第一次使用变量的地方声明 2.几乎每个变量的声明都应该包含一个初始化表达式:try-catch语句是一个例外 3.使方法小而集中是一个好的策略 二.for-each循环优先于传统的for循环 1.for-each循环在简洁性和预防bug方面有着传统的for循环无法比拟的优势,而且没有性能损失. 2.三种不能使用for-each循环的情况: a.过滤:需要显式的迭代器的remove方法 b.转换:需要显式的迭代器或数组索引,以便设定值 c.平行迭代:多个相关集合

第八章:通用程序设计。ITEM45:将局部变量的作用域最小化。

1.将局部变量的作用域最小化,可以增强代码的可读性和可维护性,并降低出错的可能性.在 C 语言中要求局部变量必须在一个代码块的开头处进行声明,出于习惯,有些开发者延续了这样的做法. 这个习惯需要改正,Java 提供了你在代码块的任何地方声明变量的语法支持. 2."要使局部变量的作用域最小化,最有力的实践就是在第一次使用它的地方声明".如果过早的声明,开发者就有可能在真正使用该变量的时候忘记了它的类型或者初始值了,而且也会带来代码块内变量名的名字污染问题,由此引发的 Bug,往往是令人极

java通用程序设计技巧

将局部变量的作用域最小化 较早的C语言要求局部变量必须在一个代码块的开头开始声明,出于习惯,有些程序员目前还是继续这样做,这个习惯应该改正,java允许你可以在任何出现语句的地方声明变量. 要使局部变量作用域最小化的最有效方法是在第一次使用它的地方声明.如果变量在使用之前声明这只会造成混乱,等到用到的时候,读者可能已经记不起该变量的类型或初始值了.过早的声明局部变量不仅会使它的作用域过早地扩展,而且结束的也过于晚了.局部变量的作用域从它被声明的点开始扩展,一直到外围快的结束处.如果变量是在"使用

JavaScript高级程序设计——从头学(1)

JavaScript ——客户端Web浏览器脚本语言. 什么是语言? 用于交流,有完整的语法和明确的语义. 一套完整的JavaScript实现是由三个不同部分组成: 1,ECMASript(核心) 仅仅是个描述,定义了脚本语言的所有属性.方法和对象.也就是一个语言拥有的清晰明了的使用守则和使用方法. 它提供了实现通用程序设计任务必须的Javascript的语法.运算符和基本对象. 2,DOM DOM是处理HTML和XML的API,描述了处理网页内容的方法和接口. 3,BOM BOM描述了与浏览器

Effective java经验之谈,枚举,注解,方法,通用设计,异常

这几章看的比较快,内容就如同标题一样比较容易理解,所以只有部分内容会在[]中解释,其他的就直接理解标题,并不影响阅读质量. 不过如果时间充足的话,还是仔细读一读原书的内容,相信还是有所收获的.主要最近自己想进入算法与机器学习部分,尽快结束这本书. 另一方面,讨论一些自己感兴趣的内容,我会将搞过的东西总结下.后面可能写一部分关于java字节码阅读以及编写的东西.只所以这么来, 是因为字节码编程还是非常用途实际的,这一"java编译语言"使得String与StringBuilder的性能对

C语言程序设计-第1章 程序设计和C语言

所谓程序,就是一组计算机能识别和执行的指令. 每一条指令使计算机执行特定的操作.一个特定的指令序列,用来完成一定的功能. 计算机的本质是程序的机器,程序和指令是计算机系统中最基本的概念. 计算机能直接识别和接受的二进制代码称为机器指令(machine instruction),机器指令的集合就是该计算机的机器语言(machine language).为了克服机器语言的难学难写难记难检查难修改难推广使用的缺点,人们创造出了符号语言(symbolic language),它用一些英文字母和数字表示一