通用程序设计(七)

原创 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 表示异常
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

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

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

6、通用程序设计

兴趣遍地都是,专注和持之以恒才是真正稀缺的。

Effective Java 之通用程序设计

1 通用程序设计1.1 优先使用 for-each 代替for循环 for-each性能并不比for差,有时稍有性能优势 for-each可以减少出Bug的几率 for-each比f...

EffectiveJava第八章:通用程序设计

讨论Java语言的具体细节,讨论了局部变量的处理、控制结构、类库的用法、各种数据类型的用法,反射(reflection)和本地方法(native method)的用法。45. 将局部变量的作用域最小化...

【effective java读书笔记】通用程序设计(一)

从小,我这人读书有个毛病,就是喜欢虎头蛇尾。小说什么的,一直如此。改变这种情况,唯有坚持,才能改变。 一、第45条,将局部变量的作用域最小化: 二、第46条,for-each循环优先于传统的for循环

effective java:通用程序设计

45条:将局部变量的作用域最小化          1:局部变量的作用域从它被声明的点开始,一直到外围块(block)结束。如果变量在被使用块之前被声明,当程序退出该块时,该变量仍然可见。      ...

【effective Java读书笔记】通用程序设计(三)

第50条 如果其他类型更合适则尽量避免使用字符串 第51条 当心字符串连接的性能 第52条 通过接口使用对象 第53条接口优先于反射机制 第54条谨慎的使用本地方法 第55条谨慎的进行优化 第56条遵...

智能家居通用管理平台(十) – WP客户端程序设计

      智能家居通用管理平台SHP完成实现后,通过SHS和SHM,已经可以监控家庭的智能设备系统了。但究竟不方便,服务器一般也很少被操作,它24小时默默的工作着。主人真正感兴趣的是,通过智能...

【effective java读书笔记】通用程序设计(二)

前言 以前曾经做ERP时,总是遇到尾差尾数的问题。比如:库存一箱苹果10元钱,假如一共3个苹果。拿走两个还剩多少钱。好了,言归正传,回到今天的读书笔记,精度问题。 第47条了解和使用类库 第48条如果...

Effective Java——通用程序设计(上)

目录 四十五、将局部变量的作用域最小化 四十六、for-each循环优先于传统的for循环 四十七、了解和使用类库 四十八、如果需要精确的答案,请避免使用float和double 四十九、基...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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