`

toString方法实现(JAVA2核心技术学习)

阅读更多
package com.cool.reflect;

import java.lang.reflect.*;
import java.util.*;
import java.text.*;

public class ObjetAnalyzerTest {
	public static void main(String args[]) {
		ArrayList<Integer> squares = new ArrayList<Integer>();
		for (int i = 1; i <= 5; i++)
			squares.add(i * i);
		System.out.println(new ObjectAnalyzer().toString(squares));
	}
}

class ObjectAnalyzer {
	public String toString(Object obj) {
		if (obj == null)
			return "null";
		if (visited.contains(obj))
			return "...";
		visited.add(obj);
		Class c1 = obj.getClass();
		if (c1 == String.class)
			return (String) obj;
		if (c1.isArray()) {
			// 返回表示数组组件类型的 Class。
			String r = c1.getComponentType() + "[]{";
			for (int i = 0; i < Array.getLength(obj); i++) {
				if (i > 0)
					r += ",";
				Object val = Array.get(obj, i);
				if (c1.getComponentType().isPrimitive())
					r += val;
				else
					r += toString(val);
			}
			return r + "}";
		}

		String r = c1.getName();
		do {
			r += "[";
			// 返回 Field 对象的一个数组,这些对象反映此 Class
			// 对象所表示的类或接口所声明的所有字段,包括公共、保护、默认(包)访问和私有字段,但不包括继承的字段。
			Field[] fields = c1.getDeclaredFields();
			// 使用单一安全性检查(为了提高效率)为一组对象设置 accessible 标志的便捷方法。
			AccessibleObject.setAccessible(fields, true);

			for (Field f : fields) {
				// 如果参数包括 static 修饰符,则返回 true,否则返回 false。
				if (!Modifier.isStatic(f.getModifiers())) {
					if (!r.endsWith("["))
						r += ",";
					r += f.getName() + "=";
					try {
						// 返回一个 Class 对象,它标识了此 Field 对象所表示字段的声明类型
						Class t = f.getType();
						// 返回指定对象上此 Field 表示的字段的值。
						Object val = f.get(obj);

						// 判定指定的 Class 对象是否表示一个基本类型
						if (t.isPrimitive())
							r += val;
						// 递归
						else
							r += toString(val);
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			}
			r += "]";
			c1 = c1.getSuperclass();
		} while (c1 != null);

		return r;
	}

	private ArrayList<Object> visited = new ArrayList<Object>();
}
   

输出结果:java.util.ArrayList[elementData=class java.lang.Object[]{java.lang.Integer[value=1][][],java.lang.Integer[value=4][][],java.lang.Integer[value=9][][],java.lang.Integer[value=16][][],java.lang.Integer[value=25][][],null,null,null,null,null},size=5][modCount=5][][]

分享到:
评论

相关推荐

    java2核心技术学习笔记

    Java 2核心技术学习笔记主要涵盖了面向对象编程的基本概念和核心机制。以下是对这些知识点的详细说明: 1. **封装**:封装是面向对象编程的重要原则,它禁止直接访问类的实例字段,而是通过对象的方法来操作数据。...

    java2实用教程

    《java2实用教程》涵盖了Java语言的基础知识和一些高级特性,适合初学者系统学习Java编程。以下是书中各章节的知识点总结: 第一章:JAVA语言入门 1.1 JAVA的诞生:介绍了Java语言的历史背景,它是由Sun ...

    CoreJava学习笔记

    Object类是所有Java类的基类,它包含了一些常用的方法,如toString()、equals()等。 **封装类:** 封装类用于包装基本类型,提供一些额外的方法来操作这些类型。 **内部类:** 内部类是在另一个类内部定义的类,...

    JAVA核心技术

    ### JAVA核心技术概述 #### 前言 本文档旨在为JAVA初学者提供全面且深入的基础学习资料,通过详细的章节解析JAVA的核心技术要点。JAVA作为一门广泛应用于企业级开发的编程语言,其强大的功能和丰富的生态使得它成为...

    java私塾学习笔记整理

    **二、实现方法** 通过实现监听器接口或使用匿名内部类等方式。 **事件适配器**:提供了默认空实现的方法,便于覆盖感兴趣的事件方法。 **内部类**:可以在类内部定义。 **匿名内部类**:无需命名的内部类。 **...

    java学习心得

    在学习Java的过程中,掌握其核心特性并深入理解其工作机制是至关重要的。Java以其强大的面向对象编程(OOP)特性、跨平台的可移植性以及丰富的类库赢得了广泛的认可。以下将从动态加载机制、类文件查找原理以及JDK与...

    网上搜集的各种关于java技术的文章

    Java技术是IT行业中广泛应用的一门编程语言,尤其在企业级应用开发中占据着核心地位。J2EE(Java 2 Platform, Enterprise Edition)是Java平台的企业版,它为开发和部署分布式多层应用程序提供了框架。这个压缩包...

    java学习笔记整理

    ### Java学习笔记整理 #### 1. Java简介 ##### 1.1 计算机编程和开发语言 计算机系统由硬件系统和软件系统组成。软件系统又进一步细分为系统软件和应用软件。其中,系统软件包括操作系统、编译系统、数据库系统等...

    用java实现的简单浏览器程序

    ### Java 实现简单浏览器程序知识点解析 #### 一、项目概述 本项目是基于Java语言开发的一款简易浏览器程序。...对于初学者来说,这是一个很好的学习示例,可以帮助理解Java GUI编程的基础知识和技术细节。

    JAVA语言程序设计期末题库.pdf

    在学习Java语言时,理解以下几个核心概念至关重要: 1. **字节码文件**:Java源程序编译后生成的字节码文件,其扩展名为`.class`。这些字节码文件可以在任何支持Java的平台上运行,体现了Java的“一次编写,到处...

    入门必备Java学习笔记

    `java.lang.Object` 是所有Java类的根类,包含所有对象共有的方法,如`equals()` 和 `toString()`;还有异常处理机制,如`try-catch-finally` 结构,是编写健壮代码的关键部分。 JDBC(Java Database Connectivity...

    学习Java的30个基本概念 学习Java的30个基本概念

    - **J2SE**(Java 2 Platform Standard Edition):适用于桌面应用程序的开发,包含了Java的核心类库和技术。 - **J2EE**(Java 2 Platform Enterprise Edition):主要面向企业级应用,支持Web服务、EJB等技术。 - ...

    Java换位密码加密解密

    在本文中,我们将深入探讨如何使用Java编程语言实现一种经典的密码学技术——换位密码算法。...通过这种方式,我们可以学习到Java编程、GUI设计以及密码学的基础知识,这对于理解和开发更复杂的加密系统具有重要意义。

    ATM-java程序实现

    通过对“ATM-java程序实现”的详细分析,我们不仅深入了解了Java编程的核心技术和最佳实践,还学会了如何将这些知识应用于实际的项目开发中。本项目不仅涵盖了基本的面向对象编程原则,还涉及到了多线程、网络编程、...

    java笔记 java笔记

    ### Java基础知识概述 #### 1. 前言 Java是一种广泛使用的面向对象的编程语言,因其跨平台性、安全性和强大的功能而受到欢迎。...掌握这些核心概念和技术将有助于开发者更好地利用Java来解决问题。

    学习Java的30个基本概念

    ### 学习Java的30个基本概念 Java作为一门广泛应用的编程语言,在软件开发、Web应用、移动应用等多个领域都有着不可替代的地位。对于初学者来说,了解并掌握Java的基本概念至关重要,无论是在J2SE(Java Standard ...

    Java基础入门一.pdf

    面向对象编程是Java的核心概念之一,其包括对象的创建、使用、复制、比较、重写toString等方法,以及垃圾回收前的清理工作。java.lang.Object类是所有Java对象的根类,它提供了许多基础方法,如getClass、hashCode、...

    java写的的通讯录(用文件实现的)

    这个基于文件的通讯录项目是一个很好的学习实践,涵盖了文件操作、面向对象编程、数据序列化以及基本的用户交互等多个Java编程核心概念。通过这个项目,开发者可以加深对Java语言的理解,为以后的数据库编程和其他...

    JAVA学习笔记(全面)

    - **`Object`类**:所有Java类的父类,提供了如`toString()`、`equals(Object obj)`等通用方法。 - **`String`类**:用于表示文本字符串,提供了一系列用于字符串操作的方法。 - **`StringBuilder`类**:用于创建和...

Global site tag (gtag.js) - Google Analytics