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());
————————————————————————————————