Java反射机制
2016-04-05 15:45
417 查看
1、Class类的使用
java语言中,静态的成员和普通数据类型不是对象类是对象,是java.lang.Class类的实例对象
任何一种类都是Class的实例对象,这个实例对象有三种表示
1、Class c1=foo.class;
2、Class c2=foo1.getClass();//已知该类的对象通过getClass方法
3、Class c3=null;
c3=Class.forName(“类全名称”);
Foo foo=(Foo)c1.newInstance();
2、动态加载类
Class.forName(“类全名称”)不仅代表了类的类类型,还代表了动态加载类
区分编译、运行
编译时刻加载类是静态加载类,运行时刻加载类是动态加载类(new创建的对象是静态加载类,在编译时刻就加载所有可能用到的类)功能性的类使用动态加载
3、获取方法的信息
获取类的类类型 Class c=object.getClass();//传递哪个子类的对象,c就是该子类的类类型
Method[] ms=c.getMathod();//获取的是所有的public函数,包括父类继承过来的
//getDeclaredMethods()获取的是所有该类自己声明的方法,不管访问权限
Class returnType=ms[0].getReturnType();//得到方法的返回值类型的类类型
ms[0].getName();//得到方法的名称
Class[] paraTypes=ms[0].getParameterTypes();//得到的是参数列表的类型的类类型
4、获取成员变量和构造函数信息
成员变量也是对象
Fields[] fs = c.getFields();//获取的是所有public的成员变量的信息
Fields[] fs = c.getDeclaredFields();//获取的是该类自己声明的成员变量的信息
Class fieldType = field.getType();
String typeName = fieldType.getName();//成员变量的类型的类类型
String fieldName = field.getName();//得到成员变量名称
构造函数也是对象
Class c= obj.getClass();
Constructor [] cs = c.getConstructors();//获取所有的public的构造函数
Constructor [] cs = c.getDeclaredConstructors();//得到所有声明的构造函数
Class[] paramTypes=constructor.getParameterTypes();//得到参数列表的类类型
5、方法反射
方法的名称和方法的参数列表才能唯一确定某个方法
方法的反射操作 method.invoke(对象,参数列表)
1、首先获取类的类类型 A a1 = new A(); Class c= obj.getClass();
2、获取方法 Method m=c.getMathod(“print”,new Class[]{int.class,int.class});
3、方法的反射操作,方法如果没有返回值就返回null Object o = m.invoke(a1,new Object[]{10,20});
ArrayList<String> array = new ArrayList<String>();//泛型只在编译时期起作用,是防止输入错误,而在运行期间是去泛型的,可以通过反射机制来绕开泛型的限制。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树