通用程序设计(七)

原创 2015年07月07日 09:01:58
以下为我在《Effective Java》中留下的读书笔记,对一些重要的知识点提取出了摘要. 

45、将局部变量的作用域最小化

要使局部变量的作用域最小化,最有力的方法就是在第一次使用它的地方声明.

几乎每个局部变量都应该包含一个初始化表达式

避免在每次迭代中执行冗余计算的开销.如果可以保证在每次迭代中都返回同样的结果,就该使用这种做法.
for(int i=0,n=expensiveComputation(); i<n; i++){
}
另外,循环条件假如不是常量也需要格外注意.

46、for-each循环优先于传统的for循环

Iterable<E>接口

for-each循环在简洁性和预防Bug方面有着传统的for循环无法比拟的优势,并且没有性能损失.
有三种常见情况无法使用for-each

1、过滤(删除元素)
2、转换 (设定元素)
3、平行迭代

47、了解和使用类库

java.lang\java.util\java.io

Random、Math产生随机数的使用指南及缺陷.

集合框架、java.util.concurrent

补充:开发者社区

48、如果需要精确的答案,请避免使用float和double

float和double类型尤其不适合用于货币计算,因为要让一个float或者double精确地表示0.1(或者10的任何其他负数次方值)是不可能的.

需要精确的结果时,用BigDecimal或者int或long替代

如果数值范围没有超过9位十进制数字,就可以使用int,如果不超过18位数字,就可以使用long,否则就使用BigDecimal.

补充:几种二进制运算、BigDecimal的控制舍入

49、基本类型优先于装箱基本类型

基本类型与装箱类型的三个区别:    两个装箱基本类型可以具有相同的值和不同的同一性.   new Boolean("true") == new Boolean("true"); // false
                                                     装箱类型还有非功能值 null
                                                     基本类型通常比装箱类型更节省时间和空间

当在一项操作中混合使用基本类型和装箱基本类型时,装箱基本类型就会自动拆箱.如果null对象引用被自动拆箱,就会得到一个空指针异常.

当程序使用==操作符比较两个装箱基本类型时,做的是同一性比较

什么时候使用装箱基本类型?     作为集合中的元素、键和值
                                               在参数化类型中必须使用装箱基本类型
                                               在进行反射的方法调用时,必须使用装箱基本类型

50、如果其他类型更适合,则尽量避免使用字符串

字符串不适合代替其他的值类型
字符串不适合代替枚举类型
字符串不适合代替聚集类型
字符串也不适合代替能力表

51、当心字符串连接的性能

new StringBuilder(size)   append

52、通过接口引用对象

如果有合适的接口类型存在,那么对于参数、返回值、变量和域来说,就都应该使用接口类型进行声明.

如果没有合适的接口存在,完全可以用类而不是接口来引用对象.  例如,值类.String\BigInteger.

53、接口优先于反射机制

丧失了编译时类型检查的好处
执行反射访问所需要的代码笨拙冗长
性能损失

通常,普通应用程序在运行时不应该以反射方式访问对象.

一些需要反射机制的复杂应用程序:类浏览器、对象监视器、代码分析工具、解释型的内嵌式系统、RPC

如果适当的构造器不带参数,甚至根本不需要使用java.lang.reflect包;Class.newInstance方法就已经提供了所需的功能.

54、谨慎地使用本地化方法

本地方法提供了 
1、访问特定于平台的机制 的能力,比如 访问注册表、文件锁.
2、提供了访问遗留代码库的能力,从而可以访问遗留数据.
3、可以通过本地语言,编写应用程序中注重性能的部分

java.util.prefs注册表功能
java.awt.SystemTray访问桌面系统托盘区

使用本地方法的缺点:
1、使使用本地方法的应用程序也不再能免受内存毁坏错误的影响.
2、使用本地方法的应用程序也不再是可自由移植的.
3、使用本地方法的应用程序也更难调试.
4、在进入和退出本地代码时,需要相关的固定开销,所以,如果本地代码只是做少量的工作,本地方法可能降低性能.
5、需要“胶合代码”的本地方法编写起来单调乏味,难以阅读.

补充:遗留代码

55、谨慎地进行优化

好的API设计是优化的基础
每次试图做优化之前和之后要对性能进行测量

设计API、线路层协议和永久数据格式的时候,一定要考虑性能的因素.

补充:性能剖析工具

56、遵守普遍接受的命名惯例

类型参数名称 : T 任意类型 E 集合的元素类型 K和V 映射的键和值类型  X 表示异常
版权声明:本文为博主原创文章,未经博主允许不得转载。

【读书笔记】《Effective Java》(7)--通用程序设计

由至周末,再更新一章的笔记,做到后来发现,78条建议只读标题可以都懂一些东西,再都每一条里面的例子又是另外一些知识。...
  • lqadam
  • lqadam
  • 2016年09月24日 16:22
  • 392

Java通用程序设计与集合方法总结

一.  equals() VS “==”     equals() 通常用来比较两个引用所指向的对象的内容是否相等;而 “==”通常比较的事两个引用所指向的对象是否为同一个对象,即是否引用了同一个内存...
  • gaoxueyi551
  • gaoxueyi551
  • 2013年03月16日 23:20
  • 2005

EffectiveJava(笔记七) 通用程序设计

45. 将局部变量的作用域最小化将局部变量的作用最小化, 可以增强代码的可读性和可维护性, 并降低出错的可能性 要使局部变量的作用域最小化, 最有力的方法就是在第一次使用它的地方声明 几乎每个局部变量...
  • svensuper
  • svensuper
  • 2017年07月10日 15:03
  • 166

Windows程序设计-通用对话框

增加通用对话框:打开/保存POPPAD.RC /////////////////////////////////////////////////////////////////////////////...
  • lilongsy
  • lilongsy
  • 2017年09月14日 10:48
  • 258

《Java程序设计》课程实验指导书程序代码(答案)(实验七)

实验七   Java多线程   一、实验目的: 熟悉利用Thread类建立多线程方法。 熟悉利用Thread接口建立多线程方法。 二、实验内容: 1. 阅读下列程序,分析并上机检验其功能。 class...
  • xiaoguiduxi
  • xiaoguiduxi
  • 2016年06月10日 16:41
  • 1442

Effective Java 读书笔记(七):通用程序设计

将局部变量的作用域最小化 for-each 循环优于传统的 for 循环 了解和使用类库 如果需要精确的答案请避免使用 float 和 double 基本类型优于装箱基本类型 如果其他类型更合适则尽量...
  • hustspy1990
  • hustspy1990
  • 2017年10月12日 20:04
  • 120

通用程序设计

第四十五条:将局部变量的作用域最小化 要使局部变量的作用于最小化,最有力的方法就是在第一次使用它的地方声明。 几乎每个局部变量的声明都应该包含一个初始化表达。 使方法小而集中。 第四十六条:for-e...
  • u012294371
  • u012294371
  • 2017年01月21日 00:03
  • 123

通用程序设计(1)---通用包

package ceun.collections;/** * 一个子ArrayBag对象是Object的指针构成的集合 * 可以往包中加入任意类型的对象 */public class ArrayBag...
  • ceun
  • ceun
  • 2006年03月11日 19:22
  • 10144

动漫人物之七大罪:ディアンヌ Diane 戴安娜 CV 悠木碧

ディアンヌ Diane 戴安娜 CV 悠木碧 嫉妒之罪(Serpent's Sin of Envy) CV:悠木碧 ◆身高:915cm(变小后165CM) ◆种族:巨人族(Giant)...
  • tomotayuki
  • tomotayuki
  • 2015年06月20日 19:31
  • 4190

七参数计算工具教程

七参数计算工具教程 方法1:在ArcMap中进行动态转换(On the fly)     假设原投影坐标系统为Xian80坐标系统,本例选择为系统预设的Projected Coordinate S...
  • nongkad51768
  • nongkad51768
  • 2017年09月22日 14:23
  • 466
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:通用程序设计(七)
举报原因:
原因补充:

(最多只允许输入30个字)