Java反射
来源:互联网 发布:随意裁剪图片软件 编辑:程序博客网 时间:2024/06/05 22:29
在Java中一切皆对象,但是基本数据类型(int ,char,double,folat,baty),静态成员属于类。其实类也是对象,他是java.lang.Class类的实例对象。JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
1.Class类是对象,是Java.lang.Class类的实例对象,但是不能通过new关键字获取(他的构造函数私有);但是有三种获取方式:
1.Class c1=类名.Class 实际上每一个类都有一个隐含的静态成员变量class;
2.已知该类的对象,通过getClass方法
Class c2=对象名.getClass();
3.Class c3=Class.forName(“类所在的位置”);
2.Java中类的动态加载:
Class.forName(“类所在位置”),不仅表示了类的类型,还代表动态加载类。在此说明编译时刻是静态加载,运行时刻加载类是动态加载类。new对象是静态加载类的,在编译时刻就需要加载所有可能用到的类。而有些情况需要我们进行动态加载如:
class c1=Class.forName(args[0]);//根据输入的内容加载类
3.获取类的所有信息:
方法:
Class c=obj.getClass();//获取Class 类
String name=c.getName();//获取类的名称
//获取类的所有方法,获取的是public,同时也包括父类继承而来的
Method []ms=c.getMethods();
//获取本类中的方法
Mothod []ms=c.getDeclaredMethods();
//方法返回值类型
ms[i].getReturnType();
//方法名称
ms[i].getName();
//获取方法参数 :
Class [] paraType=ms[i].getParamTypes();
成员变量:
Field类封装了关于成员变量的操作
//getFileds()方法获取所有public的成员变量信息。
Filed [] fs=c.getFileds();
//获取本类中成员变量
Filed [] fs=c.getDeclaredFileds()
构造函数:
Constructor [] con=c.getConstructors();
Constructor [] con =c.getDeclaredConstructors();
4.方法的反射:
1.如何获取某个方法:方法的名称和方法的参数列表唯一决定
2.方法的反射的操作: method.invoke(对象,参数列表);
另外说明泛型,集合发的泛型是防止错误输入的,在 编译之后是去泛型化得,Java中集合的泛型只是在编译的阶段有效,绕过编译就无效了,可以通过方法的反射来操作绕过编译。
- 【反射】JAVA反射机制
- JAVA 反射
- java 反射
- Java反射
- java反射
- java反射
- JAVA反射
- java 反射
- Java 反射
- java 反射
- Java反射
- java反射
- JAVA 反射
- java 反射
- Java反射
- java反射
- java 反射
- java 反射
- 初学unity3D小结
- APP UI Design ——sketch(二)
- 蚁群算法代码
- NS_DESIGNATED_INITIALIZER 正确编写Designated Initializer的几个原则
- 神奇的CSS技巧探秘——关于边框特效
- Java反射
- 创建初始上下文
- 堆和栈的理论知识
- 如何学习嵌入式
- SSM实战记录(一)--一个大体的分页流程
- Codeforces Round #348 (VK Cup 2016 Round 2, Div. 1 Edition)
- 小白学习JavaScript初体验
- #leetcode#202. Happy Number
- 内部类