iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎么优雅地打印一个Java对象
  • 666
分享到

怎么优雅地打印一个Java对象

2023-06-16 15:06:12 666人浏览 独家记忆
摘要

本文小编为大家详细介绍“怎么优雅地打印一个Java对象”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么优雅地打印一个Java对象”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。提问者定义了这样一个类:publi

本文小编为大家详细介绍“怎么优雅地打印一个Java对象”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么优雅地打印一个Java对象”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

提问者定义了这样一个类:

public class Cmower {     private String name;      public Cmower(String name) {         this.name = name;     }      public String getName() {         return name;     }      public void setName(String name) {         this.name = name;     } }

然后创建了一个该类的对象,并尝试打印它:

Cmower cmower = new Cmower("沉默王二"); System.out.println(cmower);

但是输出的结果并不是他想要的:

com.cmower.java_demo.stackoverflow.printObject.Cmower@355da254

除此之外,他在打印数组的时候也出现了相似的问题:

Cmower [] cmowers = {new Cmower("沉默王二"), new Cmower("沉默王三")}; System.out.println(cmowers);

输出结果为:

[Lcom.cmower.java_demo.stackoverflow.printObject.Cmower;@4dc63996

Cmower@355da254 和 [LCmower;@4dc63996 这样的输出结果代表着什么意思呢?怎么样才能把 Cmower 类的 name  打印出来呢?以及如何打印一个对象的列表(数组或者集合)呢?

如果大家也被这样的问题困扰过,或者正在被困扰,就请随我来,咱们肩并肩手拉手一起梳理一下这个问题,并找出优秀答案。Duang、Duang、Duang,打怪进阶喽!

01、究竟发生了什么?

所有的 Java 对象都默认附带了一个 toString() 的方法,当我们尝试打印这个对象的时候,该方法就会被调用。

System.out.println(object);  // 调用 object.toString()

toString() 方法由 Object 类(所有 Java 对象的超类)定义,该方法会返回一个看起来晦涩难懂的字符串

1)Class 名,由包名和类名组成,比如 com.Cmower;

2)@ 连接符;

3)十六进制的哈希码。

来看一下该方法的源码

public String toString() {     return getClass().getName() + "@" + Integer.toHexString(hashCode()); }

数组和普通的 Java 对象类似,只有一点点不同——追踪 Class 类的 getName()方法就可以印证这一点。

If this class object represents a class of arrays, then the internal fORM of  the name consists of the name of the element type preceded by one or more '['  characters representing the depth of the array nesting.

大致的意思就是,如果是一个数组的话,Class  名的前面会有一个或者多个英文中括号“[”,表示数组的维度(一维数组为一个“[”,二维数组为两个“[”),然后再紧跟一个元素的类型首字母。

怎么优雅地打印一个Java对象

这就是为什么对象数组的前缀是“[L”的原因。是不是有一种恍然大悟的感觉?

02、自定义输出

如果想在打印的时候输出自己预期的结果,就必须在自定义类中重写 toString() 方法,来看例子。

public class Cmower {     private String name;     // 省略构造方法和 getter/setter      @Override     public String toString() {         return name;     } }

当我们再次打印 Cmower 对象时,输出结果就不再是 com.Cmower@355da254 了。

沉默王二

但是这样的结果并不会令我们满意,它有些突兀,没法表示对象的类型。更优雅的做法是这样的:

public class Cmower {     private String name;     // 省略构造方法和 getter/setter      @Override     public String toString() {         return getClass().getSimpleName() + "[name=" + name + "]";     } }

再次打印 Cmower 对象,输出结果为:

Cmower[name=沉默王二]

这样的形式不仅看起来美观,还能够在调试的时候给出有用的信息。但是,有时候我们不想重写 toString() 方法(想保留原有的打印格式  ClassType@123121),又想打印该对象的信息,那么最好定义一个新的方法,比如说 toMyString() 方法。

03、自动化输出

IDE(Eclipse 或者 Intellj idea) 通常会提供一种针对类的字段的输出格式,用来覆盖 toString()  方法。

@Override public String toString() {     return "Cmower{" +             "name='" + name + '\'' +             '}'; }

另外,一些开源的第三方类库也会提供这样的功能,比如说:

1)Apache Commons Lang 的 ToStringBuilder。

使用方法:

@Override public String toString() {     return ToStringBuilder.reflectionToString(this); }

输出结果:

com.cmower.printObject.Cmower@355da254[name=沉默王二]

2)Google Guava 的 MoreObjects

使用方法:

@Override public String toString() {     return MoreObjects.toStringHelper(this)             .add("name", getName())             .toString(); }

输出结果:

Cmower{name=沉默王二}

3)Lombok 的 @toString 注解(IDE 需要先安装 Lombok 的插件)

使用方法:

@ToString public class Cmower {      private String name;      // 省略构造方法和 getter/setter }

只需要一个 @toString 注解,不需要覆盖 toString() 方法。

输出结果:

Cmower(name=沉默王二)

04、打印对象列表(数组或者集合)

上述内容已经把打印单个对象的事情唠明白了,are you ok?接下来,我们来说道说道打印对象列表的事儿。

1)数组

Arrays.toString() 可以将任意类型的数组转成字符串,包括基本类型数组和引用类型数组。代码示例如下。

Cmower[] cmowers = {new Cmower("沉默王二"), new Cmower("沉默王三")}; System.out.println(Arrays.toString(cmowers));

输出结果:

[Cmower{name='沉默王二'}, Cmower{name='沉默王三'}]

2)集合

对于集合来说,可以直接打印就能输出我们预期的结果。代码示例如下。

List<Cmower> list = new ArrayList<>(); list.add(new Cmower("沉默王二")); list.add(new Cmower("沉默王三")); System.out.println(list);

输出结果:

[Cmower{name='沉默王二'}, Cmower{name='沉默王三'}]

读到这里,这篇“怎么优雅地打印一个Java对象”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: 怎么优雅地打印一个Java对象

本文链接: https://www.lsjlt.com/news/284213.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 怎么优雅地打印一个Java对象
    本文小编为大家详细介绍“怎么优雅地打印一个Java对象”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么优雅地打印一个Java对象”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。提问者定义了这样一个类:publi...
    99+
    2023-06-16
  • 怎么在Flutter上优雅地序列化一个对象
    本文小编为大家详细介绍“怎么在Flutter上优雅地序列化一个对象”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么在Flutter上优雅地序列化一个对象”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。序列化一个...
    99+
    2023-06-04
  • java怎么打印list中的对象
    在Java中,可以使用循环遍历List中的对象,并打印出每个对象的内容。可以通过以下代码实现: List<String>...
    99+
    2024-03-13
    java
  • 怎么打印Python对象
    本篇内容主要讲解“怎么打印Python对象”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么打印Python对象”吧!pprint 是“pretty printer”的简写,“pretty”的含...
    99+
    2023-06-02
  • 如何在 Laravel 中优雅地使用 Java 和 JavaScript 对象?
    Laravel 是一个基于 PHP 的 Web 应用程序框架,它提供了许多方便的工具和功能来帮助开发者快速构建高质量的 Web 应用程序。在 Laravel 中,开发者可以使用 Java 和 JavaScript 对象来增强应用程序的功能和...
    99+
    2023-09-22
    javascript 对象 laravel
  • Java开发者必备:如何优雅地处理NumPy对象?
    NumPy是一个广泛使用的Python库,它提供了高效的多维数组操作和数学函数。然而,Java开发者也可以通过使用ND4J库来处理NumPy对象。本文将介绍如何在Java中优雅地处理NumPy对象。 一、安装ND4J ND4J是一个开源的...
    99+
    2023-06-16
    响应 numpy 对象
  • 怎么优雅地实现判断一个值是否在一个集合中
    本篇内容介绍了“怎么优雅地实现判断一个值是否在一个集合中”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!版本...
    99+
    2024-04-02
  • java直接打印对象的方法是什么
    在Java中,可以使用`System.out.println()`方法来直接打印对象。这个方法会自动调用对象的`toString()...
    99+
    2023-10-11
    java
  • java怎么创建一个类的对象
    在Java中,可以通过以下步骤创建一个类的对象:1. 首先,你需要创建一个类。一个类是一个模板,用于定义对象的属性和方法。```ja...
    99+
    2023-10-11
    java
  • 怎么在java中创建一个对象
    这篇文章给大家介绍怎么在java中创建一个对象,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开发;4. 网页开发;5. ...
    99+
    2023-06-14
  • 你知道Java中如何优雅地操作接口和对象数组吗?
    Java作为一门面向对象的编程语言,在实际应用中经常需要操作接口和对象数组。如何优雅地操作这些对象和数组,是Java程序员需要掌握的重要技能之一。在本文中,我们将介绍如何在Java中优雅地操作接口和对象数组,并通过代码示例来详细说明。 一、...
    99+
    2023-11-09
    接口 对象 数组
  • java怎么一次性创建多个对象
    在Java中,可以使用循环结构和数组来一次性创建多个对象。具体步骤如下:1. 定义一个类,用于创建对象。例如,创建一个名为Stude...
    99+
    2023-09-22
    java
  • 怎么在java里实例化一个对象
    要在Java中实例化一个对象,需要按照以下步骤进行操作:1. 创建一个类:首先,需要创建一个类来定义对象的属性和行为。类是描述对象的...
    99+
    2023-09-26
    java
  • 怎么在java中创建一个对象数组
    这篇文章给大家介绍怎么在java中创建一个对象数组,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2. 面向对象;3. 分布性,Ja...
    99+
    2023-06-14
  • Java 封装与继承:面向对象编程的基石,打造优雅代码
    在 Java 中,可以通过访问修饰符(public、protected、default、private)来实现封装。public 修饰符表示该成员在任何地方都可以访问,protected 修饰符表示该成员只能在同一包或子类中访问,defa...
    99+
    2024-04-02
  • java怎么对对象的每一个字段都判空?
    可以通过反射机制,对 Java 对象中的每一个字段进行判空操作 我们定义了一个 isObjectFieldsNull 方法,该方法接受一个 Java 对象作为参数,使用反射机制遍历该对象中的每一个字段,如果有任何一个字段不为空,则返回 fa...
    99+
    2023-09-01
    java jvm 开发语言
  • Golang怎么优雅的终止一个服务
    今天小编给大家分享一下Golang怎么优雅的终止一个服务的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。前言采用常规方式启动一...
    99+
    2023-06-29
  • 聊聊php怎么打印对象的所有方法
    随着PHP语言的发展,越来越多的开发者开始重视对象的使用和优化。在对象编程中,对象是一种数据类型,包含属性和方法,并且可以通过类来创建。在PHP中,我们可以使用对象来管理数据和执行各种操作。但是,在实际开发中,我们可能需要知道一个对象的所有...
    99+
    2023-05-14
  • json_encode()怎么转化一个对象
    小编给大家分享一下json_encode()怎么转化一个对象,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!初步测试我们需要新建一个具有多种属性的对象新建 ...
    99+
    2023-06-14
  • JavaScript中怎么打印一个彩色菱形
    JavaScript中怎么打印一个彩色菱形,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。具体代码如下所示:<!DOCTYPE&nbs...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作