第45条:将局部变量的作用域最小化
- 要使局部变量的作用域最小化,最有力的方法就是在第一次使用它的地方声明
- 几乎每个局部变量的声明都应该保护一个初始化表达式
- 例外,try-catch,因为初始化会被抛异常,那么在try外声明,在内部初始化
- 使方法小而集中,使得一个操作相关的变量不会被另一个操作的代码操作
第46条:for-each循环优先于传统的for循环
-
迭代器和索引变量更容易出错
- for的for(int i = 0; i < a.lenght; i ++) 每次a.length都执行,性能低,容易忘记
-
例外
-
过滤:遍历删除部分元素,用remove需要i
-
转换:遍历列表或者数组,并取代部分元素值
-
平行迭代:同时并行遍历多个集合
第47条:了解和使用类库
类库虽然比较大,但是还是应该熟悉java.lang, java.util, java.io 包括,collections,concurrent等等
因为类库受关注和改进比普通人要更受关注,因此使用会更好
第48条:如果需要精确的答案,请避免使用float和double
- float和double类型主要是为了科学计算和工程计算而设计的,它们执行的是二进制浮点运算,并没有提供完全精确的结果,如(1 - 9 * .10) = 0.09999999999999998
- 用BigDecimal,int或者long进行精确计算,尤其是货币的时候
- BigDecimal,优点,完全控制舍入模式8种,缺点,不方便(类型),慢。
- 如果数值范围没有超过9位十进制数字,就可以使用int;如果不超过18位数字,就可以使用long;如果数值可能超过18位数字,就必须使用BigDecimal。
第49条:基本类型优先于装箱基本类型
- 选择的时候优先使用基本类型
- 这些时候应该使用装箱基本类型
- 作为集合中的元素,键和值
- 参数化类型<T>中
- 进行反射的方法调用
- 当一项操作中混合基本类型和装箱基本类型时,装箱基本类型就会自动拆箱,可能会导致NullPointException;另,自动装箱减少了使用装箱基本类型的繁琐,但并没有减少风险。当程序用==比较两个装箱基本类型时候,做了同一性比较,几乎肯定不是你所希望的
- 装箱导致高开销和不必要的对象创建
第50条:如果其他类型更合适,则尽量避免使用字符串
- 字符串不适合代替其他的值类型,如int,是否的boolean等
- 不适合代替枚举
- 不适合代替聚集类型,如使用分隔符来存储数据,不是好的方式 ,a#b#c,以#来间隔
- 不适合代替能力表,如用string基于键的api
第51条:当心字符串连接的性能
- +是把多个字符串合并为一个字符串的遍历途径,但是大规模时候,为连接n个字符串,重复使用连接符操作,需要n的平方级。因为字符串是不可变的,造成了很多需要垃圾回收的中间对象。事实上,每个+会自动引入一个StringBuilder,来构造新的string。
- 使用StringBuilder的append方法,分配一次,使用多次,可以预分配大小,也可以让其自动扩展
- 原则,不要使用字符串连接符来合并多个字符串,除非性能无关紧要。应该使用StringBuilder或者String数组
第52条:通过接口引用对象
- 如果有合适的接口类型存在,那么对于参数,返回值,变量和域来说,就都应该使用接口类型进行声明,通常更改实习的时候,只是更改构造器中类的名称,如
List<Subscriber> subscribers = new Vector<Subscriber>();
改为
List<Subscriber> subscribers = new ArrayList<Subscriber>();
- 注意:如果原来的实现提供了特殊的功能,而这种功能并不是接口所有,周围的代码又依赖于次功能,新的实现也要提供同样的功能。
- 如果没有合适的接口存在完全可以用类而不是接口来引用对象,如值类型,已经没有关联接口的具体类
- 对象属于框架,则用基础类来引用对象 如java.util.TimerTask
- 类实现接口,但是有接口没有的方法
- 总之,接口引用对象会使程序更加灵活,如果不能,使用类层次结构中提供了毕业功能的最基础的类
第53条:接口优先于反射机制
对反射理解不深
第54条:谨慎地使用本地方法
- 指使用本地程序设计语言编写的特殊方法
- jvm越来越快,本地方法提供性能不值得
- 本地语言不安全,平台相关,不方便移植
- 尽可能少使用,必要时候才使用,而且极少数情况会用到,并全面测试
第55条:谨慎第进行优化
不要费力去编写快速的程序,应该努力编写好的程序,速度随之而来
第56条:遵守普遍接受的命名惯例
如果长期养成的习惯与此不同,不要盲目遵从这些命名规范,可以运用常识
- 大小: 39.2 KB
分享到:
相关推荐
"Effective Java读书笔记" Effective Java是一本关于Java编程语言的经典书籍,本笔记主要总结了Java语言的发展历程、静态工厂方法的应用、构造器模式的使用等重要知识点。 一、Java语言的发展历程 Java语言的发展...
《Effective Java》是Java开发领域的经典著作,作者Joshua Bloch深入浅出地阐述了编写高效、健壮的Java代码的技巧和最佳实践。以下是对该书部分内容的详细解释: 1. **产生和销毁对象** - Item1:静态工厂方法相比...
"Effective Java 读书分享" 《Effective Java》读书分享.pptx 是一本 Java 编程语言指南,旨在帮助开发者编写高质量、可维护的 Java 代码。该书包含 90 个条目,每个条目讨论一条规则,涵盖了 Java 编程语言的...
《Effective Java》是Java...以上仅是《Effective Java》一书中部分核心知识点的概述,实际的读书笔记中会更详细地解释这些概念,并给出具体的示例代码。通过深入学习和实践,开发者可以极大地提升其Java编程的水平。
根据给定的文件信息,以下是对“精版Effective STL读书笔记”的详细解析,重点提炼了STL(标准模板库)中的关键知识点。 ### 标题:“精版Effective STL读书笔记” 此标题暗示了文档是针对《Effective STL》一书的...
《Effective Java》是Java编程领域的一本经典著作,由Joshua Bloch撰写,它提供了许多最佳实践和设计原则,帮助开发者写出更高效、更可维护的代码。第三版延续了这一传统,对Java语言的新特性进行了更新,并给出了...
Effective Java 读书笔记 - 枚举与注解 本文总结了Effective Java 中关于枚举与注解的知识点,涵盖了枚举类型的优点、使用指南、避免使用 int 常量、使用 EnumSet 和 EnumMap 等。 枚举类型的优点 枚举类型提供了...
读书笔记:Effective Java中文版第3版笔记
读书笔记:Effective Java中文版 第2版
### Effective Java读书笔记(上) #### 第一章 引言 本书主要针对Java开发者提供了大量实用的编程指导建议,帮助读者提升代码质量和程序性能。在本章节中,我们将重点介绍对象的创建与销毁,以及一些重要的设计...
从给出的部分内容来看,读书笔记主要聚焦于以下几个知识点: 1. C++语言的联邦概念:C++是一个由多个次语言构成的语言联邦,这包括了C语言核心、面向对象的C++、模板C++以及标准模板库(STL)。这种理解对于深入...
读书笔记:Effective Java中文版学习项目
读书笔记:Effective Java中文版第二版示例、笔记
读书笔记:Effective Java 中文版(2版和3版)
这本书的第三版包含了大量更新,涵盖了Java语言和平台的新发展,如Java 8和Java 9的新特性。以下是对《Effective Java》笔记中可能涉及的关键知识点的详细解读: 1. **单例模式**:书中强调了如何正确实现单例模式...
读书笔记:Java练习包括《Java编程思想》《算法》《Effective Java》等
读书笔记:Effective Java中文版第二版示例代码
标题“effective-java.pdf”与描述“effective-java.pdf”表明本文档是关于Java编程实践的指南,且内容可能来自于一本名为《Effective Java》的书籍,该书是由Joshua Bloch编写,被广泛认为是Java编程的权威指南。...