《Effective_Java》梳理及个人理解
文章平均质量分 88
提炼我个人关注的点,并加入自己的理解。适合Java工作3年以上的、有一定经验的同学阅读。
洛克Lee
车载App开发,MCU开发
展开
-
十、对象序列化(object serialization)
简单概念序列化:将对象编码成字节流反序列化:从字节流编码中重新构建对象序列化代理模式是重点。它可以帮助我们避免对象序列化的许多缺陷。第74条 谨慎地实现 Serializable 接口一个类实现了Serializable接口后,一旦被发布,就大大降低了“改变这个类的实现”的灵活性。如果使用默认的序列化形式,这个类中私有的和包级私有的实例域都会成为导出API的一部分,打破了封装,不能隐藏实现细节。如果使用默认的序列化形式,并改变了类的内部表示法。用这个类的旧版本序列化一个类,再用新版本反序列化,原创 2021-07-06 19:04:13 · 1609 阅读 · 2 评论 -
九、并发 concurrent
第66条 同步访问共享的可变数据多线程编程,可以充分发挥 多核CPU的性能。保持即时的(基本类型的)变量可见性,使用volatile。非基本类型的使用 AtomicReference。变量互斥修改使用Atomic-系列类型。Java语言规范保证,除了long和double,读或写一个变量是原子的(atomic)即此操作是不可分隔的。但它不能保证一个线程写入的值对于另一个线程将是可见的。Java语言规范中的内存模型(memory model)规定了一个线程所做的变化,何时以及如何变成对其他线程可见的原创 2021-06-24 17:53:12 · 225 阅读 · 0 评论 -
八、异常处理
第57条 只针对异常的情况才使用异常异常应该只用于异常的情况下,它们永远不应该用于控制流。如果类具有 在某种特定状态下,才能够被调用的方法。则最好为之提供一个“状态”测试的方法,以避免去处理异常。如:Iterator的next()方法与hasNext()方法。某种特定的异常状态下,也可以返回一个特殊值,进行处理。称为“可识别的返回值”方法。怎么选择?如果对象将在多线程同步访问的情况下,则应该使用“可识别的返回值”方法。因为在“状态测试”方法和调用之前有可能对象的状态被其他线程修改了。原创 2021-06-21 17:30:18 · 201 阅读 · 0 评论 -
七、通用程序设计
第45条 将局部变量的作用域最小化要使局部变量的作用域最小化,最有力的方法就是在第一次使用它的地方进行声明。如果变量在使用之前很早进行声明,对于阅读代码的人来说,只会分散注意力。看到使用变量的地方,早已忘记当初是怎么声明的了。还需要返回去寻找最初声明的地方。每个局部变量的声明都应该包含一个初始化表达式。如果当前还不能进行有意义的初始化,就应该推迟声明,直到可以初始化为止。循环中提供了特殊的机会来将变量的作用域最小化。for循环允许声明循环变量(loop variable),它们的作用域正好被限定在原创 2021-06-20 19:19:14 · 232 阅读 · 0 评论 -
六、方法相关
第38条 检查参数的有效性在 定义方法 与 构造器时,要进行“有效性检查”与“断言”。assert 默认是不启用的,这个assert真的不知道是干嘛用的。查阅文档与网上资料说的是,在开发与测试时使用,发布时禁用。第39条 必要时进行保护性拷贝如果方法的调用者,客户端是恶意的,或别的程序员没有正确使用类,可能会破坏类的状态与数据。所以,必要时进行保护性拷贝。保护性拷贝涉及到的时机是 对象构造与方法返回两个时机。对象构造:保护性拷贝要在参数有效性检测前进行,并且有效性检查是针对拷贝后的对象,而不是传原创 2021-06-15 15:39:40 · 125 阅读 · 0 评论 -
五、枚举和注解 enum type annotation type
一、枚举暂时跳过。因为Android开发,枚举量级有点重,尽量用常量值二、注解第35条 注解优先于命名模式Java1.5发行前,一般使用命名模式 naming pattern,表示有些程序元素需要通过某种方法进行特殊处理。如,JUnit测试框架原来要求用户一定要用test作为测试方法名称的开头。这种做法有几个缺点:文字拼写容易拼错,且没有任何提示无法确保它们只用于相应的程序元素上没有提供将特殊处理用到的参数值与程序元素关联起来的方法@Retention(RetentionPolicy.RU原创 2021-06-15 08:48:24 · 319 阅读 · 0 评论 -
四、泛型相关
第23条 java1.5及以后请使用泛型,不要再使用原生态类型List<E> E的列表 E是元素类型的形式参数List<String> String是对应于E的实际类型,是一个参数值几个名词:泛型 generic type 具体指泛型类和泛型接口 如:List类型参数 type parameter,也可以说是,参数化类型 parameterized type 如:E形参,String实际值。原生态类型 raw type 如:ListList和List<原创 2021-06-15 08:40:54 · 378 阅读 · 0 评论 -
三、类和接口
第13条 使类和成员的可访问性最小化信息隐藏 或 封装 information hiding Or encapsulation优点:解耦:各模块可以独立开发、测试、优化、使用、理解、修改提高可重用性有利于查找问题点,或可以提升性能的点有利于构建大型系统尽可能地使每个类或成员不被外部访问。四种访问级别:private 类私有default 包级protected 包级+子类public(+interface)公有由上到下是“尽量使用”到“最少使用”的顺序。长度非0的数组总是可变原创 2021-05-30 18:51:01 · 338 阅读 · 0 评论 -
二、对于所有对象都通用的方法
第8条覆盖equals时请遵守通用约定原创 2021-05-17 17:14:24 · 256 阅读 · 2 评论 -
一、创建对象
第一条:考虑使用静态工厂方法替代构造方法静态工厂的优点:有方法名字; 不需要每次创建新对象,有利于对象复用; 与构造方法不同,它们可以返回 其返回类型的任何子类型的对象; 可以根据输入参数的不同返回不同类的对象。如下图,在Services类写完时,Provider的具体实现类还没有。可以向Services注册不同的Provider,提供不同的Service类对象。缺点:没有公共或受保护构造方法,不能扩展出子类。第二条、当构造方法参数过多时使用 Builder 模式:当设计的类,构原创 2021-05-15 20:23:34 · 203 阅读 · 0 评论