- 浏览: 59477 次
- 性别:
- 来自: 成都
文章分类
第一条 将局部变量的作用域最小化
将局部变量的作用域最小化,可以增强代码的可读性和可维护性,并降低出错的可能性。
要使局部变量的作用域最小化,最有力的方法就是在第一次使用它的地方声明。几乎每个局部变量的声明应该包含一个初始化表达式。如果你没有足够的信息来对一个变量进行有意义的初始化,就应该推迟这个声明,直到可以初始化为止,这个条规则有个例外的情况是try-catch语句。如果一个变量被一个方法初始化,而这个方法可能会抛出一个受检的异常(checked exception),该变量就必须在try块的内部被初始化。如果变量的值必须在try块外的被使用到,它就必须在try块的外部声明, 循环中提供了特殊的机会来将变量的作用域最小化,如果在循环终止之后不再需要循环变量的内容,for 循环优于whlile
实例1
实例2
为了弄清楚为什么这个for循环优于while。下列有两代码片段
第二个循环中包含一个“copy--past”错误,它本来要初始化一个循环变量c2.却使用了旧的循环变量i,遗憾的是。这个i仍然在有效的范围内。结果代码可以通过编译,运行的时候也不会抛出异常,但是它所做的却是错误的,第二个循环却没有在c2上迭代,而是立即终止,因为这个程序是悄然发生的,所以很长一段时间是不会发现的, 如果类似“copy-past”错误发生在前面任何for循环中,结果代码就根本不能通过编译,在第二个循环开始之前,第一个循环元素的变量已经不在它的作用域范围之内了:
//编译错误
......
使用for循环与使用while还有一个优势:更简短,从而增强了可读性。
最后一种“将局部比那里的作用域最小化”的方法是使方法小而集中。
第二条 for-each 循环优于for循环
三种情况不易使用for-each循环
1 过滤----如果需要遍历集合,并删除选定的元素,就需要使用显示的迭代器,以便可以调用它的
remove方法
2 转换---如果需要遍历列表或数组并取代她部分或全部元素值,就需要列表迭代器或者数组索引
,以便设定元素的值
3 平行迭代----如果要并行的遍历多个集合,就需要显示地控制迭代器或者索引变量,
将局部变量的作用域最小化,可以增强代码的可读性和可维护性,并降低出错的可能性。
要使局部变量的作用域最小化,最有力的方法就是在第一次使用它的地方声明。几乎每个局部变量的声明应该包含一个初始化表达式。如果你没有足够的信息来对一个变量进行有意义的初始化,就应该推迟这个声明,直到可以初始化为止,这个条规则有个例外的情况是try-catch语句。如果一个变量被一个方法初始化,而这个方法可能会抛出一个受检的异常(checked exception),该变量就必须在try块的内部被初始化。如果变量的值必须在try块外的被使用到,它就必须在try块的外部声明, 循环中提供了特殊的机会来将变量的作用域最小化,如果在循环终止之后不再需要循环变量的内容,for 循环优于whlile
实例1
for(Element e:c){ doSomething(e); }
实例2
for(Iterator i=c.iterator();i.hasNext){ doSomething(i.next()); }
为了弄清楚为什么这个for循环优于while。下列有两代码片段
Iterator<Element> i=c.iterator(); while(i.hasNext()){ doSomething(i.next()); } .... Iterator<Element> i2=c2.iterator(); while(i.hasNext()){ doSomething(i2.next()); }
第二个循环中包含一个“copy--past”错误,它本来要初始化一个循环变量c2.却使用了旧的循环变量i,遗憾的是。这个i仍然在有效的范围内。结果代码可以通过编译,运行的时候也不会抛出异常,但是它所做的却是错误的,第二个循环却没有在c2上迭代,而是立即终止,因为这个程序是悄然发生的,所以很长一段时间是不会发现的, 如果类似“copy-past”错误发生在前面任何for循环中,结果代码就根本不能通过编译,在第二个循环开始之前,第一个循环元素的变量已经不在它的作用域范围之内了:
for(Iterator<Element> i=c.iterator();i.hasNext()){ doSomething(i.next()); } ....
//编译错误
for(Iterator<Element> i2=c2.iterator();i.hasNext()){ doSomething(i2.next()); }
......
使用for循环与使用while还有一个优势:更简短,从而增强了可读性。
for(int i=0;n=expensvie();i<n;i++){ doSomething(i); }
最后一种“将局部比那里的作用域最小化”的方法是使方法小而集中。
第二条 for-each 循环优于for循环
三种情况不易使用for-each循环
1 过滤----如果需要遍历集合,并删除选定的元素,就需要使用显示的迭代器,以便可以调用它的
remove方法
2 转换---如果需要遍历列表或数组并取代她部分或全部元素值,就需要列表迭代器或者数组索引
,以便设定元素的值
3 平行迭代----如果要并行的遍历多个集合,就需要显示地控制迭代器或者索引变量,
发表评论
-
Spring源码分析之IOC2
2013-03-16 23:25 851本篇将介绍下ApplicationCo ... -
Spring源码分析之IOC
2013-03-16 21:40 766先看两种方式在IOC容器取得bean 1 beanFactor ... -
一些在工作中遇到的问题汇总
2012-12-10 23:31 0保留一定的小数位数 1 DecimalFormat ... -
Set集合源码初探
2012-12-06 23:07 0[color=green][size=medium] ... -
一些常用的jar包
2012-12-04 22:44 0一些常用的jar 放在网上方便使用 Did your c ... -
java 获取请求ip
2012-11-20 23:11 3271public class IpUtil { publ ... -
mongodb
2012-11-20 22:09 729mongodb文档, -
padingtoolbar 的扩张
2012-10-31 22:01 0在Ext的原有分页控件中,服务器端方法是根据传入的起始数据记录 ... -
extjs的一些组件
2012-10-17 22:34 714<script type="text/java ... -
extjs
2012-10-14 23:09 635extjs的一些文档 -
jquery ui
2012-09-11 22:54 737一个jquery ui 后台 -
重拾java之线程1
2012-09-10 00:17 953[size=medium] 接触java也有一段时间了,以前选 ... -
dom4j 一些使用
2012-07-30 22:40 0dom4j使用 -
一个http请求
2012-07-18 00:04 0ackage com.sxit.phoenix.common; ... -
读书笔记effective之对所有对象通用的方法
2012-03-18 17:22 894读书笔记effective之对所有对象通用的方法 第一条 覆 ... -
读书笔记effective java 之条目
2012-03-18 15:05 837最近看了下effective java 有编程许多经验值得学 ... -
读书笔记effective java 之通用程序设计3
2012-03-15 22:21 890第五条 基本类型优先于装箱基本类型 java有一个类型系 ... -
读书笔记effective java 之通用程序设计2
2012-03-15 20:59 924第三条 了解和使用类库 ... -
http与socket连接区别
2011-11-08 01:11 468相信不少初学手机联网 ... -
HashMap 一般遍历
2011-11-04 16:28 785Map map=new HashMap() Iterator ...
相关推荐
目录:一、创建和销毁对象 (1 ~ 7)二、对于所有对象都通用的方法 (8 ~ 12)三、类和接口 (13 ~ 22)四、泛型 (23 ~ 29)五、枚举和注解 (30 ~ 37)六、方法 (38 ~ 44)七、通用程序设计 (45 ~ 56)八、异常 ...
### Java并发程序设计教程知识点概览 #### 一、使用线程的经验:设置名称、响应中断、使用ThreadLocal 在Java并发编程中,正确管理线程对于构建稳定、高效的多线程应用程序至关重要。命名线程是一项基本但重要的...
《Effective Java》是Java开发领域的一本经典著作,由知名程序员Joshua Bloch撰写。这本书深入探讨了如何编写高效、可维护的Java代码,并提出了许多实用的编程实践和设计原则。通过对书中源代码的分析,我们可以更...
### 程序设计经典书目推荐 #### 一、编程语言 对于游戏开发者来说,掌握一门或多门编程语言是至关重要的。当前游戏行业的主流编程语言主要包括 C/C++,此外,针对移动平台(如智能手机)的游戏开发则常用 J2ME...
根据提供的信息,“Effective Java 中文版 第二版”这本书主要关注的是Java编程语言的最佳实践、设计模式以及如何编写高效、可维护的Java代码。虽然给定的部分内容并未提供实际的文字内容,但从标题和描述来看,我们...
### C++程序设计基础 #### 1. C++语言概述 - **定义与历史**:C++是一种通用的、面向对象的编程语言,由Bjarne Stroustrup在1979年开始设计并实现。它是在C语言的基础上发展起来的,并添加了类、模板等特性。 - **...
最后,遵循Java社区认可的最佳实践,如Google Java Style Guide、Effective Java等书籍提供的指导原则,可以帮助开发者写出高质量、高效率的代码。 总之,Java开发不仅仅是掌握语言本身,更是理解其背后的生态系统...
Java是一种跨平台应用软件的面向对象的可编程语言,是由Sun Microsystems公司于1995年推出的Java程序设计语言和Java平台(即JavaSE,JavaEE,JavaME)的总称。Java技术广泛应用于个人电脑、互联网、数据中心、移动...
8. 并发编程:Go语言从设计之初就内置了强大的并发支持。Goroutine是一种轻量级的线程,可以在单一系统上高效运行成千上万个并发任务。channels则提供了一种安全的、同步的、基于消息的数据流控制机制。 9. 错误...
- Java编程书籍: 如《Thinking in Java》、《Effective Java》等。 - 在线教程和博客: 许多开发者分享的实践经验和技术文章。 综上所述,Java绘图板项目的开发不仅是一项实际的编程任务,更是深入学习Java语言...
异常安全是C++异常处理的一个重要方面,它要求程序在发生异常时,资源得到正确释放,对象处于合理状态。书中讨论了如何编写异常安全代码,包括基本保证、强保证和不抛出异常的承诺。 在设计模式方面,书中通过C++的...
综上所述,《Java核心技术》、《Effective Java》、《Java并发编程实战》以及《深入理解Java虚拟机》四本书分别从不同的角度全面覆盖了Java开发中的关键技术点。无论是初学者还是有一定经验的开发者都能从中获得宝贵...
- 《Effective Java》 - 《Thinking in Java》 - 《Java编程思想》 - 《Java并发编程实战》 2. **解析XML的主要方法有哪些?各有什么区别?** XML解析主要有以下几种方法: - **DOM (Document Object Model)...
### 《Effective Java》知识点概览 ...该书深入浅出地介绍了Java编程语言的各个方面,对于Java开发者来说是一部不可或缺的经典之作。通过学习和应用书中的建议,开发者可以编写出更加高效、健壮且易于维护的代码。
本资源集合包含了多种编程语言的规范指南,包括Java、C++、C以及针对特定场景的编程实践,如微软C编程精粹和华为程序规范教材。以下是对这些编程规范的详细解读: 1. **Java编程规范**: Java编程规范由Sun ...
- **C# 程序设计**:Charles Petzold 著,被誉为 Windows 编程领域的经典之作,也是学习 C# 语言的重要参考书目之一。 以上书籍都是各自领域的经典之作,对于初学者和有一定经验的开发者来说都非常有价值。通过...
- **《Effective Java》**: 关于Java编程的最佳实践。 - **《Clean Code》**: 关于编写清晰简洁代码的原则和技术。 - **《Design Patterns: Elements of Reusable Object-Oriented Software》**: 介绍设计模式的经典...