摘要:
应该优先使用接口而不是类来引用对象,考虑Vector的情况。 应该使用第一种方式,如果使用接口作为类型,程序将会更加灵活,当决定更换实现时,只需改变构造器中的类的名称(或者使用一个不同的静态工厂)。 注意,如果原来的实现提供了某种特殊的功能,而这种功能并不时这个接口通用约定所要求的,并且周围的代码又 阅读全文
摘要:
字符串连接操作符(“+”)是把多个字符串合并为一个字符串的便利途径。要想产生单独一行的输出,或者构造一个字符串来表示一个较小的、大小固定的对象,使用连接操作符是合适的。但对于为连接n个字符串而重复地使用字符串连接操作符,需要n的平方级的时间,这是由于字符串不可变,当两个字符串被连接在一起,它们的内容 阅读全文
摘要:
1.字符串不适合代替其他的值类型。只有当数据确实是文本信息时,才应该使用字符串,如果是数值,就应该被转换为适当的数值类型,如果是一个“是-或-否”的问题答案,应该被转换为boolean类型,如果是一个对象,应该使用对象引用来引用它。 2.字符串不适合代替枚举类型:枚举类型比字符串更加适合用来表示枚举 阅读全文
摘要:
Java 1.5增加自动装箱和自动拆箱,对应基本类型int、double、boolean,装箱基本类型是Integer、Double、Boolean。这两种类型之间差别。 基本类型和装箱基本类型之间的三个主要区别: 1.基本类型只有值,而装箱基本类型具有与它们的值不同的同一性(两个装箱基本类型可以具 阅读全文
摘要:
float和double主要为了科学计算和工程计算而设计,执行二进制浮点运算,这是为了在广泛的数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果,所以不适合用于需要精确结果的场合,尤其是货币计算。 使用舍入可以解决上面问题,但并不是所有的问题都能用舍入解决,如有1元, 阅读全文
摘要:
假设希望产生位于0到某个上界之间的随机整数。可能会这样编写: 测试随机性: 结果接近于666666,由random方法产生的数字有2/3在取值范围的前半部分。 编写一个随机数生成的方法需要了解关于随机数生成器、数论和2的求补算法的相关知识。 现有的类库提供随机数生成的方法,不需要自己来做这样的工作, 阅读全文
摘要:
for-each循环通过完全隐藏迭代器或者索引变量,避免混乱和出错的可能,适用于集合和数组和任何实现Iterable接口的对象。 使用传统for循环,容易出错: 期望打印出36个组合,实际上只打印出6个组合 修正: 使用嵌套for-each循环更简洁: 无法使用for-each循环的情况: 1.过滤 阅读全文
摘要:
将局部变量的作用域最小化,可以增强个代码的可读性和可维护性,并降低出错的可能性。 方法: 1.在第一次使用它的地方声明。如果变量在使用之前声明,对于试图理解程序功能的读者来说,多了一个分散注意力的因素,等到用到该变量的时候,可能已经记不起变量的类型或者初始值了。 2.几乎每个局部变量的声明都应该包含 阅读全文
摘要:
如果返回null, 在客户端处理代码就需要有额外的代码来处理null返回值: 而不是: 认为null返回值比零长度数组更好,因为避免了分配数组所需要的开销,是不对的。 1.除非分析表明这是方法的确影响了性能 2.对于不返回任何类型调用,返回同一个零长度数组是可能的 Collections类提供当需要 阅读全文
摘要:
Java 1.5增加可变参数方法,可变参数方法接受0个或者多个指定类型的参数。 可变参数的机制通过先创建一个数组,数组的大小为在调用位置所传递的参数数量,然后将参数值传到数组中,最后将数组传递给方法。 该方法如期望的那样,sum()=0,sum(1,2,3)=6 有时候,需要编写需要1个或者多个某类 阅读全文