java对象中必须有属性和方法(java打印对象的属性)

怎么正确的在JAVA中打印一个对象?而不是输出SomeType@2f92e0f4?我们有下面一个类:classSomeClass{privateStringfield;...g

怎么正确的在JAVA中打印一个对象?而不是输出SomeType@2f92e0f4?

我们有下面一个类:

<span><span>class</span> <span>SomeClass</span> {</span>    <span>private</span> String field;    ...getter/setter}

当我们尝试直接输出该类的时候:

<span>System</span><span>.out</span><span>.println</span>(<span>someClass</span>);

会得到一个奇怪的结果:

<span>org</span><span>.xiaochao</span><span>.SomeClass</span><span>@4e50df2e</span>

为什么会得到这样的结果呢?怎么才能正常的输出呢?

为什么会得到一个奇怪的结果

事实上,java的每个类都是继承自Object的,Object中有几个方法,其中一个方法是toString(),System.out.println被调用时,会自动调用对象的toString()方法。如果我们的类覆盖了该方法,就会调用我们实现的结果,如果未覆盖,则会调用Object的该方法。
Object实现的toString()方法如下所示:

    <span><span>public</span> String <span>toString</span><span>()</span> </span>{        <span>return</span> getClass().getName() +         <span>\"@\"</span> + Integer.toHexString(hashCode());    }

因此,我们得到的输出org.xiaochao.SomeClass@4e50df2e是Object的默认实现:

  • org.xiaochao.SomeClass 是 getClass().getName() 得到的类名称。会带着包名
  • @是中间的连接符
  • 4e50df2e是当前实例的hashCode

如何正确输出对象

自定义toString来输出对象

想要自定义输出对象的内容,我们需要实现toString()方法才行,比如说:

<span><span>class</span> <span>SomeClass</span> </span>{    <span>private</span> String field;    <span>@Override</span>    <span><span>public</span> String <span>toString</span><span>()</span> </span>{        <span>return</span> <span>\"field: \"</span> + field;    }}

这样就可以得到一个比较好看的结果了:

field: myfield <span>value</span>

输出对象更好的方法

当类的数量比较多,或者是属性比较多时,自行手写toString()就很麻烦了,这里介绍几个简单的方法。

通过idea自动生成

idea可以自动生成类的toString方法,鼠标放到类里面,按住Alt+Insert,在弹出的窗口选择toString(),选择要输出的字段,就可以一键生成了。

生成结果如下:

<span>@Override</span><span><span>public</span> String <span>toString</span><span>()</span> </span>{    <span>return</span> <span>\"SomeClass{\"</span> +            <span>\"field=\'\"</span> + field + <span>\'\\\'\'</span> +            <span>\'}\'</span>;}

通过lombok生成

lombok非常强大,可以通过添加注解的方式直接生成toString()。

在maven中添加依赖:

<span><<span>dependencies</span>></span>    <span><<span>dependency</span>></span>        <span><<span>groupId</span>></span>org.projectlombok<span></<span>groupId</span>></span>        <span><<span>artifactId</span>></span>lombok<span></<span>artifactId</span>></span>        <span><<span>version</span>></span>1.18.24<span></<span>version</span>></span>        <span><<span>scope</span>></span>provided<span></<span>scope</span>></span>    <span></<span>dependency</span>></span><span></<span>dependencies</span>></span>

在代码中使用:

<span>import</span> lombok.ToString;<span>@ToString</span><span><span>class</span> <span>SomeClass</span> </span>{    <span>private</span> String field;}

输出结果:

SomeClass(field=myfield <span>value</span>)

可以看到效果也是很不错的。

使用commons-lang3工具输出对象

Apache Commons-lang3 提供了非常多的实用工具。当我们拿到一个不是我们自己写的类时,可以通过它的反射工具ReflectionToStringBuilder直接打印出来对象的值,而且还可以打印对象中的对象的值。

在maven中添加依赖:

<span><<span>dependency</span>></span>    <span><<span>groupId</span>></span>org.apache.commons<span></<span>groupId</span>></span>    <span><<span>artifactId</span>></span>commons-lang3<span></<span>artifactId</span>></span>    <span><<span>version</span>></span>3.12.0<span></<span>version</span>></span><span></<span>dependency</span>></span>

使用:

<span>ReflectionToStringBuilder</span><span>.toString</span>(<span>someClass</span>)

输出结果:

SomeClass@<span>37b</span>ba400[field=myfield <span>value</span>]
本站部分文章来自网络或用户投稿,如无特殊说明或标注,均为本站原创发布。涉及资源下载的,本站旨在共享仅供大家学习与参考,如您想商用请获取官网版权,如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
投稿

目前口碑最好的笔记本(戴尔外星人笔记本怎么样)

2023-11-13 15:52:41

投稿

windows查看主板型号(主板型号在哪个位置)

2023-11-13 15:53:19

搜索