- 浏览: 57712 次
- 性别:
- 来自: 成都
文章分类
effective java 之通用程序设计
- 博客分类:
- java
第一条 将局部变量的作用域最小化
将局部变量的作用域最小化,可以增强代码的可读性和可维护性,并降低出错的可能性。
要使局部变量的作用域最小化,最有力的方法就是在第一次使用它的地方声明。几乎每个局部变量的声明应该包含一个初始化表达式。如果你没有足够的信息来对一个变量进行有意义的初始化,就应该推迟这个声明,直到可以初始化为止,这个条规则有个例外的情况是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 776本篇将介绍下ApplicationCo ... -
Spring源码分析之IOC
2013-03-16 21:40 732先看两种方式在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 3241public class IpUtil { publ ... -
mongodb
2012-11-20 22:09 683mongodb文档, -
padingtoolbar 的扩张
2012-10-31 22:01 0在Ext的原有分页控件中,服务器端方法是根据传入的起始数据记录 ... -
extjs的一些组件
2012-10-17 22:34 665<script type="text/java ... -
extjs
2012-10-14 23:09 609extjs的一些文档 -
jquery ui
2012-09-11 22:54 697一个jquery ui 后台 -
重拾java之线程1
2012-09-10 00:17 904[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 856读书笔记effective之对所有对象通用的方法 第一条 覆 ... -
读书笔记effective java 之条目
2012-03-18 15:05 817最近看了下effective java 有编程许多经验值得学 ... -
读书笔记effective java 之通用程序设计3
2012-03-15 22:21 846第五条 基本类型优先于装箱基本类型 java有一个类型系 ... -
读书笔记effective java 之通用程序设计2
2012-03-15 20:59 891第三条 了解和使用类库 ... -
http与socket连接区别
2011-11-08 01:11 443相信不少初学手机联网 ... -
HashMap 一般遍历
2011-11-04 16:28 757Map map=new HashMap() Iterator ...
相关推荐
《Effective Java》第三版中文版目录 第一章 介绍 1 第二章 创建和销毁对象 4 1 考虑用静态工厂方法替换构造器 4 2 当遇到多个构造器参
effective-java.pdf
Effective Java读书笔记.pdf
Effective java 3 学习记录
effective java 读书笔记,第二版自己摘要并翻译,以备速查。
Effective Java读书笔记,记载了大部分我觉的有用的东西,前半部分有代码说明,但后半部分的代码,太过琐碎,就没有整理
【Effective Java】阅读笔记markdown 文件
《Effective Java》读书分享.pptx
15. 使类和成员的可访问性最小化 16. 在公有类中使用访问方法而非公有域 17.使可变性最小化:不可变类
Effective Java Effective Java Effective Java
effective-java 配套代码
构建高效的Java企业级系统是项困难的工作。本书详细介绍企业级计算技术中的常见问题,并描述使用企业级Java平台技术处理这些问题的方法。本书以若干条建议、揸南的形式,言简意赅地介绍了J2EE开发中的微妙之处。无论...
Effective Enterprise Java
Effective C++:改善程序与设计的55个具体做法(中文第三版)亚马逊图书 放到Kindle上就可以浏览学习,因为亚马逊软件有防护功能,电脑上无法使用,切记!!!!
effectiveJava的笔记
Effective-Java:Effective Java的所有练习程序
目录:一、创建和销毁对象 (1 ~ 7)二、对于所有对象都通用的方法 (8 ~ 12)三、类和接口 (13 ~ 22)四、泛型 (23 ~ 29)五、枚举和注解 (30 ~ 37)六、方法 (38 ~ 44)七、通用程序设计 (45 ~ 56)八、异常 ...
java四大名著之一:Effective.Enterprise.Java.中文版 高清pdf 下载