哥哥姐姐好!愚弟问个不知深浅的问题 第一遍看是看不懂的,反正我就是!第二遍还行,反正这是弄JDK系统的人才要了解,普通编程一般不太用到!就反射反映javabean的内部结构有用! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 初学可以跳过去,不到相关的开发基本都用不上,不过了解了其中的原理对你学习的java有帮助。 给你一个反射的例子,用来显示一个类中的方法和变量import java.lang.reflect.*;import javax.swing.*;public class Reflection{ public static void main(String[] args){ String name; if(args.length>0) name=args[0]; else name=JOptionPane.showInputDialog("input a class name(e.g java.util.date):"); try{ Class cl=Class.forName(name); Class supercl=cl.getSuperclass(); Class[] c=cl.getInterfaces(); if(!cl.isInterface()){ System.out.print("class "); } else System.out.print("interface "); System.out.print(cl.getName().substring(cl.getName().lastIndexOf('.')+1)); if(supercl!=null&&supercl!=Object.class) System.out.print(" extends "+supercl.getName().substring(supercl.getName().lastIndexOf('.')+1)); if(c.length>0){ if(cl.isInterface()){ for(int i=0;i<c.length;i++){ System.out.print(" extents "+c[i].getName().substring(c[i].getName().lastIndexOf('.')+1)); } } else{ System.out.print(" implements "); for(int i=0;i<c.length;i++){ if(i>0)System.out.print(","); System.out.print(c[i].getName().substring(c[i].getName().lastIndexOf('.')+1)); } } } System.out.print("{\n"); printConstructors(cl); System.out.println(); printMethods(cl); System.out.println(); printFields(cl); System.out.println("}"); } catch(ClassNotFoundException e){ e.printStackTrace(); } } public static void printConstructors(Class cl){ Constructor[] cons=cl.getDeclaredConstructors(); for(int i=0;i<cons.length;i++){ String name=cons[i].getName(); int a=name.lastIndexOf('.'); String name1=name.substring(a+1); System.out.print(Modifier.toString(cons[i].getModifiers())); System.out.print(" "+name1+"("); Class[] paramTypes=cons[i].getParameterTypes(); for(int j=0;j<paramTypes.length;j++){ if(j>0)System.out.print(","); System.out.print(paramTypes[j].getName().substring(paramTypes[j].getName().lastIndexOf('.')+1)); } System.out.println(");"); } } public static void printMethods(Class cl){ Method[] methods=cl.getDeclaredMethods(); for(int i=0;i<methods.length;i++){ Method m=methods[i]; Class r=m.getReturnType(); String name=Modifier.toString(m.getModifiers()); System.out.print(Modifier.toString(m.getModifiers())); System.out.print(" "+r.getName().substring(r.getName().lastIndexOf('.')+1)+" "+m.getName()+"("); Class[] p=m.getParameterTypes(); for(int j=0;j<p.length;j++){ if(j>0)System.out.print(","); System.out.print(p[j].getName().substring(p[j].getName().lastIndexOf('.')+1)); } System.out.println(");"); } } public static void printFields(Class cl){ Field[] fields=cl.getDeclaredFields(); for(int i=0;i<fields.length;i++){ Field f=fields[i]; String name=f.getName(); String type=f.getType().getName().substring(f.getType().getName().lastIndexOf('.')+1); System.out.print(Modifier.toString(f.getModifiers())); System.out.println(" "+type+" "+name+";"); } } } 在aop中以上两个东东非常有用 我也想问问:getDeclaredFields()和getFields()有什么区别?getDeclaredFields()好像没办法得到superClass的fields。 我怎么两个都没碰到过,《java编程思想》都看的差不多了,代理就是引用吧 关于子类 有在开发Eclipse插件时,使用log4j的例子吗? 五子棋网络+人机对战游戏编程 返回类型问题 请教, 关于super调用一个有些弱智的问题,大家别笑哈。。 怎么使用同名的不同类啊? 新手的一个简单问题~ 请问如何用JAVA做画流程图的软件 applet问题!!!!高手请进! 一道十分不解的JAVA问题 求助:请教各位大侠,Timer及TimerTask的使用 菜鸟问题,望大虾帮忙!
import java.lang.reflect.*;
import javax.swing.*;public class Reflection{
public static void main(String[] args){
String name;
if(args.length>0) name=args[0];
else name=JOptionPane.showInputDialog("input a class name(e.g java.util.date):");
try{
Class cl=Class.forName(name);
Class supercl=cl.getSuperclass();
Class[] c=cl.getInterfaces();
if(!cl.isInterface()){
System.out.print("class ");
}
else System.out.print("interface ");
System.out.print(cl.getName().substring(cl.getName().lastIndexOf('.')+1));
if(supercl!=null&&supercl!=Object.class)
System.out.print(" extends "+supercl.getName().substring(supercl.getName().lastIndexOf('.')+1));
if(c.length>0){
if(cl.isInterface()){
for(int i=0;i<c.length;i++){
System.out.print(" extents "+c[i].getName().substring(c[i].getName().lastIndexOf('.')+1));
}
}
else{
System.out.print(" implements ");
for(int i=0;i<c.length;i++){
if(i>0)System.out.print(",");
System.out.print(c[i].getName().substring(c[i].getName().lastIndexOf('.')+1));
}
}
}
System.out.print("{\n");
printConstructors(cl);
System.out.println();
printMethods(cl);
System.out.println();
printFields(cl);
System.out.println("}");
}
catch(ClassNotFoundException e){
e.printStackTrace();
}
}
public static void printConstructors(Class cl){
Constructor[] cons=cl.getDeclaredConstructors();
for(int i=0;i<cons.length;i++){
String name=cons[i].getName();
int a=name.lastIndexOf('.');
String name1=name.substring(a+1);
System.out.print(Modifier.toString(cons[i].getModifiers()));
System.out.print(" "+name1+"(");
Class[] paramTypes=cons[i].getParameterTypes();
for(int j=0;j<paramTypes.length;j++){
if(j>0)System.out.print(",");
System.out.print(paramTypes[j].getName().substring(paramTypes[j].getName().lastIndexOf('.')+1));
}
System.out.println(");");
}
}
public static void printMethods(Class cl){
Method[] methods=cl.getDeclaredMethods();
for(int i=0;i<methods.length;i++){
Method m=methods[i];
Class r=m.getReturnType();
String name=Modifier.toString(m.getModifiers());
System.out.print(Modifier.toString(m.getModifiers()));
System.out.print(" "+r.getName().substring(r.getName().lastIndexOf('.')+1)+" "+m.getName()+"(");
Class[] p=m.getParameterTypes();
for(int j=0;j<p.length;j++){
if(j>0)System.out.print(",");
System.out.print(p[j].getName().substring(p[j].getName().lastIndexOf('.')+1));
}
System.out.println(");");
}
}
public static void printFields(Class cl){
Field[] fields=cl.getDeclaredFields();
for(int i=0;i<fields.length;i++){
Field f=fields[i];
String name=f.getName();
String type=f.getType().getName().substring(f.getType().getName().lastIndexOf('.')+1);
System.out.print(Modifier.toString(f.getModifiers()));
System.out.println(" "+type+" "+name+";");
}
}
}
getDeclaredFields()好像没办法得到superClass的fields。