《Effective Java 2nd》第8章 通用程序设计
第45条 将局部变量的作用域最小化
for循环优先于while循环
第46条 for-each循环优先于传统的for循环
for-each循环会隐藏迭代器或者索引变量,可避免出错。
无法使用for-each的情况:
1)过滤。遍历集合时,需要删除指定的元素。需要Iterator的remove方法。
2)转换。遍历集合时,替代部分值。
3)平行迭代。同时遍历多个集合。比如同时遍历集合A、B,依次比较各个元素。
第47条 了解和使用类库
每个程序员都应该熟悉java.lang、java.tuil,某些java.io包中的内容。
同时,CollectionFramework和java.util.concurrent包也应该熟悉。
第48条 如果需要精确的答案,避免使用float和double
使用BigDecimal。
第49条 基本类型优先于装箱基本类型
基本类型优先于装箱基本类型,如果使用装箱基本类型时,要特别小心。
基本类型和装箱基本类型之间的区别:
1)基本类型只有值,而装箱基本类型具有与值不同的同一性(指引用)
基本类型==比较是比较值。
装箱基本类型==比较的是引用,equals才是比较的值。
(对装箱基本类型使用==基本都是错误的,这点非常重要,因为比较的是引用!)
2)基本类型只有功能值,而装备基本类型有非功能值:null
3)基本类型通常比装箱基本类型更省时间。
当操作中混合使用基本类型和装箱基本类型时,装箱基本类型会进行自动拆箱。
如果为null,拆箱时将抛出NullPointerException。
什么使用应该使用装箱基本类型
1)作为集合中的元素、键值等
2)反射方法调用
第50条 如果其他类型更适合,尽量避免使用字符串
第51条 当心字符串连接的性能
不要使用“+”进行多个字符串的拼接。
1)使用“+”
为连接n个字符串而重复地使用字符串连接操作符,需要n的平方级(n^2)的时间。
由于String的不可变,当两个字符串拼接时,它们的内容都要被拷贝。
2)使用StringBuilder
为连接n个字符串而重复地使用字符串连接操作符,时间复杂度为O(n)
第52条 通过接口引用对象
如何有合适的接口,应该使用接口声明。
好处是:程序会更加灵活。
举例:List<XXX> list = new ArrayList<XXX>();如果list频繁增加删除数据,直接将ArrayList改为LinkedList就可以。
不存在合适的接口时,可以用类来引用对象。
1)值类,因值类很少用多个实现编写,通常是final的。如String、BigInteger。
2)对象属于某个框架,框架的基本类型是类,而不是接口。这种情况,应该用基类来引用对象,而不是实现类。如java.util.TimerTask
3)类实现了接口,但是提供了接口中不存在的额外方法。如LinkedhashMap。且程序依赖于这些额外方法,则只能使用这个类来引用。
第53条 接口优先于反射机制
本条标题并不能正确反映所将的内容。
接口优先于反射机制:如果程序必须与编译时未知的类一起工作,如有可能,仅仅用反射进行实例化,访问对象则使用编译时已知的某接口或超类。
内容讲了使用反射的代价
1)丧失了编译时类型检查的好处,包括异常检查。
2)反射代码冗长
3)反射比普通方法慢。
第54条 谨慎地使用本地方法
第55条 谨慎地进行优化
1)不要因性能牺牲合理的程序结构。首先要努力编写好的程序而不是快的程序。
2)在设计系统时,特别是设计API、协议、永久数据格式的时候,考虑性能因素。
3)如果不够快,找出问题根源,进行优化。
第56条 遵守普遍接受的命名惯例
命名惯例:字面惯例和语法惯例
字面惯例
1)包:com.google.inject
2) 方法或域:HttpServlet
3)常量:字面大写,用下划线分隔
4)类型参数。
T表示任意类型。E表示集合元素类型。K、V表示键值类型。X表示异常。
语法惯例
1)接口:able结尾表能力
2)特有的方法命名。
转换对象类型,toType。比如toString,toArray
返回试图,asType。比如asList
返回与调用对象同值的基本类型,typeValue。比如intValue
静态工厂常用名称:valueOf、of、getInstance、newInstance、getType、newType
《Effective Java 2nd》第8章 通用程序设计的更多相关文章
- 《Effective Java》学习笔记 —— 通用程序设计
本章主要讨论局部变量.控制结构.类库.反射.本地方法的用法及代码优化和命名惯例. 第45条 将局部变量的作用域最小化 * 在第一次使用的它的地方声明局部变量(就近原则). * 几乎每个局部变量的声明都 ...
- Effective Java 读书笔记之七 通用程序设计
一.将局部变量的作用域最小化 1.在第一次使用变量的地方声明 2.几乎每个变量的声明都应该包含一个初始化表达式:try-catch语句是一个例外 3.使方法小而集中是一个好的策略 二.for-each ...
- Effective Java 学习笔记----第7章 通用程序设计
第7章 通用程序设计 第29条 将局部变量的作用域最小化 使一个局部变量的作用域最小化,最有力的技术室在第一次使用它的地方声明. 第30条 了解和使用库 效率提高.如果你不知道库 ...
- EFFECTIVE JAVA 第十一章 系列化
EFFECTIVE JAVA 第十一章 系列化(将一个对象编码成一个字节流) 74.谨慎地实现Serializable接口 *实现Serializable接口付出的代价就是大大降低了“改变这个类 ...
- effective java 第2章-创建和销毁对象 读书笔记
背景 去年就把这本javaer必读书--effective java中文版第二版 读完了,第一遍感觉比较肤浅,今年打算开始第二遍,顺便做一下笔记,后续会持续更新. 1.考虑用静态工厂方法替代构造器 优 ...
- 《Effective Java》第8章 通用程序设计
第47条:了解和使用类库 Top 100 Java Libraries on Github 2016 Library Number of Projects Type % of projects jun ...
- [Effective Java 读书笔记] 第8章 通用程序设计
本章主要讲了以下几条基本的JAVA编程原则: 1.将局部变量的作用域控制在最小,在使用时才定义 2.for-each优于for循环 有三个例外(1,2点主旨就是,for each只能用于读取,不能用于 ...
- [Effective Java]第三章 对所有对象都通用的方法
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- 对于所有对象都通用方法的解读(Effective Java 第三章)
这篇博文主要介绍覆盖Object中的方法要注意的事项以及Comparable.compareTo()方法. 一.谨慎覆盖equals()方法 其实平时很少要用到覆盖equals方法的情况,没有什么特殊 ...
随机推荐
- java+socket 简易聊天工具
1.服务器端程序 package com.test3; import java.io.*; import java.net.*; import java.awt.*; import java.awt. ...
- android基础---->发送和接收短信
收发短信应该是每个手机最基本的功能之一了,即使是许多年前的老手机也都会具备这项功能,而Android 作为出色的智能手机操作系统,自然也少不了在这方面的支持.今天我们开始自己创建一个简单的发送和接收短 ...
- 浅析HTTPS与SSL原理
版权声明:本文由盛旷 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/134 来源:腾云阁 https://www.qclo ...
- AOP学习总结
参考:什么是AOP? OOP引入封装.继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合.当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力.也就是说,OOP允许你定义从 ...
- npm安装出错的时候,如何使用国内的镜像!--解决办法
在前端开发领域,Node已经很普遍了,使用Node就会使用到一些包.所以常用的 npm 就会经常使用得到,但是在使用 npm 安装一些包的过程中,会发现安装的速度会很慢,而且很多时候直接安装不了. 百 ...
- flex弹性布局属性详解!
详细看下flex弹性布局具体属性: flex容器属性详解:flex-direction:row/column:(横排/竖排) 决定元素的排列方向:flex-wrap:nowrap/wrap/wrap- ...
- oracle之用户名密码包含特殊字符时候怎么使用sqlplus登录
oracle有时候用户密码包含一些特殊字符直接登录会报错,需要使用以下方式登录sqlplus sqlplus 'username/"password"' PS:整体使用单引号括起来 ...
- Typed Arrays in javascripts
Typed Arrays(类型数组)这个概念,可能对很多人来说非常陌生,那么它是什么,又有什么用途呢? 之前的问题 Web应用程序变得越来越强大,例如新增了音视频处理.WebSocket等多个功能特性 ...
- CMDB经验分享之 – 剖析CMDB的设计过程
作为IT管理的核心,CMDB逐渐成为系统管理项目实施的热点.在很多的案例中,由于忽视了CMDB的因素,ITIL的深入应用受到了极大的挑战.同时,由于CMDB是IT管理信息的集中,CMDB也是一个重要的 ...
- 洛谷P2024 食物链 [NOI2001] 并查集
正解:并查集 解题报告: 传送门(咕了! 其实没有很难(虽然我是交了三发才过的QAQ 但是一来好久没打并查集了恢复一下智力 二来看着智推里唯一一个蓝就很不爽(,,,虽然做了这题之后又补上了个蓝题QAQ ...