第一遍看是看不懂的,反正我就是!
第二遍还行,反正这是弄JDK系统的人才要了解,普通编程一般不太用到!
就反射反映javabean的内部结构有用!

解决方案 »

  1.   

    初学可以跳过去,不到相关的开发基本都用不上,不过了解了其中的原理对你学习的java有帮助。
      

  2.   

    给你一个反射的例子,用来显示一个类中的方法和变量
    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+";");
    }
    }
    }
      

  3.   

    在aop中以上两个东东非常有用
      

  4.   

    我也想问问:getDeclaredFields()和getFields()有什么区别?
    getDeclaredFields()好像没办法得到superClass的fields。
      

  5.   

    我怎么两个都没碰到过,《java编程思想》都看的差不多了,代理就是引用吧