当前位置:编程学习 > JAVA >>

请讲解以下代码的执行过程,看不懂捏

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

public class ObjectAnalyzerTest {
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 {
private ArrayList<Object> visited = new ArrayList<Object>();

public String toString(Object obj) {
if(obj == null) return "null";
if(visited.contains(obj)) return"...";
visited.add(obj);

Class c = obj.getClass();

if(c == String.class) return (String)obj;

if(c.isArray()) {
String r = c.getComponentType() + "[]{";

for(int i=0;i<Array.getLength(obj);i++) {
if(i>0)r+=",";
Object val = Array.get(obj,i);
if(c.getComponentType().isPrimitive()) r += val;
else r += toString(val);
}

return r +="}";
}

String r = c.getName();

do
{
r += "[";
Field[] fields = c.getDeclaredFields();
AccessibleObject.setAccessible(fields,true);

for(Field f:fields) {
if(!Modifier.isStatic(f.getModifiers())) {
if(!r.endsWith("[")) r += ",";
r +=f.getName() + "=";
try
{
Class t = f.getType();
Object val = f.get(obj);
if(t.isPrimitive()) r += val;
else r += toString(val);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
r += "]";
c = c.getSuperclass();
}
while (c != null);
return r;
}
} --------------------编程问答-------------------- Debug  F6  逐行查看 如何? --------------------编程问答-------------------- 查看了,调用太多的类,乱死了
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,