Effective java -- 7 通用程序设计
第四十五条:将局部变量的作用域最小化
第四十六条:加强版for循环优于传统for循环
第四十七条:了解和使用类库
书中提到了一个生成随机数的例子。正好需要。
public static void main(String[] args) {
Random rnd = new Random();
int n = * (Integer.MAX_VALUE / );
int low = ;
for (int i = ; i < ; i++) {
if (Math.abs(rnd.nextInt() % n) < n / ) {
low++;
}
}
System.out.println(low);
}
一般写随机数,都是这么写,以为这会Math.random会生成一个完全随机的随机数。上面那个low计算出来的结果是随机数落在设定的数的前半部分的个数。按照设想应该10000000 / 2 个, 但是最后的结果总是落在6666666左右,也就是随机数并不平均,落在前 1/2 的概率比较大。还有一个问题,因为这个程序调用Math.abs,如果nextInt()返回Integer.MIN_VALUE,那么Math.abs也会返回Integer.MIN_VALUE,假设n不是2的n次方,那么取模(%)后就不是0,是一个负数,这段程序能生成负数。而且这个特别难发现。这里还涉及到尾随机数,如果n是一个比较小的2的乘方,经过一段时间之后,生成的随机数序列将会重复。
Random.nextInt(int),这个方法就能生成真正的随机数。目前为止是。
第四十八条:如果需要精确的答案,请避免使用float和double
用BigDecimal,int和long惊醒货币计算。
第四十九条:基本类型由于装箱基本类型
第五十条:如果其他类型更合适,则尽量避免使用字符串
第五十一条:当心字符串连接的性能
当字符串连接(+)过多时用,StringBuilder代替String。
第五十二条:通过接口引用对象
没什么说的,就是面向接口编程而非实现。
第五十三条:接口优先于反射机制
用反射需要付出的代价:1,丧失了编译时类型检查的好处。2,代码笨拙。3,性能损失
反射机制很强大,对于特定的复杂系统编程任务,它是必要的,但也有缺点。
第五十四条:谨慎地使用本地方法
第五十五条:谨慎地进行优化
第五十六条:遵守普遍接受的命名习惯
Effective java -- 7 通用程序设计的更多相关文章
- [Effective Java]第八章 通用程序设计
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- 《Effective Java》笔记45-56:通用程序设计
将局部变量的作用域最小化,可以增强代码的可读性和可维护性,并降低出错的可能性. 要使用局部变量的作用域最小化,最有力的方法就是在第一次使用它的地方才声明,不要过早的声明. 局部变量的作用域从它被声明的 ...
- Effective Java 学习笔记----第7章 通用程序设计
第7章 通用程序设计 第29条 将局部变量的作用域最小化 使一个局部变量的作用域最小化,最有力的技术室在第一次使用它的地方声明. 第30条 了解和使用库 效率提高.如果你不知道库 ...
- Effective java笔记(二),所有对象的通用方法
Object类的所有非final方法(equals.hashCode.toString.clone.finalize)都要遵守通用约定(general contract),否则其它依赖于这些约定的类( ...
- Effective Java 第三版——10. 重写equals方法时遵守通用约定
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- Effective Java —— 覆盖equals时遵守通用约定
本文参考 本篇文章参考自<Effective Java>第三版第十条"Obey the general contract when overriding equals" ...
- 《Effective java》-----读书笔记
2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己!预计在2016年要看12本书,主要涉及java基础.Spring研究.java并 ...
- Effective java读书笔记
2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己 计在16年要看12本书,主要涉及java基础.Spring研究.java并发.J ...
- 《Effective Java(中文第二版)》【PDF】下载
<Effective Java(中文第二版)>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382186 Java(中文第二版)& ...
随机推荐
- C# : 资源文件(多用于处理国际化)
1.建立Resource文件夹,添加资源文件 处理国际化的问题,我们可以添加多个资源文件,如下就是添加一个中文的,一个英文的. 2.向其中添加键值对. 3.取值 CultureInfo uiCultu ...
- 基于Android的rgb七彩环颜色采集器
代码地址如下:http://www.demodashi.com/demo/11892.html 一.前言. 在大学期间,看到这个rgb灯,蛮好奇的,这么漂亮的颜色采集,并且可以同步到设备rbg灯颜色, ...
- Calculation 2-欧拉函数的运用
Calculation 2 Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64u Submit ...
- ylb:使用sql语句实现添加、删除约束
ylbtech-SQL Server:SQL Server-使用sql语句实现添加.删除约束 --主键约束(Primary Key constraint):要求主键列的数据唯一,并且不允许为空. -- ...
- golang之路:mac下安装go
1.下载dkg包 2.安装 3.vim .bash_profile export GOROOT=/usr/local/goexport GOPATH=$HOME/GoglandProjects/Pro ...
- 2d-Lidar 点云多直线拟合算法
具体步骤: EM+GMM(高斯模糊模型) 点云分割聚类算法的实现. 基于RANSAC单帧lidar数据直线拟合算法实现. 多帧lidar数据实时直线优化算法实现. 算法实现逻辑: Struct lin ...
- linux查看mysql运行日志
在命令行输入下面命令就可以了,如果看到报错的话,直接copy去谷歌就OK: [root@localhost /]# vim /var/log/mysqld.log
- GitHub for window 使用教程
Git是目前最先进的分布式版本控制系统,作为一个程序员,我们需要掌握其用法. 一:下载GitHub for Windows 二:安装GitHub 下载之后点击进行安装过程,安装之后桌面上会有两个 ...
- 让Category支持添加属性与成员变量【转载】
Category是Objective-C中常用的语法特性,通过它可以很方便的为已有的类来添加函数.但是Category不允许为已有的类添加新的属性或者成员变量. 一种常见的办法是通过runti ...
- MIC中offload语法总结
MIC中offload的用法如下: #pragma offload specifier [,specifier...]specifier可以填入的选项为:target 例:taget(mic:0)if ...