再看Effective Java后,感觉自己的收获很大。
感觉此书写的确实不错,要想提高自己的编程能力此书确实是一本不错的选择。
就把书的部分内容和自己的理解记录下来吧,方便自己复习。
第45条--将局部变量的作用域最小化
优点
:增加代码的可读性和可维护性,并降低出错的可能性。
如何最小化
:在第一次使用的地方声明局部变量。(某些程序员习惯在代码块的开始处把所有变量都声明了,这样会引起混乱,记不清楚变量的初始化,初始值。)
在本条建议中,提及到for循环比while循环更有优势,原因很简单:for循环可以是局部变量的作用域最小化;而while循环和for循环相比是扩大了作用域。例如
for(Iterator i=c.iterator();i.hasNext();){
doSomething(i.next()); //for循环可以保证变量i的作用域在循环之内
}
Iterator i=c.iterator();
while(i.hasNext()){
doSomething(i.next()); //while循环扩大了变量i的作用域,已经不在循环之内了
}
在while扩大局部变量作用域后,犯错的可能性就更大了,比如
Iterator i=c.iterator();
while (i.hasNext()){
doSomething(i.next());
}
//粗心的程序员在ctrl+c ,ctrl+v的时候就容易犯下面的错误
Iterator i2=c.iterator();
while (i.hasNext()){ //i.hasNext()会返回false,导致下面的代码永远不会执行
doSomething(i2.next());//永远不会执行
}
由此可见:
良好的编程技巧及习惯是多么的重要。
第46条--for-each循环优先于传统的for循环
原因
:1、代码更简洁 2、预防bug
这是因为迭代器和索引变量容易造成混乱,为什么这么说呢,请看下面的例子
enum Suit { CLUB,DIAMOND,HEART,SPADE} //四种花色
enum Rank {ACE,DEUCE,THREE,FOUR,FIVE,SIX,SEVEV,EIGHT,NINE,TEN,
JACK,QUEEN,KING}//每种花色13张牌
...
Collection<Suit> suits=Arrays.asList(Suit.values());
Collection<Rank> ranks=Arrays.asList(Rank.values());
List<Card> deck= new ArrayList<Card> ();
for (Iterator<Suit> i=suits.iterator();i.hasNext();)
for (Iterator<Rank> j=ranks.iterator();i.hasNext();)
deck.add( new Card(i.next, j,next()));
上面的代码的意图很明显,是想生成一副扑克,但是能够达到目的吗?
令人失望的是不但达不到还会报错,这是因为i.next()调用四次之后就没有元素了。
有没有感到迭代器混乱了呢?上面的bug改起来还是比较容易的,如下
for (Iterator<Suit> i=suits.iterator();i.hasNext();){
Suit suit=i.next();
for (Iterator<Rank> j=ranks.iterator();i.hasNext();)
deck.add( new Card(suit, j,next())); //生产一副扑克
}
传统的迭代器在多重循环的时候容易出现bug,下面再看看for-each循环吧
enum Suit { CLUB,DIAMOND,HEART,SPADE} //四种花色
enum Rank {ACE,DEUCE,THREE,FOUR,FIVE,SIX,SEVEV,EIGHT,NINE,TEN,
JACK,QUEEN,KING}//每种花色有13张
...
List<Card> deck= new ArrayList<Card> ();
for (Suit suit:Suit.values())
for (Rank rank:Rank.values())
deck.add( new Card(suit, rank));
上面的代码是不是简洁清晰些呢,也降低了出错的可能性。
既然for-each循环既简洁,又可以预防bug那我只用for-each循环不就好了嘛?不幸的是for-each不是完美的。
那么for-each循环在什么时候不能用呢?
1、过滤2、转换3、平行迭代
简单来说就是:
当我需要遍历集合(或数组)并且要替换(或者删除)某些元素(或者全部元素)的时候就只能用迭代器(或者索引变量)
分享到:
相关推荐
"Effective Java读书笔记" Effective Java是一本关于Java编程语言的经典书籍,本笔记主要总结了Java语言的发展历程、静态工厂方法的应用、构造器模式的使用等重要知识点。 一、Java语言的发展历程 Java语言的发展...
《Effective Java》是Java...以上仅是《Effective Java》一书中部分核心知识点的概述,实际的读书笔记中会更详细地解释这些概念,并给出具体的示例代码。通过深入学习和实践,开发者可以极大地提升其Java编程的水平。
《Effective Java》是Java开发领域的经典著作,作者Joshua Bloch深入浅出地阐述了编写高效、健壮的Java代码的技巧和最佳实践。以下是对该书部分内容的详细解释: 1. **产生和销毁对象** - Item1:静态工厂方法相比...
### Effective Java读书笔记(上) #### 第一章 引言 本书主要针对Java开发者提供了大量实用的编程指导建议,帮助读者提升代码质量和程序性能。在本章节中,我们将重点介绍对象的创建与销毁,以及一些重要的设计...
读书笔记:Effective Java中文版第3版笔记
读书笔记:Effective Java中文版第二版示例、笔记
读书笔记:Effective Java中文版学习项目
Effective Java 读书笔记 - 枚举与注解 本文总结了Effective Java 中关于枚举与注解的知识点,涵盖了枚举类型的优点、使用指南、避免使用 int 常量、使用 EnumSet 和 EnumMap 等。 枚举类型的优点 枚举类型提供了...
读书笔记:Effective Java中文版 第2版
读书笔记:读Effective Java中文版第3版阅读源码测试案列
读书笔记:Java练习包括《Java编程思想》《算法》《Effective Java》等
读书笔记:Effective Java中文版第二版示例代码
读书笔记:Effective Java 中文版(2版和3版)
读书笔记:Effective.Java中文版(第3版)
《Effective Java》是一本经典Java编程指南,作者是Joshua Bloch,这本书深入探讨了如何编写高质量、高效、可维护的Java代码。以下是对压缩包中各章节主要知识点的详细阐述: 1. **第2章 创建和销毁对象** - 单例...
读书笔记:Effective Java 中文版(第2版)总结 (美)Joshua Bloch 著
除了课程内容,阅读官方文档、经典教材如《Head First Java》、《Effective Java》等,以及观看开源项目和在线教程,可以帮助巩固理论知识,提升实践能力。 总之,Java学习笔记旨在为初学者提供全面的学习路径,从...
java8集合源码有效的 Kotlin - 示例 免责声明:这个存储库包含我在阅读优秀书籍 Effective Kotlin 时收集的个人笔记和示例。 它绝不是本书的摘录或副本。 我鼓励所有 Kotlin 开发人员购买和阅读这本书。 第 1 部分:...
Java是世界上最流行的编程语言之一,尤其在企业级应用开发领域占据主导地位。为了在Java求职面试中脱颖而出,全面准备至关重要。这份"java面试大全(题库、源码、书籍、笔记、简历模板).zip"资源集合提供了一个全...
3. **《Effective Java》第二版(effective-java-2)**:这是Joshua Bloch的经典之作,书中列举了23个编程项,提供了关于如何编写更高效、可读性更强的Java代码的实用建议。它涉及的主题包括枚举类型、泛型、匿名内部...