Effective Java之通用程序设计

  这一章里面讲的都是一些编码的小技巧,或者说是编码时建议遵守的一些原则,下面就一条一条来列举:

  1、局部变量的作用域最小。这条规则的原因很简单,在用到局部变量的时候采取创建局部对象,这样便于阅读程序,同时,能够保证局部变量在使用完后能够尽快释放,同时,在创建局部变量时,最好对局部变量进行赋值,如果实在没有办法,可以用null代替。

  2、用for-each代替传统的for循环。在JDK1.5之后,Java提供了for-each的循环方式来代替传统的迭代循环,包括集合对象以及数组对象的循环方式。for-each的循环方式在没有降低传统的循环方式效率的情况下,方便了阅读及编写,而且可以避免传统的for-each循环方式下容易出现的一些问题,下面举个例子:

for(Iterator i = suits.iterator();i.hasNext();){
    for(Iterator j = ranks.iterator();j.hasNext();){
        deck.add(i.next(),j.next());
    }
}

  在这段代码中,输出的结果肯定是错的,在循环j变量时,使得i不断地指向下一个对象,从而没有达到遍历的效果。

  当然,传统的遍历方式也没有废弃,在如果需要对集合中的元素进行删除等操作时,for-each方式就不那么试用了。

  3、了解和使用类库。这个原则很简单,不要重复发明轮子,由第三方实现的功能,是积累了大量的专家们的知识,在方法的效率以及稳定性上面肯定比我们自己写的要好很多,而且,使用类库可以使得某些方法得到持久的更新,而不用我们自己去动手,并且,由于使用类库的用户比较多,资料比较全,可以减少学习的时间成本。

  4、对于精确程度要求较高的计算,用BigDemical代替float和double。代替的缺点和优点同样明显,缺点在于性能及编写的复杂性,优点就是可以提供正确的计算结果。

  5、基本类型由于装箱基本类型。这个在前面的文章中有过一次性能的比较,基本类型在性能上完爆引用类型,不仅如此,装箱基本类型在数值比较时,尤其是判断是否相等时,很容易犯错误,因为装箱基本类型从本质上来讲,还属于引用类型,所以在判断两个数值是否相等时很容易出错。

  6、尽量使用合适的类型表示所要表示的内容。这个针对的是输入,一般输入都是保存到字符串中,但应该在第一时间将输入的内容转换为其所应该表示的形式。

  7、当心字符串连接的性能。字符串的连接,相当于,每一次连接过程都是重新创建对象的过程,这样子耗时耗性能,可以使用用StringBuilder的append代替。

  8、通过接口引用对象。通过接口引用对象可以带来很强的灵活性,当需要改变接口需要引用的对象时,只需要改变一行代码,其他的代码可以不变,也是因为如此,Java里面提倡一种面向接口编程。  

  9、接口优先于反射机制。反射机制只应该用在不知道具体类的情况下,但这种情况应该少用,如果必须要使用,那么,反射只应该负责初始化实例,实例中方法的调用应该通过接口来实现。

时间: 2024-10-23 03:20:01

Effective Java之通用程序设计的相关文章

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

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

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

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

Effective Java读书笔记(3对于所有对象都通用的方法)

3.1 覆盖equals时请遵守通用约定 什么时候应该覆盖Object.equals()方法呢? 如果类具有自己特有的"逻辑相等"概念(不同于对象等同的概念),而且超类还没有覆盖equals以实现期望的行为,这时我们就需要覆盖equals方法. Object.equals()方法具有自反性.对称性.传递性.一致性和与null比较返回false的特点. 实现高质量equals方法的诀窍: (1)使用==操作符检查"参数是否为这个对象的引用".如果是,则返回true,这

Effective Java 第三版——10. 重写equals方法时遵守通用约定

Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. 10. 重写equals方法时遵守通用约定 虽然Object是一个具体的类,但它主要是为继承而设计的.它的所有非 final方法(equals.hashCode.toStr

Effective java 中文版本阅读总结

点击链接查看云笔记原文 花了半天时间,贪婪的啃读了Effective java 这本书(虽然闻名已久,但是很少看书) 翻着翻着就有种废寝忘食的感觉,下班了都留下来专门看书,后来索性带回家看了. 以下是内容总结,主要是对个人感觉有用的,有很大部分没有提及,因为水平有限,还没有来得及消化 1 引言 2 创建和销毁对象 # 静态工厂方法由于构造器 Boolean.valueOf(String); 几乎总是优于构造器Boolean(String);构造器每次调用的时候都会创建一个新的对象 * 对象创建比

【电子书】Effective Java中文版下载

下载地址: 点击打开链接 (需要资源0分的联系我~) <Effective Java中文版(第2版)>主要内容:在Java编程中78条极具实用价值的经验规则,这些经验规则涵盖了大多数开发人员每天所面临的问题的解决方案.通过对Java平台设计专家所使用的技术的全面描述,揭示了应该做什么,不应该做什么才能产生清晰.健壮和高效的代码.第2版反映了Java 5中最重要的变化,并删去了过时的内容. <Effective Java中文版(第2版)>中的每条规则都以简短.独立的小文章形式出现,并

Effective Java读后感

<Effective Java>读后感 1       创建和销毁对象 1.1    考虑用静态工厂方法代替构造器 静态工厂方法优点: 静态工厂方法与构造器(构造方法)不同的第一大优势在于,它们有名称.见名知意,突出区别. 静态工厂方法与构造器不同的第二大优势在于,不必在每次调用它们的时候都创建一个新对象. 静态工厂方法与构造器不同的第三大优势在于,它们可以返回原返回类型的任何子类型的对象. 静态工厂方法与构造器不同的第四大优势在于,在创建参数化类型实例的时候,它们使代码变得更加简洁. 例如:

Effective java读书笔记

2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己 计在16年要看12本书,主要涉及java基础.Spring研究.java并发.JVM.分布式之类的.在今年面试的时候深受打击,到处都是问分布式.集群的?难道现在工作两三年的都这么牛逼了?都在搞分布式.集群之类的? 2016书单如下: 1.深入理解Java虚拟机:JVM高级特性与最佳实践---(已看,预计今年看三遍) 2.Oracle查询优化改写技巧与案例---(已看) 3.Ef

《Effective java》—–读书笔记

2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己!预计在2016年要看12本书,主要涉及java基础.Spring研究.java并发.JVM.分布式之类的.在今年面试的时候深受打击,到处都是问分布式.集群的?难道现在工作两三年的都这么牛逼了?都在搞分布式.集群之类的? 2016书单如下: 1.深入理解Java虚拟机:JVM高级特性与最佳实践-(已看,预计今年看三遍) 2.Oracle查询优化改写技巧与案例-(已看) 3.Eff