在项目开发中,获取到一个对象后,经常需要查看对象的值,而对象并不像基本数据类型那样可以直接打印出值来,所以需要调用对象的get方法,或者debug,这样很麻烦,尽管apache的commons-lang.jar包里提供了打印对象的方法,但是实际上,根本用不着那样的复杂,为了让程序跑的更快跑的更远,既需要实现功能,又需要代码简洁、高效,所以写了一个自认为简洁、高效的打印对象的方法,利用了java独特的反射机制:直接看代码,欢迎砸砖头
有一点需要申明的就是:本例不可以输出互相引用的对象,比如ClassA引用ClassB,ClassB也引用了ClassA,如果是这种情况调用如下方法打印,会出现无限递归,很快会栈溢出的,所以如果是这种情况,请使用apache提供的方法!
import java.lang.reflect.Field;
public class BeanToStringUtils {
public static String toString(Object obj){
StringBuilder sb = null;
try {
Class<?> c = obj.getClass();
Field[] fields = c.getDeclaredFields();
sb = new StringBuilder();
sb.append(obj.getClass().getName());
sb.append(" {");
int i = 1;
for(Field fd : fields){
fd.setAccessible(true);
sb.append(fd.getName());
sb.append(":");
sb.append(fd.get(obj));
if(i != fields.length){
sb.append(", ");
}
i++;
}
sb.append("}");
} catch (Exception e) {
e.printStackTrace();
}
return sb.toString();
}
}
如果对象内部又引用了对象,也是可以打印出来的,只要对象不为null
测试类:
import javax.xml.bind.annotation.XmlRootElement;
import xxx.BeanToStringUtils;
public class User {
private String name;
private int age;
private String sex;
private Address adress;
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Address getAdress() {
return adress;
}
public void setAdress(Address adress) {
this.adress = adress;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return BeanToStringUtils.toString(this);
}
public static void main(String[] args) {
User user = new User();
user.setAge(18);
user.setSex("belle");
user.setName("西施");
Address add = new Address();
add.setCountry("中国");
add.setCity("北京市");
add.setArea("昌平区");
add.setStreet("龙锦东三街");
user.setAdress(add);
System.out.println(user);
}
}
class Address{
private String country;
private String city;
private String area;
private String street;
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getArea() {
return area;
}
public void setArea(String area) {
this.area = area;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
@Override
public String toString() {
return BeanToStringUtils.toString(this);
}
}
记得需要重写toString方法,输出结果如下:
xxx.User {name:西施, age:18, sex:belle, adress:xxx.Address {country:中国, city:北京市, area:昌平区, street:龙锦东三街}}
分享到:
相关推荐
总的来说,“打印自定义复杂对象工具类”是Java开发中的一种实用辅助工具,通过提供详尽的对象表示,帮助开发者更好地理解和调试代码中的复杂数据结构。它的实现依赖于Java的反射机制和控制流,是Java编程技能的重要...
`ToString`方法与日志打印紧密相关,因为当需要在日志中打印对象状态时,通常会调用对象的`toString`方法。 `压缩包子文件的文件名称列表`中的`ToString.java`和`ReflectionToLogStringBuilder.java`是实现这个功能...
在实际应用中,我们可能还需要重写`toString()`方法,以便于打印或显示复数的值: ```java @Override public String toString() { return real + " + " + imaginary + "i"; } ``` 此外,为了提高代码的可读性和可...
当我们需要打印或调试对象时,`toString()`方法尤其有用。本篇文章将深入探讨几种在Java中实现`toString()`方法的方式,包括自定义、使用`ToStringBuilder`和`ReflectionToStringBuilder`。 首先,自定义`toString...
Java Object toString方法原理解析 ...结论:通过对 Java Object toString 方法的分析,我们可以更好地理解 Java 中的对象表示形式和类加载机制,并掌握如何重写 toString 方法以自定义对象的字符串表示形式。
在实际应用中,我们可以使用 toString 方法来打印对象的信息。例如,我们可以使用以下代码来打印 Person 对象的信息: ```java Person p1 = new Person(); System.out.println(p1.toString()); ``` 这将输出该对象...
在Java编程语言中,`toString()`方法是一个非常重要的功能,尤其对于对象的表示和输出。该方法源自`Object`类,由于所有的Java类都隐式或显式地继承自`Object`,因此所有类的对象都可以调用`toString()`方法。这个...
这个方法对于理解和调试代码至关重要,因为当你尝试打印或输出一个对象时,JavaScript引擎默认会调用该对象的`toString`方法。本篇文章我们将深入探讨`toString`方法的初始应用,以及它在JavaScript对象中的工作原理...
在实际编程中,`System.out.println()`方法会自动调用对象的`toString()`方法,打印出对象的字符串表示。例如: ```java System.out.println(new Object()); // 打印 java.lang.Object@哈希码 System.out.println...
在Java代码的开发过程中,`toString()`方法的重写常用于调试,因为打印对象时,系统会自动调用`toString()`。例如,`System.out.println(p)`将输出`p`对象的`toString()`结果。这使得开发者可以快速查看对象的状态...
例如,在我们定义一个 Person 类时,如果我们不重写 toString() 方法,打印对象时只会显示出对象的哈希码,而不是我们想要的结果。因此,我们需要重写 toString() 方法以返回对象的字符串表示。 重写 toString() ...
`PrinterUtils`工具类为Java应用程序提供了一种简便的方式来通过网络打印机打印自定义内容,如快递单和发票。通过对打印任务的封装和对不同打印场景的支持,该工具类极大地简化了开发过程,并为企业提供了强大的打印...
### Java Applet + JasperReport 实现Web端打印 #### 背景介绍 在Web开发领域,特别是企业级应用中,精确打印与批量打印是非常重要的功能之一。这不仅关乎用户体验,还涉及到业务流程的顺利执行。传统的Web打印...
Comparator接口位于java.util包中,它允许我们为Java集合框架中未实现Comparable接口的对象提供一个“比较器”。比较器本质上是一种特殊类型的对象,这种对象知道如何将两个对象进行比较。一个比较器的作用是定义...
Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接与浏览,Java源码下载 1个目标文件 摘要:Java源码,网络相关,HTTP Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件...
在自定义类中重写`toString()` 方法可以帮助我们更清晰地看到对象的状态,特别是在调试或打印日志时。例如,我们可以返回一个包含所有重要属性值的字符串,使得输出更加可读。对于`Test01` 类,如果我们添加一个`...
在Java中,我们可以使用`java.util.Map`或者自定义类来表示对象,然后将其转换为JSON字符串。由于题目中提到不需要依赖任何jar包,我们将使用Java 6以后内置的`org.json`包来实现这个功能。这个包包含`JSONObject`...
在Java编程语言中,`toString()`方法是一个非常重要的工具,它允许对象转化为字符串形式,方便在控制台打印、日志记录或与其他字符串进行拼接。本文将深入探讨`toString()`方法,以及它在Java中的应用。 `toString...
在日常开发中,我们经常使用`System.out.println()`来打印对象的信息,实际上这个过程会自动调用对象的`toString()`方法。如果你想要自定义打印的内容,就需要在自己的类中重写`toString()`方法。在上述的`...
如果对象是简单类型数组(非对象数组),或者不允许递归,那么直接使用`Arrays.toString`返回。否则,它会调用`complexArrToStr`方法,以更复杂的方式处理数组,包括显示索引和每个元素的详细信息。 `...