Effective Java 笔记(三)

Windows环境下DataEase一站式安装指南(含WSL2+Docker配置) 本文详细介绍了在Windows环境下通过WSL2和Docker快速部署DataEase的完整教程。从WSL2配置、Docker环境搭建到DataEase离线安装,逐步指导用户完成一站式部署,特别适合需要快速搭建数据分析平台的开发者。教程包含常见问题解决方案和性能优化技巧,帮助用户高效使用这款国产开源数据可视化工具。 阅读详情

NO.7 在改写equals方法时请遵守通用约定
下列情况是不需要改写equals方法的:
1。同一个类的不同实例本质上是唯一的,就是个实例都有自己的本体(Identify)。
2。不关心该类是否提供了逻辑相等的功能。
3。父类已经改写过equals方法,对于子类来说,继承过来的equals方法已经是最合适的了。
4。一个类是私有的或者是包可见的,且确定它的equals方法不会被调用。
 
对于需要改写equals方法的时候,应该遵守如下约定:
1。自反性,即x.equals(x)为true.
2。对称性,即当且仅当x.equals(y)为true时y.equals(x)也一定为true。
3。传递性,即对任意的x,y,z,如果x.equals(y)为true,并且y.equals(z)也为true,那么x.equals(z)也必须为true.
4。一致性,即对于任意的x,y,如果x,y都没有被修改的话,那么多次调用x.equals(y)要么一致地返回ture,要么一致地返回false.
5。对于非空的引用x,x.equals(null)一定要返回false.
 
改写equals方法时的建议:
1。用==操作符检查实参是否为指向对象的同一个引用。
2。使用instanceOf检查实参是否是正确的类型。
3。在2的基础上,把实参转换成正确的类型。
4。检查实参的域与当前对象的域值是否相等。
5。编写完equals方法后,检查是否满足等价关系。
例如:
  1. public boolean equals(Object o)
  2. {
  3.        if(o== this) return true;
  4.        if(!(o instanceof xxxx) return false;
  5.        xxx in = (xxx)o;
  6.        return ……..
  7. }
改写equals方法的告诫:
1、不要企图让equals方法做太多事。
2、不要使equals依赖不可靠的资源,否则会违背一致性。
3、不要将equals中的对象装换为其他的类型。
4、要注意的时候不要提供这样的方法public boolean equals(MyClass o)这样是重载并不是覆盖Object的equals方法。
总结:不用重写equals方法就尽量不要去找麻烦,确实需要改写equals方法时,遵守通用约定,因为对象会在程序中不停的传递,所以可能会导致程序运行不正常,甚至崩溃而很难找到程序崩溃的原因。总之,还是遵守约定吧!

NO.8 改写equals方法时必须覆盖hashCode方法
       这点必须切忌,不然在你和hash-based集合打交道的时候,错误就会出现了。关键问题在于一定要满足相等的对象必须要有相等的hashCode。如 果你在PhoneNumber类中覆盖了equals方法,但是没有覆盖hashCode方法,那么当你做如下操作的时候就会出现问题了。
  1. Map m = new HashMap();
  2. m.put(new PhoneNumber(408,863,3334),”ming”)
当 你调用m.get(new PhoneNumber(408,863,3334))的时候你希望得到ming但是你却得到了null,为什么呢因为在整个过程中有两个 PhoneNumber的实例,一个是put一个是get,但是他们两个逻辑相等的实例却得到不同的hashCode那么怎么可以取得以前存入的ming 呢。


NO.9 总是要改写toString()方法
        在Object的toString方法返回的形式是Class的类型加上@加上16进制的hashcode,非常难以理解。最好在自己的类中提供toString方法更好的表述实例的信息,不然别人怎么看得明白呢。
        在实际应用中,toString方法应该返回对象中包含的所有令人感兴趣的信息。同时,最好在程序中提供一个相匹配的构造函数或者静态工厂方法,便于程序员在对象和它的字符串表示之间进行来回转换。
       在实现toString方法的时候,必须要做出是否在文档中指定返回值的格式的决定。指定格式可以被用来做为一种标准的,无二意性的表达形式,但这样也会使字符串的表示嵌入到永久数据中,如果以后改变了表达形式,则会影响到系统的代码和数据。不管你是否决定指定格式,都应该在代码中清晰的表明自己的意图。可在所在的类中为toString返回值中所包含的信息提供一种编程访问途径,用来获取toString方法返回字符串中的信息,避免程序员自己去解析字符串而导致的错误。


NO.10 谨慎地改写clone(clone方法详解请参见 java clone方法使用详解)
      一个对象要想被Clone,那么要实现Clone()接口,这个接口没有定义任何的方法,但是如果你不实现这个接口的话,调用clone方法的 时候会出现CloneNotSupportedException,这就是作者叫做mixin的接口类型。通常clone()方法可以这样覆盖
 
但是当你要clone的类里面含有可修改的引用字段的时候,那么你一定要把整个类的蓝图进行复制,如果对你clone得到的对象进行修改的时候还会影响到原来的实例,那么这是不可取的。所以应该这样clone()

其中elements是stack类中可修改的引用字段,注意如果elements是final的话我们就无能为力了,因为不能给他重新赋值了.其实如果不是必须的话,根本就不用它最好。
      clone方法如果实现得不当会给系统带来隐藏的bug,如果非要使用类似的功能最好的办法是提供某些其他的途径(拷贝构造函数或者提供一个静态工厂方法来替代构造函数)来替代对象的拷贝,或者干脆不提供这样的能力。
      Cloneable有很多问题,所以安全的说,其他的接口不应该扩展(extend)这个接口,并且为了继承而设计的类也不应该实现(implement)这个接口。


NO.11 考虑实现Comparable接口
      compareTo方法是java.lang.Comparable接口中的唯一方法,它允许进行简单的相等比较,也允许执行顺序比较,一个类实现了comparable接口就表明他的实例具有内置的排序关系。Java平台库中所有的值类都实现了Comparable。将当前对象与指定对象进行顺序比较的时,返回负整数,0或者正整数(<、=、>),如果指定对象的类型无法进行比较,则抛出ClassCastException或者NullPointException异常,compareTo方法应遵守如下限制条件:自反性、对称性、传递性和非空性的限制条件。在实现数值比较的compareTo方法时还要防止值域溢出的情况。
做cellchat画图时自环的角度颠倒,如何解决? 🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。 阅读详情

相关推荐

Frida三层次钩子快速逆向VMP+OLLVM加固APK

VMP(虚拟机保护)和OLLVM(控制流平坦化)是Android应用常见的双重混淆技术,其核心原理是将Java逻辑虚拟化、Native代码控制流打散,从而阻断传统静态分析与简单Hook。但任何混淆都必须在CPU上执行,因此必然暴露JNI注册行为、ABI参数传递规律及系统调用痕迹。基于此,Frida可通过跨层联动——从JNI_OnLoad捕获Native库加载、在VMP解释器入口截获字节码上下文、于关键系统调用(如read/gettimeofday)反向追踪数据流——构建可观测、可复现的动态分析链。该方法无需

weixin_30888413的博客 1001

《Effective Java》读书笔记三

一、明确接口的核心作用定义类型:接口的主要目的是为了定义一种特定的行为规范和类型标识。它描述了一组方法签名,任何实现该接口的类都必须提供这些方法的具体实现。通过接口,我们可以以一种统一的方式来处理不同的实现类,而无需关心具体的实现细节。类型标识的重要性:接口作为一种类型,可以在代码中用于变量声明、方法参数和返回值类型等。这使得代码更加灵活和可扩展,因为可以在运行时根据实际情况传入不同的实现类,而无需修改调用代码。二、避免不恰当的使用不要在接口中定义常量以外的变量:接口不应该被用作存储数据的地方。

qq_41831136的博客 801

Workbuddy+DeepSeek V4傻瓜流配置全指南:API接入、模型切换与Agent实战

AI编程助手的核心价值不在于模型本身,而在于如何稳定、安全、低门槛地调用其能力。Agent作为智能体范式,依赖可靠的运行时环境与标准化API通信;DeepSeek V4系列凭借高吞吐、低延迟和强工具调用支持,成为当前生产级Agent的理想引擎。Workbuddy则通过本地配置管理、环境变量注入与UTF-8无BOM容错等工程设计,将复杂部署简化为可复现、可版本化、可团队协同的实践流程。本文聚焦API接入路径下的真实卡点——从Key获取验证、models.json字段语义到沙箱权限控制,覆盖开发者在Window

weixin_33702545的博客 2353

Effective Java笔记(三)

Effective Java笔记(三)5、枚举和注解34、用enum代替int常量35、用实例域代替序数36、用EnumSet代替位域37、用EnumMap代替索引38、用接口模拟可扩展的枚举39、注解模式优先于命名模式40、坚持使用Override注解41、用标记接口定义类型6、Lambda和Stream42、Lambda优先于匿名类43、方法引用优先于Lambda44、检查使用标准的函数接口45、谨慎使用Stream46、优先选择Stream中无副作用的函数47、Stream要优先用Collection

yyn次元的专栏 139

✨使用 vLLM + Docker 部署 Qwen3-Embedding-8B 并实现高效文本向量生成(附 `curl` 测试)

本文介绍了如何使用 vLLM 和 Docker 部署 Qwen3-Embedding-8B 嵌入模型服务,并通过标准 OpenAI 兼容接口进行调用和结果解析。如果你在部署中遇到任何问题,欢迎留言讨论!

用大模型重构生活:猫奴程序员的AI智能日常记录 6236

Unity引擎开发:复杂动作系统_动作捕捉数据的应用与整合

通过以上步骤,我们可以在Unity中有效地应用和整合动作捕捉数据,以实现更加真实和流畅的动画效果。从导入文件格式的选择,到预处理和优化,再到实时应用和调试验证,每一步都至关重要。希望本文能帮助你在Unity项目中更好地利用动作捕捉数据,提升动画质量和性能。

chenlz2007的博客 957

Effective Java学习笔记三

四十七.了解和使用类库 private static final Random rnd = new Random(); n是一个比较小的2的乘方,经过一段相当短的周期之后,它产生的随机数序列将会重复 如果n不是2的乘法,那么平均起来,有些数会比其他的数出现得更为频繁 但是这些缺点在Random.nextInt(int)中全部被解决了,你并不需要了解细节。 使用标准类库的好处是,它们的性能

purevegetable 890

【国密】基于SM2的协同签名与协同解密方案

两方协同签名指客户端与服务端协同完成签名、验签操作,具体实现方案参考了信工所专利[3]。在业务应用中,两方或多方的协同签名一般采用门限签名方案可以用来构造。门限密码算法在多方协作的相关场景中应用十分广泛,可以实现数据联合授权、认证、密钥安全恢复、密钥安全交换等需求,在诸多分布式多方计算协议中均可见其身影。在上述两方协同签名方案中,最巧妙的地方在于签名值s分量的构造,通过一些列数学变换,得以恢复。以下从两方协同签名方案介绍入手,介绍门限密码在协同签名中的应用。解决上述问题的关键在于门限密码算法的巧妙构造。

听雨草堂 8387

《Effective Java》读书笔记(三)

第三条:用私有构造器或者枚举类型强化Singleton属性 Singleton指仅仅被实例一次的类,它可以控制实例个数节省系统资源,当要求系统中类对象只允许一个实例对象,那么Singleton是一个好的选择. 在《Effective Java》中,给了我们三个方式来实现Singleton,Java1.5版本之前的两个私有构造器的方法,以及Java1.5版本后的枚举类型方法。 1.通过静态引用常...

weixin_37138915的博客 225

图机器学习(7)——图神经网络 (Graph Neural Network, GNN)

图神经网络 (Graph Neural Network, GNN) 是一类专门处理图结构数据的深度学习方法。这类方法也被称为几何深度学习 (geometric deep learning),在社交网络分析、计算机图形学等众多领域正受到日益广泛的关注。在本节中,我们介绍了 GNN 的核心原理,将卷积等经典深度学习范式拓展至非欧几里得图空间,实现了局部结构与全局特征的层次化提取。

盼小辉丶的博客 1万+

手把手教你用LabelImg打造专属YOLO数据集:从标注到训练全攻略!

YOLO(You Only Look Once)是一种快速、高效的目标检测算法。它使用一种简洁的.txt文件格式来保存每张图片中的标注信息,适合构建自定义目标检测数据集。🔹 图像文件.jpg.png等;每张图片将对应一个同名的标签文件(.txtdog.jpg对应dog.txt;图像在训练前通常会被缩放成统一尺寸,例如 YOLOv3 默认输入为416x416。🔹 标签文件(.txt)是一个纯文本文件;每一行表示一个标注目标;字段说明类别编号,从0开始,例如:狗是0,猫是1x_center。

FJN110的博客 2464

Effective Java读书笔记三

Item 3:用private的构造函数或者enum类型来增强singleton模式先说一个singleton模式的缺点:使用singleton模式会让依赖于它的代码难于测试,因为在测试的时候我们无法用创建一个mock来隔离singletong对象。除非singleton类实现了一个interface,而我们的代码依赖于这个interface。所以在日常工作中,如果需要使用singleton模式的话,最好在它和singleton类之间做一个隔离,好让我们在测试的时候创建mock隔离它。在Java 5.0之前

netHibernate的专栏 1559

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

effective java读书笔记三

第5条:消除过期的对象引用 考虑下面的代码:    // Can you spot the "memory leak"? public class Stack { private Object[] elements; private int size = 0; public Stack(int initialCapacity) {

Reid的专栏 834

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【effective Java读书笔记】方法(三)

《第42条到第43条》方法篇的完结篇。(考虑到文档注释作为一个单章,所以以后再写)

haibo_bear的博客 307

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Effective Java 学习笔记(三)

【第3条:用私有够在其或者枚举类型强化Singleton属性】 其实《effective java》这一节讲其实就是单例模式。书中的例子提到饿汉式和枚举单例。 那么就出现三种单例模式:饿汉式、懒汉式、枚举。 关于单例模式的应用场景可以看下这篇文章:http://blog.youkuaiyun.com/tanyujing/article/details/14160941 饿汉式 是否 Lazy 初

upxiaofeng的专栏 573

Effective Java读书笔记(三)

Effective Java读书笔记(三)创建和销毁对象用私用构造器或者枚举类型强化Singleton属性三级目录 创建和销毁对象 1.何时以及如何创建对象? 2.何时以及如何避免创建对象? 3.如何确保它们能够适时地销毁? 4.如何管理对象销毁之前必须进行的各种清理动作? 用私用构造器或者枚举类型强化Singleton属性 Singleton是指仅仅被实例化一次的类。 Singleton通常被用来代表一个无状态的对象,如函数,或者那些本质上唯一的系统组件。使类成文Singleton会使它的客户端测试变得十

weixin_45407666的博客 238

Effective java笔记(三),类与接口

类与接口是Java语言的核心,设计出更加有用、健壮和灵活的类与接口很重要。 13、使类和成员的可访问性最小化 设计良好的模块会隐藏起所有的实现细节,仅使用API与其他模块进行通信。这个概念称为信息隐藏或封装,是软件设计的基本原则之一。信息隐藏可以是实现系统各模块的解耦,以使这些模块可以独立的开发、测试、优化。信息隐藏还提高了软件的可重用性,降低了构建大型系统的风险。 java中实体的可访...

dianbinzi0928的博客 264

《Effective Java》阅读笔记(三)

最近在看《Effective Java》这本书,顺便就记录一些笔记,记录一下书中的一些知识点以及对知识点的总结。一般情况会记录所有的知识点,但是知识点太过简单或者无归纳点总结的就不做详细记录。本片计划写第七、八、九章 七方法 快捷键 Markdown及扩展 表格 定义列表 代码块 脚注 目录 数学公式 UML 图 离线写博客 浏览器兼容 七、方法 本Markdown编辑器

lsmfeixiang的专栏 965

Effective Java 读书笔记(三)

前言: 又来更新了,每天点儿时间来更新两个小item,其实本来可以更新三个的,但item07有些地方自己不是蛮熟悉嘛,顺带着需要花点时间看看。这里先更新item05&item06 Item05:Prefer dependency injection to hardwiring resources 优先考虑依赖注入来引用资源 在实际项目中,有许多类会依赖一个或者多个底层的资源。例子:拼写检查器需要依赖词典,因此有几种可以将其实现的方法。 1、将类实现为静态工具类 public class SpellC

awake_lqh的博客 188

Effective Java学习笔记(三)

第2章      所有对象通用的方法(Methods common to all objects)1           重载equals时遵守通常的合约(Obey general contract when override equals)不需要重载equals的情况:1)  类的每个实例本来就是唯一的。采用Object的equals就可以了。2)  不在意类是否提供一个逻辑相等的测试。3) 

成富的专栏 1698

Effective Java 学习笔记三 创建和销毁对象

Java作为一种面向对象的编程语言,从JVM中底层的内层分配,垃圾回收到编译运行期间对象的构造都有着很多的优化,诸如单例模式,工厂类,枚举,常量池,防止内存泄漏等 一.对象的创建 1.使用构造器 对于每一个类,JVM都会默认生成一个无参的构造器,如果有构造函数被声明,那么JVM将不再自动创建无参构造器,如果仍然想调用无参构造器,就需要声明一个无参的构造函数 /** * Constru...

tj666666的博客 335

effective Java 学习笔记(三)

  第三条      通过私有构造函数强化不可实例化的能力只包含静态方法和静态域的类,可以把操作在原语类型的值或者数组类型上的相关方法组织起来,如java.lang.Math或者java.util.Arrays,也可以把操作在实现特定接口的对象上的方法组织起来,如java.util.Collections。我们还可以利用这种类把操作在final类上的方法组织起来,以取代扩展该类的做法。

freedawn的专栏 644
上一篇: eclipse快捷键大全
下一篇: java clone方法使用详解
ilibaba
博客等级 码龄18年 516粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值