您的位置:首页 > 编程语言 > Java开发

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 反射机制