effective java 读书笔记

《Effective Java 中文版》读书笔记 本书分为12章共90个条目,涵盖了Java 5.0/6.0/ 7.0/ 8.0/9.0的种种技术要点。与第2版相比,本书删除了“C语言结构的替代”一章,增加了Java 7及之后所引入的新特性: Lambda表达式、Stream、 Optional 类、接口中的默认方法、try-with-resources、@SafeVarargs注解、Module 模块化。数量上从78个条目发展到了90个,不仅增加了12个条目,并对原来的所有资料都进行了全面的修改,删去了一些已经过时的条目。但是,各章之间并没有严格的前后顺 阅读详情

 

第一章 引言

全书78条原则,大致包含了并发,设计模式,多态,类库,异常,序列化等相关知识,从安全,高效,性能,扩展,可读性,这几个方面讲述了 How to use Java efficiently ?

事例源码:点击打开

看完之后觉得自己之前的编码水平太low了,写代码没有章法,没有套路,不易维护,隐藏着很多问题

 

第2章 创建和销毁对象

第1条:考虑用静态工厂方法代替构造器 点击打开链接

第2条:遇到多个构造器参数时要考虑用构建器 点击打开链接

第3条:用私有构造器或者枚举类型强化Singleton属性 点击打开链接

第4条:通过私有构造器强化不可实例化的能力 点击打开链接

第5条:避免创建不必要的对象 点击打开链接

第6条:消除过期的对象引用 点击打开链接

第7条:避免使用终结函数 点击打开链接

 

第3章 对于所有对象都通用的方法 点击打开链接

第8条:改写equals时请遵守通用约定

第9条:改写equals时总要改写hashCode

第10条:始终要改写toString

第11条:谨慎地改写clone

第12条:考虑实现Comparable接口

 

第4章 类和接口 点击打开链接

第13条:使类和成员的可访问性最小化

第14条:在公有类中使用访问方法而非公有域

第15条:使非可变性最小化

第16条:复合优先于继承

第17条:要么为继承而设计,并提供文档说明,要么就禁止继承

第18条:接口优于抽象类

第19条:接口只用于定义类型

第20条:类层次优于标签类

第21条:用函数对象表示策略

第22条:优先考虑静态成员类

 

第5章 泛型 点击打开链接

第23条:请不要在新代码中使用原生态类型

第24条:消除非受检警告

第25条:列表优先于数组

第26条:优先考虑泛型

第27条:优先考虑泛型方法

第28条:利用有限制通配符来提升API的灵活性

第29条:优先考虑类型安全的异构容器

 

第6章 枚举和注解

 https://blog.youkuaiyun.com/CharJay_Lin/article/details/81083799

第30条:用enum代替int常量

第31条:用实例域代替序数

第32条:用EnumSet代替位域

第33条:用EnumMap代替序数索引

第34条:用接口模拟可伸缩的枚举

第35条:注解优先于命名模式

第36条:坚持使用Override注解

第37条:用标记接口定义类型

 

第7章 方法 

https://blog.youkuaiyun.com/CharJay_Lin/article/details/81083771

第38条:检查参数的有效性

第39条:必要时进行保护性拷贝

第40条:谨慎设计方法签名

第41条:慎用重载

第42条:慎用可变参数(varargs)

第43条:返回零长度的数组或者集合,而不是null

第44条:为所有导出的API元素编写文档注释

 

第8章 通用程序设计 

https://blog.youkuaiyun.com/CharJay_Lin/article/details/81428843

第45条:将局部变量的作用域最小化

第46条:for-each循环优先于传统的for循环

第47条:了解和使用类库

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

第49条:原语类型优先于装箱的原语类型

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

第51条:了解字符串连接的性能

第52条:通过接口引用对象

第53条:接口优先于反射机制

第54条:谨慎地使用本地方法

第55条:谨慎地进行优化

第56条:遵守普遍接受的命名惯例

 

第9章 异常

 https://blog.youkuaiyun.com/CharJay_Lin/article/details/81428887

第57条:只针对异常的条件才使用异常

第58条:对可恢复的条件使用受检异常,对编程错误使用运行时异常

第59条:避免不必要地使用受检的异常

第60条:尽量使用标准的异常

第61条:抛出与抽象相对应的异常

第62条:每个方法抛出的所有异常都要有文档

第63条:在细节消息中包含失败-捕获信息

第64条:努力使失败保持原子性

第65条:不要忽略异常

 

第10章 并发 

https://blog.youkuaiyun.com/CharJay_Lin/article/details/81433493

第66条:同步访问共享的可变数据

第67条:避免过多同步

第68条:executor和task优先于线程

第69条:并发工具优先于wait和notify

第70条:线程安全性的文档化

第71条:慎用延迟初始化

第72条:不要依赖于线程调度器

第73条:避免使用线程组

 

第11章 序列化 

https://blog.youkuaiyun.com/CharJay_Lin/article/details/81433499

第74条:谨慎地实现Serializable

第75条:考虑使用自定义的序列化形式

第76条:保护性地编写readObject方法

第77条:对于实例控制,枚举类型优先于readResolve

第78条:考虑用序列化代理代替序列化实例

别急着编译!修复银河麒麟OpenSSH漏洞前,先搞懂ssh、sshd版本与apt仓库的“爱恨情仇” 本文深度解析银河麒麟OpenSSH漏洞(CVE-2023-38408)修复策略,揭示版本差异背后的企业级维护逻辑,提供从APT升级到源码编译的多维度方案评估。特别针对路径隔离方案和离线环境处理给出技术细节,帮助企业制定兼顾安全与稳定的升级决策框架。 阅读详情

相关推荐

【STM32】CubeMx系列教程之移植FreeRTOS

本文详细介绍了在STM32F429上通过CubeMX工具移植FreeRTOS的方法。主要内容包括:1)配置系统时钟源,将TIM1替换SysTick作为时钟基准;2)FreeRTOS的创建与配置,包括任务创建、堆栈大小设置等;3)关键配置参数说明,如堆大小建议设为RAM的50%-70%;4)常用函数如堆栈监控、任务挂起/恢复等。文章提供了从基础配置到深入优化的完整移植指南,适合STM32开发者参考使用。

JackieJin123的博客 788

《Effective Java》读书笔记

以下是本人在阅读《Effective Java》期间记录的笔记,未经整理。有兴趣的可以看看,有问题可以探讨。 第二章 创建和销毁对象 1. 考虑使用静态工厂方法代替构造方法 优点: 静态方法可以命名(见名知意) 单例模式(减少创建对象的开销) 可以返回当前类的子类而不是当前类 根据参数不同返回不同实现类 类不需要存在,可以反射生成(比如数据库的DriverManager) 缺点: 没有公共或受保护构造方法的类不能被子类化??? 程序员很难找到它们 2. 当构造方法参数过多时使用 builder 模式

王谷雨的博客 725

VSCode + Clangd 配置避坑实录:从‘红波浪线’到完美代码提示的完整心路

本文详细记录了VSCode与Clangd配置过程中的常见问题及解决方案,从编译数据库生成到参数调优,帮助C++开发者快速解决代码提示失效、头文件找不到等问题,实现完美代码补全体验。重点介绍了Clangd与LLDB的集成配置及性能优化技巧,适用于Linux和跨平台开发环境。

weixin_28829479的博客 492

effective java

本书的主要包括以下章节: 第1章 引言第2章 创建和销毁对象第1条:考虑用静态工厂方法代替构造器第2条:遇到多个构造器参数时要考虑用构建器第3条:用私有构造器或者枚举类型强化Singleton属性第4条:通过私有构造器强化不可实例化的能力第5条:避免创建不必要的对象第6条:消除过期的对象引用第7条:避免使用终结函数第3章 对于所有对象都通用的方法第8条:改写equals时请遵守通用约定第9条:改...

fanbing1121的专栏 250

PyTorch深度学习实战(25)——从零开始实现Mask R-CNN实例分割

Mask R-CNN 是一种在目标检测任务中引入了语义分割的强大框架,通过在 Faster R-CNN 基础上进行扩展,添加了额外的分支网络,不仅可以准确地检测对象的位置和类别,还可以生成每个实例的精确像素级别的语义分割掩码。其模块化的设计可以轻松地应用于不同的任务和数据集,并且可以通过添加更多的分支进行功能扩展,如实例关键点检测等。

盼小辉丶的博客 1万+

从零到精通:BLDC电机驱动电路详解与设计思路

这套电机驱动电路从核心控制器到反馈采集模块,涉及了BLDC电机驱动的方方面面。每一个模块的设计和选择都需要综合考虑系统需求和实际使用环境。在实际应用中,很多细微的设计改进都会显著影响电机的运行性能。

weixin_43199439的博客 3104

Effective Java 读书笔记

1.考虑用静态工厂方法代替构造器 静态工厂方法与构造器不同的第三大优势在于,他们可以返回原返回类型的任何子类型2.遇到多个构造器参数时要考虑用构建器 3.用私有构造器或者枚举类型强化Singleton属性 单元素的枚举类型已经成为实现Singleton的最佳方法4.通过私有构造器强化不可实例化的能力 5.避免创建不必要的对象 6.消除过期的对象引用(这里可以给个例子) 7.避免使用终结方法final

jthou20121212的博客 378

Python 爬虫实战:亚马逊 + eBay 商品信息跨平台抓取(价格 / 销量 / 评价对比)

亚马逊和 eBay 是全球知名的电商平台,拥有海量的商品信息。对于消费者来说,比较不同平台上的商品价格、销量和用户评价可以帮助他们找到性价比最高的商品。对于商家而言,了解竞争对手的商品信息有助于优化自身的产品策略和定价策略。然而,手动在两个平台上逐一比较商品信息是非常耗时且低效的。因此,开发一个能够自动抓取并对比这两个平台商品信息的爬虫工具具有重要的实际意义。

yansideyucsdn的博客 617

Effective Java读书笔记-6

Effective Java读书笔记-6使可变性最小化复合优先于继承要么设计继承并提供文档说明,要么禁止继承 使可变性最小化 不可变类是指其实例不能被修改的类。每个实例中包含的所有信息都必须在创建该实例的时候就提供,并在对象的整个生命周期(lifetime)内固定不变。不可变的类比可变类更加易于设计、实现和使用。它们不容易出错,且更加安全。为了使类成为不可变,要遵循下面五条规则: 1.不要提供任何会修改对象状态的方法(也称为设值方法)。 2.保证类不会被扩展。 为了防止子类化,一般做法是声明这个类成为fin

weixin_42583701的博客 227

AI应用质量工程实践:从评估到监控的完整体系构建

在软件工程领域,质量保障体系是确保产品稳定可靠的核心机制,涉及度量指标、保障流程和工具链的完整闭环。随着生成式AI应用的快速发展,如何将传统软件工程中的质量门禁思想引入AI领域,成为工程实践的关键挑战。其核心原理在于构建可量化、可监控、可改进的质量评估框架,通过自动化测试、持续监控和反馈优化来管理AI输出的不确定性。这一技术价值在于将AI应用从原型阶段推向产品化,确保输出的一致性、安全性和可靠性。在实际应用场景中,开发者需要从功能性、非功能性、一致性和合规性四个维度构建评估体系,并借助LLM-as-a-Ju

weixin_28728279的博客 294

第11.4节 混合储能系统能量管理

混合储能系统(HESS)的能量管理策略采用分层架构实现多时间尺度优化:调度层(小时级)进行经济优化,协调层(秒级)基于频率分解分配功率,执行层(毫秒级)实现快速跟踪。深度强化学习(DRL)方法通过定义状态空间、动作空间和多目标奖励函数,能有效处理系统不确定性和多目标优化问题。HESS性能评估需综合技术指标(如调节性能Kp值、设备寿命指标)和经济指标(净现值NPV、平准化储能成本LCOS),并遵循"建模-仿真-实验"的闭环流程。

技术工作者 246

Effective Java-目录

这里写自定义目录标题

yunli0的博客 683

在MATLAB和Simulink中设计并仿真一个电动汽车整车动力学模型与控制系统

电动汽车(EV, Electric Vehicle)的动力学建模与控制仿真在车辆开发过程中起着至关重要的作用。通过Simulink进行整车动力学模型的构建和控制策略的验证,可以有效评估车辆性能、优化系统设计并降低开发成本。以下是如何在MATLAB和Simulink中设计并仿真一个电动汽车整车动力学模型与控制系统的详细步骤。通过上述步骤,我们成功设计并实现了基于Simulink的电动汽车整车动力学模型与控制仿真。该系统能够模拟复杂的整车动力学行为,验证控制策略的有效性,并通过优化设计提高车辆的性能和可靠性。

xiaoheshang_123的博客 550

Effective Java读书笔记

Effective Java是一本经典的书, 很实用的Java进阶读物, 提供了各个方面的best practices. 最近终于做完了Effective Java的读书笔记, 发布出来与大家共享. Background 看了历史, 写第一篇笔记居然是2016年的事情了, 中间半途而废搁置了好长时间, 去年生病的时候捡起来看了一些, 今年终于看完了. 做这个笔记的目的主要是为了个人学习, 把一本书...

weixin_34195546的博客 144

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Effective Java读书笔记完结啦

Effective Java是一本经典的书, 很实用的Java进阶读物, 提供了各个方面的best practices. 最近终于做完了Effective Java的读书笔记, 发布出来与大家共享. Background 看了历史, 写第一篇笔记居然是2016年的事情了, 中间半途而废搁置了好长时间, 去年生病的时候捡起来看了一些, 今年终于看完了. 做这个笔记的目的主要是为了个人学习, 把一本...

weixin_30432579的博客 163

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

《Effective Java》读书笔记(已更新至24条)

《Effective Java》读书笔记目录,这篇文章记录了我读这本书的一些想法和验证,带水印刘屠户的java养猪场是我的公众号,考虑后面的源码解析同步到公众号中。 1. 考虑用静态工厂方法代替构造器 第一条,考虑用静态工厂方法代替构造器 优点一:静态工厂可以很好的理解名称 四个构造方法,面对这样的构造方法,三个、四个是可以接受的,那如果是七个八个甚至是十几个呢?这个时候有一个好的...

Joseph_Geeker的博客 1470

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

《Effective Java》读书笔记,移动安全入门

equals()方法实现了等价关系。 自反性。对于任何非null的引用值x,x.equals(x)必须返回true.(对象必须等于其自身) 对称性。对于任何非null的引用值x和y,当且仅当y.equals(x)返回true时,x.equals(y)必须返回true。(警惕子类父类不同的equals实现时) 传递性。对于任何非null的引用只x、y和z,如果x.equals(y)返回true,并且y.equals(z)也返回true,那么x.equeals(z)也必须返回true。(优先使用组合

m0_66264938的博客 224

Effective Java读书笔记(1)—— 创建和销毁对象

很久以前买的一本《Effective Java》,最近开始读啦!从第二章开始看(第一章是引言),每一章都有若干条建议,翻了一下感觉对日常编码有很强的指导意义呀,勤劳的我决定写个读书笔记记录一下????。 第一条:考虑用静态工厂方法代替构造器 说到静态工厂方法,书里给的例子是包装类型,也就是平时常会用到的Integer.valueOf(),Integer.parseInt()想必也算,返回的都是Int...

Aviato 280

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

前言 以前曾经做ERP时,总是遇到尾差尾数的问题。比如:库存一箱苹果10元钱,假如一共3个苹果。拿走两个还剩多少钱。好了,言归正传,回到今天的读书笔记,精度问题。 第47条了解和使用类库 第48条如果需要精确的答案避免使用double和float 第49条基本类型优先于装箱基本类型

haibo_bear的博客 368

Effective Java读书笔记一

Effective Java 读书笔记~~~ package com.lcj;public class Main {/** * #考虑使用静态工厂方法来替换构造器 * 优点 * 1,每个对象都有名字。 * 2,不必每次都 new 出一个对象。 * 3,多态的方式存在,返回的都是对象的子类。 * 缺点 * 1,类如果存在公有或则保护的构造器,就不能被子类化了(对象注册器中的构造器私有需

陨落烟雨的博客 474

【读书笔记】《Effective Java》第二章 第1条:创建和销毁对象

一、前言 《Effective Java》读书笔记系列 二、介绍 通常情况下客户端想要获取一个类A的实例,最传统的方式就是让A提供一个public的构造函数。实际上除此之外还有一种方式,那就是提供一个public的静态工厂方法 三、举例 以Integer为例子,Integer里面除了提供构造函数外,还提供了对应的静态工厂方法: public final class Integer extends Number implements Comparable<Integer> { //构造函数1

qq_38872414的博客 283

Effective java读书笔记

Effective java读书笔记 这周刚刚读完了Effective java这本书,总体感觉这本书写得非常地不错,是一本总结性比较强,比较全面的书,书中罗列了57条建议,但这些建议不是万能的,在有些条件下适合,在有些条件下不适合,它只代表了大部分程序设计的行为,我们只有学会这些基本的原则和建议,才能打破这些规则,写出更符合实际场景下的代码。从书中总结的详细程度可以看出,作者是真的花心思在写这

tiandesheng111的专栏 561
上一篇: 【effective java】7.避免使用终结方法
下一篇: spring源码分析-spring大纲
左耳听风
博客等级 码龄12年 325粉丝 100原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值