`
tigerl
  • 浏览: 98179 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多
在项目开发中,获取到一个对象后,经常需要查看对象的值,而对象并不像基本数据类型那样可以直接打印出值来,所以需要调用对象的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对象ToString处理方案,ToString基类

    `ToString`方法与日志打印紧密相关,因为当需要在日志中打印对象状态时,通常会调用对象的`toString`方法。 `压缩包子文件的文件名称列表`中的`ToString.java`和`ReflectionToLogStringBuilder.java`是实现这个功能...

    打印自定义复杂对象工具类

    总的来说,“打印自定义复杂对象工具类”是Java开发中的一种实用辅助工具,通过提供详尽的对象表示,帮助开发者更好地理解和调试代码中的复杂数据结构。它的实现依赖于Java的反射机制和控制流,是Java编程技能的重要...

    java 自定义复数类

    在实际应用中,我们可能还需要重写`toString()`方法,以便于打印或显示复数的值: ```java @Override public String toString() { return real + " + " + imaginary + "i"; } ``` 此外,为了提高代码的可读性和可...

    java toString ToStringBuilder ReflectionToStringBuilder

    当我们需要打印或调试对象时,`toString()`方法尤其有用。本篇文章将深入探讨几种在Java中实现`toString()`方法的方式,包括自定义、使用`ToStringBuilder`和`ReflectionToStringBuilder`。 首先,自定义`toString...

    Java Object toString方法原理解析

    Java Object toString方法原理解析 ...结论:通过对 Java Object toString 方法的分析,我们可以更好地理解 Java 中的对象表示形式和类加载机制,并掌握如何重写 toString 方法以自定义对象的字符串表示形式。

    java中的tostring方法的具体用法

    在实际应用中,我们可以使用 toString 方法来打印对象的信息。例如,我们可以使用以下代码来打印 Person 对象的信息: ```java Person p1 = new Person(); System.out.println(p1.toString()); ``` 这将输出该对象...

    浅析JAVA中toString方法的作用

    在Java编程语言中,`toString()`方法是一个非常重要的功能,尤其对于对象的表示和输出。该方法源自`Object`类,由于所有的Java类都隐式或显式地继承自`Object`,因此所有类的对象都可以调用`toString()`方法。这个...

    JavaScript Object toString 初始

    这个方法对于理解和调试代码至关重要,因为当你尝试打印或输出一个对象时,JavaScript引擎默认会调用该对象的`toString`方法。本篇文章我们将深入探讨`toString`方法的初始应用,以及它在JavaScript对象中的工作原理...

    Java面向对象编程配套下PPT-孙卫琴.ppt

    在实际编程中,`System.out.println()`方法会自动调用对象的`toString()`方法,打印出对象的字符串表示。例如: ```java System.out.println(new Object()); // 打印 java.lang.Object@哈希码 System.out.println...

    浅谈Java编程ToString()方法重写的意义

    在Java代码的开发过程中,`toString()`方法的重写常用于调试,因为打印对象时,系统会自动调用`toString()`。例如,`System.out.println(p)`将输出`p`对象的`toString()`结果。这使得开发者可以快速查看对象的状态...

    重写toString和equals方法

    例如,在我们定义一个 Person 类时,如果我们不重写 toString() 方法,打印对象时只会显示出对象的哈希码,而不是我们想要的结果。因此,我们需要重写 toString() 方法以返回对象的字符串表示。 重写 toString() ...

    JAVA通过网络调用网络打印机的工具类

    `PrinterUtils`工具类为Java应用程序提供了一种简便的方式来通过网络打印机打印自定义内容,如快递单和发票。通过对打印任务的封装和对不同打印场景的支持,该工具类极大地简化了开发过程,并为企业提供了强大的打印...

    Java燗applet+jasperReport 实现web端打印

    ### Java Applet + JasperReport 实现Web端打印 #### 背景介绍 在Web开发领域,特别是企业级应用中,精确打印与批量打印是非常重要的功能之一。这不仅关乎用户体验,还涉及到业务流程的顺利执行。传统的Web打印...

    java源码包---java 源码 大量 实例

    Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接与浏览,Java源码下载 1个目标文件 摘要:Java源码,网络相关,HTTP  Java实现HTTP连接与浏览,Java源码下载,输入html文件地址或网址,显示页面和HTML源文件...

    Java中构造方法set/get和toString的使用详解

    在自定义类中重写`toString()` 方法可以帮助我们更清晰地看到对象的状态,特别是在调试或打印日志时。例如,我们可以返回一个包含所有重要属性值的字符串,使得输出更加可读。对于`Test01` 类,如果我们添加一个`...

    java对象转json示例

    在Java中,我们可以使用`java.util.Map`或者自定义类来表示对象,然后将其转换为JSON字符串。由于题目中提到不需要依赖任何jar包,我们将使用Java 6以后内置的`org.json`包来实现这个功能。这个包包含`JSONObject`...

    万能的toString

    在Java编程语言中,`toString()`方法是一个非常重要的工具,它允许对象转化为字符串形式,方便在控制台打印、日志记录或与其他字符串进行拼接。本文将深入探讨`toString()`方法,以及它在Java中的应用。 `toString...

    toString()方法1

    在日常开发中,我们经常使用`System.out.println()`来打印对象的信息,实际上这个过程会自动调用对象的`toString()`方法。如果你想要自定义打印的内容,就需要在自己的类中重写`toString()`方法。在上述的`...

    java反射原理制作对象打印工具

    如果对象是简单类型数组(非对象数组),或者不允许递归,那么直接使用`Arrays.toString`返回。否则,它会调用`complexArrToStr`方法,以更复杂的方式处理数组,包括显示索引和每个元素的详细信息。 `...

    通过java的反射技术获取,某个包路径下的类,并以表格形式打印类的属性注解注释及属性名称等

    如果注解有自定义的注解内容,可以使用`Annotation.toString()`获取。 3. 获取字段的注解类型:`Field.getDeclaredAnnotationsByType(Class&lt;T&gt; annotationClass)`可以用于获取特定类型的注解,例如`@NonNull`或`@...

Global site tag (gtag.js) - Google Analytics