javaoop--反射详解

1.所谓 反射: 就是说 你的程序 在 需要某些功能时,才会加载某些 对应的 类的 资源,

          (在我看来,就是说 你不用 去 导入包-----实例化对象,就可以 使用某些类中的方法

            或者说: 你可以很方便的 使用 某些方法)

2. 接着 直接上 使用的方法:

——————————————————————————————————————

                   1.使用反射 把 类中的 所有 方法 遍历出来-----------然后生成 对象----------生成对象后 还可以调用,

// 先加载某个类

Class cls = Class.forName("com.xt.vo.Student");                                                          如果 是一个已知的方法那么就可以 很 简单(名字,类型)

// 获取方法   所有方法组成的 一个 数组                                                                                Method m=cls.getMethod("getName",java.lang.String.class);

  Method [] methods = cls.getMethods();                                                         使用这个方法 就是:m.invoke( 实例化对象  ,"马云");
// 遍历出来                                                                                                                                                                           就是: cls.newInstance()
   for(Method m:methods){
    System.out.println("方法名:"+m.getName();

// 获取 出 每一个方法 里面的 参数类型 方便 以后 的 调用      每一个 返回结果是 数组 ,都需要 定义数组 来 接收 
    Class parameters [] = m.getParameterTypes();                    还有 对 每一个 数组里面的  元素 进行操作 , 就需要 遍历出来

    if(parameters!=null && parameters.length>0){                         遍历 出来 才可以进行 操作
    System.out.println("参数类型为:");                                            


    for(Class c : parameters){                                              
    System.out.print(c.getName()+"\t");
    }
    System.out.println();
    }
   
   }

//还可以 获取  返回值的 类型

         Class rety=m.getReturnType();

        可以 得到 类型名:      rety.getName();

————————————————————————————————————————

                 2.还可以 获取一个 完整的 类结构

                Class cls=String.class;
System.out.println("类的名称为:"+cls.getName());
System.out.println("是否为数组"+cls.isArray());
System.out.println("所在包:"+cls.getPackage());
System.out.println("父类:"+cls.getSuperclass());

————————————————————————————————


你可能感兴趣的:(javaoop--反射详解)