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][][]
分享到:
相关推荐
Java 2核心技术学习笔记主要涵盖了面向对象编程的基本概念和核心机制。以下是对这些知识点的详细说明: 1. **封装**:封装是面向对象编程的重要原则,它禁止直接访问类的实例字段,而是通过对象的方法来操作数据。...
《java2实用教程》涵盖了Java语言的基础知识和一些高级特性,适合初学者系统学习Java编程。以下是书中各章节的知识点总结: 第一章:JAVA语言入门 1.1 JAVA的诞生:介绍了Java语言的历史背景,它是由Sun ...
Object类是所有Java类的基类,它包含了一些常用的方法,如toString()、equals()等。 **封装类:** 封装类用于包装基本类型,提供一些额外的方法来操作这些类型。 **内部类:** 内部类是在另一个类内部定义的类,...
### JAVA核心技术概述 #### 前言 本文档旨在为JAVA初学者提供全面且深入的基础学习资料,通过详细的章节解析JAVA的核心技术要点。JAVA作为一门广泛应用于企业级开发的编程语言,其强大的功能和丰富的生态使得它成为...
**二、实现方法** 通过实现监听器接口或使用匿名内部类等方式。 **事件适配器**:提供了默认空实现的方法,便于覆盖感兴趣的事件方法。 **内部类**:可以在类内部定义。 **匿名内部类**:无需命名的内部类。 **...
在学习Java的过程中,掌握其核心特性并深入理解其工作机制是至关重要的。Java以其强大的面向对象编程(OOP)特性、跨平台的可移植性以及丰富的类库赢得了广泛的认可。以下将从动态加载机制、类文件查找原理以及JDK与...
Java技术是IT行业中广泛应用的一门编程语言,尤其在企业级应用开发中占据着核心地位。J2EE(Java 2 Platform, Enterprise Edition)是Java平台的企业版,它为开发和部署分布式多层应用程序提供了框架。这个压缩包...
### Java学习笔记整理 #### 1. Java简介 ##### 1.1 计算机编程和开发语言 计算机系统由硬件系统和软件系统组成。软件系统又进一步细分为系统软件和应用软件。其中,系统软件包括操作系统、编译系统、数据库系统等...
### Java 实现简单浏览器程序知识点解析 #### 一、项目概述 本项目是基于Java语言开发的一款简易浏览器程序。...对于初学者来说,这是一个很好的学习示例,可以帮助理解Java GUI编程的基础知识和技术细节。
在学习Java语言时,理解以下几个核心概念至关重要: 1. **字节码文件**:Java源程序编译后生成的字节码文件,其扩展名为`.class`。这些字节码文件可以在任何支持Java的平台上运行,体现了Java的“一次编写,到处...
`java.lang.Object` 是所有Java类的根类,包含所有对象共有的方法,如`equals()` 和 `toString()`;还有异常处理机制,如`try-catch-finally` 结构,是编写健壮代码的关键部分。 JDBC(Java Database Connectivity...
- **J2SE**(Java 2 Platform Standard Edition):适用于桌面应用程序的开发,包含了Java的核心类库和技术。 - **J2EE**(Java 2 Platform Enterprise Edition):主要面向企业级应用,支持Web服务、EJB等技术。 - ...
在本文中,我们将深入探讨如何使用Java编程语言实现一种经典的密码学技术——换位密码算法。...通过这种方式,我们可以学习到Java编程、GUI设计以及密码学的基础知识,这对于理解和开发更复杂的加密系统具有重要意义。
通过对“ATM-java程序实现”的详细分析,我们不仅深入了解了Java编程的核心技术和最佳实践,还学会了如何将这些知识应用于实际的项目开发中。本项目不仅涵盖了基本的面向对象编程原则,还涉及到了多线程、网络编程、...
### Java基础知识概述 #### 1. 前言 Java是一种广泛使用的面向对象的编程语言,因其跨平台性、安全性和强大的功能而受到欢迎。...掌握这些核心概念和技术将有助于开发者更好地利用Java来解决问题。
### 学习Java的30个基本概念 Java作为一门广泛应用的编程语言,在软件开发、Web应用、移动应用等多个领域都有着不可替代的地位。对于初学者来说,了解并掌握Java的基本概念至关重要,无论是在J2SE(Java Standard ...
面向对象编程是Java的核心概念之一,其包括对象的创建、使用、复制、比较、重写toString等方法,以及垃圾回收前的清理工作。java.lang.Object类是所有Java对象的根类,它提供了许多基础方法,如getClass、hashCode、...
这个基于文件的通讯录项目是一个很好的学习实践,涵盖了文件操作、面向对象编程、数据序列化以及基本的用户交互等多个Java编程核心概念。通过这个项目,开发者可以加深对Java语言的理解,为以后的数据库编程和其他...
- **`Object`类**:所有Java类的父类,提供了如`toString()`、`equals(Object obj)`等通用方法。 - **`String`类**:用于表示文本字符串,提供了一系列用于字符串操作的方法。 - **`StringBuilder`类**:用于创建和...