`
蔡华江
  • 浏览: 107939 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

直接显示Java对象内容

    博客分类:
  • JAVA
阅读更多

通常大家调试应用程序有多种办法,如Debug等,但是System.out总是还是使用得非常频繁的调试手段,但是System.out显示的内容总是直接调用对象的toString方法,使得显示结果比较单一,对一些bean来说,总是需要覆盖bean的toString方法,或者在调试时多次使用System.out。总体说来,这里使用一个简单的类,使得可以将一个对象中的公共成员变量显示出来,并且调用一些不需要参数的公共成员方法,并将结果显示出来。

package net.chinanets.flyy.util;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * 该方法用于对通用Bean对象,遍历其内容以取得bean的内部属性<br>
 * 该方法是通过使用检查公共成员变量和不需要参数的公共方法来实现
 * 
 * @author 蔡华江
 * 
 */
public class BeanMessage {
	public static String message(Object bean) {
		if (bean == null)
			return "对象为空!";
		StringBuffer sbf = new StringBuffer();
		Class<?> clazz = bean.getClass();
		sbf.append("\n" + clazz.getName() + " 检查开始:\n");
		try {
			sbf.append("  检查公共成员变量:\n");
			Field[] fs = clazz.getFields();
			for (int i = 0; i < fs.length; i++) {
				Field f = fs[i];
				sbf.append("    " + clazz.getName() + "." + f.getName() + ": "
						+ f.get(bean) + "\n");
			}
			sbf.append("  检查公共方法:\n");
			Method[] ms = clazz.getMethods();
			for (int i = 0; i < ms.length; i++) {
				Method m = ms[i];
				if ((!m.getReturnType().getName().equals("void") && m
						.getParameterTypes().length == 0)) {
					sbf.append("    " + clazz.getName() + "." + m.getName()
							+ "(): " + m.invoke(bean) + "\n");
				}
			}
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		}
		sbf.append(clazz.getName() + " 检查结束!");
		return sbf.toString();
	}
}

 然后,我们就可以使用BeanMessage的静态方法直接将一个对象的内容显示出来。如:

System.out.println(BeanMessage.message(new Object()));

 那么就可以将new Object()这个对象里面的基本信息直接打印出来。

写道
java.lang.Object 检查开始:
   检查公共成员变量:
   检查公共方法:
     java.lang.Object.hashCode(): 9856161
     java.lang.Object.getClass(): class java.lang.Object
     java.lang.Object.toString(): java.lang.Object@9664a1
java.lang.Object 检查结束!

 这个类对于一些简单bean对象非常有用,可以将一些getter方法里面的内容显示出来。

 

1
0
分享到:
评论
5 楼 kanful 2012-03-17  
直接用apache的  ReflectionToStringBuilder,不是简单很多。。。
资深架构师还写这么无聊的东西。。。

   @Override 
    public String toString() { 
        return ReflectionToStringBuilder.toString(this);
    } 
4 楼 xiaokelai 2011-01-26  
java反射,学习
3 楼 1927105 2010-09-16  
恩,想法不错,就是java中反射,
2 楼 蔡华江 2009-12-22  
是的,通常大家都是愿意覆盖toString()方法实现的。这个类很好玩的,举个例子,你可以定义一个类BasicVO,覆盖其toString()方法。
public class BasicVO {

	@Override
	public String toString() {
		return BeanMessage.message(this);
	}

}

那么继承这个类的对象都会自动使用BeanMessage进行输出。当然,这有个bug,对于类的相互调用(比方Hibernate一对一关联)就会出现栈溢出。
当然,这个类最大优势还是不需要对一个对象所属类进行toString覆写,就可以直接将一个对象里公共属性和公共方法调用结果输出来。打个比方,可以将页面请求的request对象直接输出来,那么就可以直观地比较其中各个方法有什么区别了。
1 楼 Purking 2009-12-21  
虽然我现在一直使用 IntelliJ 的自动生成 toString() 很舒服, 但是
写成一个自己的工具类也还是很爽的, 嘿嘿 

相关推荐

    JAVA对象模块.rar

    Java对象模块是Java编程中的核心概念,它代表了程序中的数据和行为的组合。在Java中,对象是类的实例,而类则是对象的蓝图。理解这一模块的关键在于掌握类、对象、属性和方法等基本概念。 1. 类(Class): 类是...

    Java中Json字符串直接转换为对象的方法(包括多层List集合)

    本文将详细介绍如何将JSON字符串直接转换为Java对象,特别是涉及到多层List集合的情况。在本例中,我们将使用`net.sf.json.JSONObject`类来实现这一功能。 首先,确保你的项目中已经引入了必要的库。在使用`...

    Java面向对象编程思想.pdf

    this 和 super 是 Java 中的两个保留关键字,this 引用当前类的变量和方法,而 super 引用当前对象的直接父类中的成员。它们在继承的子类中使用,用于访问父类中的成员变量和方法。 八、构造函数 构造函数是类的...

    jsp页面分页操作,用java类封装,页面直接调用对象显示

    把在页面上的分页操作,在java类用一个对象封装,并且把整个分页的html标签封装在这个对象的String类型的属性里,在需要分页的地方,直接从后台取得这个对象,并把对象中的字符串用页面的内置out对象写到页面上,...

    Java面向对象五子棋

    Java面向对象编程是一种重要的软件开发方法,它基于“对象”的概念,强调数据和操作数据的方法紧密结合,使得代码更易于理解和维护。在这个名为“Java面向对象五子棋”的项目中,我们有两个使用Java实现的五子棋小...

    java面向对象ppt

    【Java 面向对象编程基础】 Java 是一种由 Sun Microsystems 在1995年推出的高级编程语言,其设计初衷是安全、可移植且能够跨平台。最初由James Gosling等人开发,起名为Oak,主要用于控制嵌入式设备。1994年,随着...

    java分页显示,可直接运行

    Java 分页显示是一种在网页应用中处理大量数据的常见技术,尤其在数据库查询时非常有用。这个项目提供了从Java后端到JSP前端的完整分页解决方案,涉及到的主要知识点包括: 1. 数据库连接:在Java中,我们通常使用...

    Java的面向对象特性 PPT

    Java是一种广泛使用的编程语言,以其强大的面向对象特性而闻名。面向对象编程(Object-Oriented Programming,OOP)是Java的核心理念,它使得程序设计更加模块化、可维护且易于扩展。下面,我们将深入探讨Java的面向...

    Java面向对象设计.pdf

    根据提供的文件信息,我们可以看出文档《Java面向对象设计.pdf》主要围绕Java语言中的面向对象设计原则进行介绍。从给出的部分内容中,我们可以提炼出以下知识点: 1. **Java基础语法**:文中包含了Java的基本...

    java面向对象程序设计习题-(11).doc

    面向对象程序设计是Java的核心特性,它通过类和对象来模拟现实世界中...以上内容涵盖了面向对象的基本概念,包括类、对象、构造函数、访问控制、静态成员、方法重载、包管理、对象交互等,这些都是Java编程的基础知识。

    将java代码生成html并且高亮显示的类

    Java是一种面向对象的编程语言,用于开发跨平台的应用程序,其代码通常保存在`.java`文件中。而HTML(超文本标记语言)是用于创建网页的标准标记语言,它包含一系列标签来定义网页结构和内容。 要将Java代码转换为...

    java对象与接口详解

    Java 中的对象和接口是面向对象编程的重要概念,对于初学者来说,理解这两个概念至关重要。本篇将详细解释这两个概念以及它们在实际编程中的应用。 首先,我们来看一下对象。在 Java 中,对象是类的实例,它是程序...

    Java面向对象编程-ATm取款机系统

    在Java编程领域,面向对象编程(Object-Oriented Programming,OOP)是一种广泛采用的设计模式,它基于类和对象的概念,使代码更加模块化、可维护性更强。在这个"Java面向对象编程-ATM取款机系统"项目中,我们可以...

    Java面向对象之继承练习题.doc

    12. **方法重写**:在Java中,当子类继承父类并重写父类方法时,如果在子类中直接调用这个方法,将执行子类的版本。因此,程序将输出`Test---&gt;print`,选择B。 通过上述练习,可以深入理解Java中的继承机制,如何...

    03.Java对象初始化1

    这就是为什么 Java 的属性字段无需显示初始化就能被使用,而方法的局部变量却必须要显示初始化以后才能访问。 然后调用的对象的构造函数,调用过程会一直上溯到 Object 类。对象的组成部分包括对象头、实例数据和...

    JAVA面向对象程序设计试题与解析库

    ### JAVA面向对象程序设计知识点详解 #### 一、Font类详解 Font类是Java AWT包中的一个重要组成部分,主要用于设置程序中的字体实例对象。通过Font类,开发者可以在Java应用程序中自定义字体,包括字体的外观、样式...

    Java面向对象设计的一些初级实例

    Java面向对象设计是一种编程范式,它基于“对象”而非“过程”的思想,将数据和操作数据的方法封装在一起,提供了一种更贴近现实世界、更易于理解和维护的编程方式。面向对象设计(Object-Oriented Design,简称OOD...

Global site tag (gtag.js) - Google Analytics