Effective Java笔记(12)始终要覆盖 toString

《effective java》第10条:始终要覆盖toString 如果类中没有重写toString方法则调用Object中的toString方法,返回“类型+@+十六进制的hashCode”;如果类中重写了toString方法则调用该类中的toString方法,返回重写后的内容; System.out.println(对象)和System.out.println(对象.toString)返回的内容一致。 1 User类中不重写toString方法 ... 阅读详情

        虽然 Object 提供了 toString 方法的 一个实现,但它返回的字符串通常并不是类的用户所期望看到的 。 它包含类的名称,以及一个“@”符号,接着是散列码的无符号十六进制表示法,例如 PhoneNumber@163b91 。toString 的通用约定指出,被返回的字符串应该是一个“简洁的但信息丰富,并且易于阅读的表达形式” 。 尽管有人认为PhoneNumber@163b91 算得上是简洁和易于阅读了,但是与 707-867-5309 比较起来,它还算不上是信息丰富的 。 toString 约定进一步指出,“建议所有的子类都覆盖这个方法 。”这是一个很好的建议,真的 !

        遵守 toString 约定并不像遵守 equals 和 hashCode 的约定(见第 10 条和第11 条)那么重要,但是,提供好的 toString 实现可以便类用起来更加舒适,使用了这个类的系统也更易于调试 。 当对象被传递给 println 、 printf 、字符串联操作符(+)以及 assert ,或者被调试器打印出来时,toString 方法会被自动调用 。 即使你永远不调用对象的 toString方法,但是其他人也许可能需要 。 例如,带有对象引用的一个组件,在它记录的错误消息中,可能包含该对象的字符串表示法 。 如果你没有覆盖 toString,这条消息可能就毫无用处 。

        在实际应用中,toString 方法应该返回对象中包含的所有 值得关注的信息, 例如上述电话号码例子那样 。 如果对象太大,或者对象中包含的状态信息难以用字符串来表达,这样做就有点不切实际 。 在这种情况下, toString 应该返回一个摘要信息。

        在实现 toString 的时候,必须要做出 一个很重要的决定 :是否在文档中指定返回值的格式 。 对于值类( value class ),比如电话号码类 、矩阵类 ,建议这么做 。 指定格式的好处是,它可以被用作一种标准的 、明确的、适合人阅读的对象表示法 。 这种表示法可以用于输入和输出,以及用在永久适合人类阅读的数据对象中 。 如果你指定了格式,通常最好再提供一个相匹配的静态工厂或者构造器,以便程序员可以很容易地在对象及其字符串表示法之间来回转换 。Java 平台类库中的许多值类都采用了这种做法,包括Biginteger, BigDecimal 和绝大多数的基本类型包装类( boxed primitive class ) 。

        指定 toString 返回值的格式也有不足之处:如果这个类已经被广泛使用,一旦指定格式,就必须始终如一地坚持这种格式 。 程序员将会编写出相应的代码来解析这种字符串表示法、产生字符串表示法,以及把字符串表示法嵌入持久的数据中 。 如果将来的发行版本中改变了这种表示法,就会破坏他们的代码和数据,他们当然会抱怨 。 如果不指定格式,就可以保留灵活性,便于在将来的发行版本中增加信息,或者改进格式 。

        无论是否决定指定格式,都应该在文档中明确地表明你的意图 。 如果要指定格式,则应该严格地这样去做 。 

        无论是否指定格式, 都为 toString 返回值中包含的所有信息提供一种可以通过编程访问之的途径。例如,PhoneNumber 类应该包含针对 area code 、prefix 和line number 的访问方法 。 如果不这么做,就会迫使需要这些信息的程序员不得不自己去解析这些字符串 。除了降低了程序的性能,使得程序员 们去做这些不必要的工作之外,这个解析过程也很容易出错,会导致系统不稳定,如果格式发生变化,还会导致系统崩溃 。 如果没有提供这些访问方法,即使你已经指明了字符串的格式是会变化的,这个字符串格式也成了事实上 的 API 。

        在静态工具类中编写 toString 方法是没有意义的 。 也不要在大多数枚举类型中编写 toString 方法,因为 Java 已经为你提供了非常完美的方法 。 但是,在所有其子类共享通用字符串表示法的抽象类中,一定要编写一个 toString方法 。 例如,大多数集合实现中的 toString 方法都是继承自抽象的集合类 。

        总而言之,要在你编写的每一个可实例化的类中覆盖 Object 的 toString 实现,除非已经在超类中这么做了 。 这样会使类使用起来更加舒适, 也更易于调试 。toString 方法应该以美观的格式返回一个关于对象的简洁、有用的描述 。

Python实现PDB文件预处理 蛋白质结构研究依赖PDB文件存储的三维结构数据,但原始文件常含无关的水分子、离子和非标准残基等干扰信息。本文介绍了一个基于BioPython的Python预处理脚本,可自动清理PDB文件,主要功能包括:1)移除短于阈值的蛋白质链;2)过滤非标准氨基酸;3)可选保留水分子和金属离子。该脚本逻辑清晰,支持批量处理,能显著提升结构比对、分子对接等分析前的数据准备效率,为后续生物信息学研究提供更纯净的结构数据基础。 阅读详情

相关推荐

ESD笔记(三)_常用ESD保护电路优缺点

根据ESD防护器件的TLP I-V特性我们可将ESD器件分为回滞类和非回滞类两种; 回滞类的ESD器件包括NPN三极管、栅极接地 NMOS ( GGNMOS, Gate-grounded NMOS )、可控桂(SCR, siliconcontrolled rectifier)等。 非回滞类的ESD器件包括二极管、二极管串、沟道工作的MOS管、PNP三极管、栅极接电源的PMOS(GDPMOS)等,与回滞类ESD器件相比,其TLP曲线没有负阻区的存在。 常用于ESD防护的器件包括PN结二极管、GGN

weixin_47139649的博客 1万+

java覆盖tostring_覆盖Java类中的toString()方法

可以使用toString()Java中的方法获得对象的字符串表示形式。重写此方法,以便可以返回对象值。演示此过程的程序如下:示例classStudent{privateintrno;privateStringname;publicStudent(intr,Stringn){rno=r;name=n;}publicStringtoString(){returnr...

weixin_39804059的博客 1306

ATM火控电容改造实战:提升速凌无刷电机动力与系统稳定性

在嵌入式系统与电机驱动领域,电源完整性是保障电路稳定运行的核心基础。其核心原理在于通过合理的电容网络设计,为负载提供瞬时大电流并滤除高频噪声,从而维持电压稳定。这项技术的核心价值在于能显著提升系统的动态响应能力与可靠性,避免因电压跌落导致微控制器复位或功率器件过应力。典型的应用场景包括无人机电调、机器人关节驱动以及各类需要快速响应的伺服系统。本文聚焦于水弹发射器ATM火控系统的硬件迭代,通过详解电容的选型、布局与焊接流程,特别是针对速凌五代无刷电机的高启动电流特性,系统性地阐述了如何通过强化电源储能与芯片去

weixin_33868027的博客 556

java学习

在 Java 中,所有类都隐式地继承自类。因此,可以说 Java 中的所有类都是Object类的子类或子类型。Object类是 Java 默认的根类或基类,它提供了一些通用的方法和功能,可以在所有对象上使用。这些方法包括toString()equals()hashCode()等。当你在 Java 中定义一个类时,如果没有显式地指定一个类去继承,那么该类会自动继承Object类。这意味着,你可以在任何类中使用Object类中定义的方法。

weixin_73455978的博客 887

Allegro如何进行四层板板层设计

板层的设计

weixin_42499230的博客 3189

Node-RED系列(二二):使用dashboard搭配echarts制作漂亮的面板

在node-red中dashboard 是一个很常用的模块,其中它有一个chart节点可以用来制作一些图表,比如柱状图,折线图,饼图,但其中的图表并不是很美观,而且可配置项非常的少。 于是就有很多小伙伴找我做一套比较好看的图表面板,在对比了一下几个图表库,我选中了echarts。 不仅美观大方,而且非常容易集成,配置。下面先来看一下我做的效果。这里是直接做了四个折线图,第一个折线图有动态效果,第二个折线图是一个多线条的折线图,第三个折线图是在一个图例显示两个折线图。第二第三都可以用于数据对比。 第四个折线

知无涯 1万+

Java-面向对象基础-覆盖与toString

覆盖(override)是面向对象编程中的一个重要概念,它指的是子类重新定义父类中已经定义的方法的行为。当子类继承了一个父类,并且在子类中定义了与父类中同名、同参数列表的方法时,就发生了方法的覆盖。在Java中,如果子类中定义了一个与父类中同名、同参数列表的方法,那么在使用子类对象调用这个方法时,将会优先调用子类中的方法,而不是父类中的方法。这种覆盖行为允许子类修改或扩展从父类继承而来的方法的行为,使得程序更加灵活和可扩展。

enternal_的博客 1743

RT-DETR算法优化改进:Backbone改进 | HGBlock完美结合PPHGNetV2 GhostConv

GhostConv助力RT-DETR ,HGBlock与PPHGNetV2 GhostConv完美结合

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 2909

【第12条】坚持覆盖toString

始终要覆盖toString 虽然Object提供了 toString方法的一个实现,但它返回的字符串通常并不是类的用户所期望看到的。它包含类的名称,以及一个“@”符号,接着是散列码的无符号十六进制表示法,例如PhoneNumber@163b91。toString的通用约定指出,被返回的字符串应该是一个“简洁的但信息丰富,并且易于阅读的表达形式”。尽管有人认为 PhoneNumber@163b91算得上是简洁和易于阅读了,但是与707-867-5309比较起来,它还算不上是信息丰富的。toString约定进一

kaituozhe_sh的博客 428

28、时间敏感网络中可靠性感知的综合路由与调度

本文针对时间敏感网络(TSN)中现有路由与调度机制主要关注时间触发(TT)流量而忽略其他类型流量效用的问题,提出了一种可靠性感知的综合路由与调度机制。通过将具有不同可靠性和延迟要求的各类流量的联合路由与调度问题形式化为基于优化模理论(OMT)的混合整数规划问题,设计了完整的路由约束与调度约束,并分析了不同类型流量的传输效用,设定了优化目标以提升整体网络性能。实验结果表明,该机制在满足TT流量严格时延与可靠性要求的同时,显著提高了AVB和BE等非关键流量的传输效用,实现了多类型流量的高效协同传输。

hhh00的博客 95

vmvare kali如何配置桥接模式进行上网

注意点:虚拟机可以PING通物理机,但是PING不通其他的网站。经过收集资料,得知由于是校园网连接,所以DHCP只能分配一个授权的IP地址给连接的主机,由于KALI是桥接物理机,物理机已经获得了这个授权的IP,所以导致桥接的虚拟机无法上网。所以不是因为配置的有问题,而是网络的安全设置导致了桥接失败。如果你是使用校园网,可以换个网络试试,使用校园网的时候,可能会遇到桥接失败。

猿小白的博客 1409

在覆盖toString()方法中使用this所发现的有趣的现象

本人以前是用C++写程序的,现在在学习Java,所以,有时候,总想喜欢在类的方法中打印出来方法的名称和类的地址来看看程序的运行流程。我们知道,C++中输出this关键字的信息,就是本次程序中对应的类在内存中的地址,但是在Java中,this的使用就有一些限制。 具体来说就是: 如果一个类,没有重载toString()方法,那么在用System.out.println()输出this

hawanglc的博客 2711

基于MATLAB的井筒多相流模拟

井筒多相流的模拟可以基于不同的数学模型和计算方法。其中,最常用的模型之一是多相流模型,它基于质量守恒、动量守恒和能量守恒等原理,描述了流体在井筒中的流动行为。对于井筒多相流的模拟和分析可以帮助我们理解和优化油气田开发过程中的流体行为,从而提高产量和效率。在本文中,我们将介绍如何使用MATLAB进行井筒多相流的模拟,并提供相应的源代码。需要注意的是,以上示例是一个简化的模拟,仅用于演示如何使用MATLAB进行井筒多相流模拟。实际应用中,我们需要考虑更多的物理过程和参数,并使用更复杂的数值方法和模型进行模拟。

AtdiHtml的博客 706

始终要覆盖 toString 《Effective java》第三章第十二条

学习: Effective java第三章第十二条 始终要覆盖 toString

qq_47129343的博客 1667

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

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

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

《Effective Java》第12条:始终要覆盖 toString

toString的通用约定指出,被返回的字符串应该是一个“简洁的但信息丰富,并且易于阅读的表达形式”。遵守 toString约定并不像遵守equals和hashCode 的约定(见第10条和第 11条)那么重要,但是,提供好的 tostring 实现可以使类用起来更加舒适,使用了这个类的系统也更易于调试。即:对于一些值类,我们有必要将toString以一种格式化的形式输出,如上例的电话号码(707-867-5309),这种方式易于阅读,也易于保存。即:对象的toString方法应该包含对象的所有必要信息。

TD_FAlmK的博客 816

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Java:Effective java学习笔记之 始终要覆盖toString方法

Java 始终要覆盖toString方法始终要覆盖toString方法1、为什么要覆盖toString方法?2、始终要覆盖toString方法 始终要覆盖toString方法 1、为什么要覆盖toString方法? public class Person { protected String name; protected int age; public String getName() { return name; } public void setName(String

JMW1407的博客 577

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

《Effective Java》解读第12条:始终要覆盖toString

覆盖toString方法能显著提升类的可用性,建议所有子类都实现这个方法。默认的Object.toString()仅返回类名和散列码,几乎无实用价值。好的toString应包含关键字段信息,格式清晰且文档化,便于调试和日志记录。实现方式包括手动拼接字符串、String.format()或使用IDE/Lombok等工具生成。注意事项:避免泄露敏感信息,性能敏感场景需优化,静态工具类等特殊情况可不覆盖。

Cosmoshhhyyy的博客 447

Effective Java – Item 12 始终要覆盖 toString

item12 · 始终要覆盖 toString 函数原型 /** * Returns a string representation of the object. In general, the * {@code toString} method returns a string that * "textually represents" this obje...

AlbumenJ的博客 186

《Effective Java》阅读笔记10 始终要覆盖toString

1.为什么要覆盖toString方法? public class Person { protected String name; protected int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public vo

weixin_41563161的博客 744

Effective Java 对于所用对象都通用的方法 10.始终要覆盖toString,玩转toString

虽然java.lamg.object提供了toString()方法的实现,但是它返回的字符串通常不是用户所期望看到的。就是一个地址,没有多大的意义。toString的通用约定指出,返回的字符串应该是一个简洁的,但信息丰富,并且易于阅读的表达形式。所以说对于类一定要覆盖toString方法,以便于获取到想要的信息,而且可以根据自己想要的信息来修改覆盖toString方法。例:import com.go

yancyang的博客 2万+

Effective Java 【对于所有对象都通用的方法】第12条 始终要覆盖toString

始终要覆盖toString 虽然 Object提供了 tostring方法的一个实现,但它返回的字符串通常并不是类的用户所期望看到的。它包含类的名称,以及一个“@”符号,接着是散列码的无符号十六进制表示法,例如 PhoneNumber163b91。 tostring的通用约定指出,被返回的字符串应该是一个“简洁的但信息丰富,并且易于阅读的表达形式”;“建议所有的子类都覆盖这个方法。 原因如下: 1.提供好的toString实现可以使类用起来更加舒适 ,使用了这个类的系统更易于调试。 2. 在实际应用中,to

zhangxiaoxiao9527的博客 200

Effective Java始终要覆盖toString()方法

Object类提供的toString()方法如下: public String toString() { return getClass().getName() + “@” + Integer.toHexString(hashCode()); } 如果我们直接打印一个对象,就会调用这个对象的toString()方法,如果我们没有为该类覆盖toString()方法, 我们可以看出toString()方法,返回的是 “类名@散列值的十六进制”。 toString()方法的通用约定是:返回当前对象“简洁,但信息丰

菜园子丶For丨丶Tomorrow的博客 239

Effective Java -- 始终重写toString

此系列文章为本人对《Effective Java》一书的学习笔记,主要是记录对书中重点内容的理解。既然有缘看到此文,那么希望能对你有所帮助。本文对应原书 第12条 始终要覆盖toString

心之所往 码之所向 294

EffectiveJava学习笔记7:始终要覆盖toString、谨慎覆盖clone

1.始终要覆盖toString 个人理解:toString就是当把某一对象作为字符串输出时会调用这个方法。(比如:printf(xx); "a"+xx;),其实际上都可看成为printf(xx.toString()); "a"+xx.toString(); Object虽然有提供toString,但其输出格式是以下形式的(类名@散列码的无符号16进制) public String to...

沙丁鱼的博客 246

Effective Java笔记第二章对所有对象都通用的方法第三节始终要覆盖toString

Effective Java笔记第二章对所有对象都通用的方法 第三节始终要覆盖toString 1.toString的通用约定指出,被返回的字符串应该是一个"简洁的,但信息丰富并且易于阅读的表达形式",“建议所有的子类都覆盖这个方法”。 2.提供好的toString实现可以使类用起来更加舒适,当对象被传递给println,printf,字符串练操作符(+)以及assert或者被调试器打印出来的时候,toString方法就会被自动调用。 3.在实际应用中,toString方法应该返回对象中包含的所有指的关注的

zh123456_789的博客 166

Effective Java---12 始终重写 toString 方法

前言 虽然 Object 类提供了 toString 方法的实现,但它返回的字符串通常不是使用类的用户想要看到的。 它由类名后跟一个「at」符号(@)和哈希码的无符号十六进制表示组成,例如 PhoneNumber@163b91,这对使用它的人来说实际意义不大。 toString 的通用约定要求,返回的字符串应该是「一个简洁但内容丰富的表示,对人们来说是很容易阅读的」。虽然可以认为 PhoneNumber@163b91 简洁易读,但相比于直接返回字符串: 707-867-5309,高下立判 。 toStrin

weixin_44212383的博客 266
上一篇: Effective Java笔记(11)覆盖 equals 时总要覆盖 hashCode
下一篇: Java 注解使用
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值