java反射
一、反射的作用:
PS:Class表示一个类的完全限定名
1、反编译:.class-->.java
2、通过反射机制访问java对象的属性,方法,构造方法等;
二、反射用到的类
java.lang.Class;
java.lang.reflect.Constructor;
java.lang.reflect.Field;
java.lang.reflect.Method;
java.lang.reflect.Modifier;
三、反射步骤
1、反射的三种方式//方式1:使用类的完全限定名Class c = Class.forName("com.ui.Emp");
//方式2:java中每个类型都有class 属性.Class c2 = Emp.class;//方式3:java每个对象都有getClass() 方法Emp e = new Emp();Class c3 = e.getClass(); //c3是运行时类 (e的运行时类是Emp)
2、获取对象
1、调用其构造方法获取对象
Emp e=(Emp)c.newInstance();
3、操作
1、Class类
c.getSimpleName(); //获取此Class的类名字
c.getCanonicalName(); //返回 Java Language Specification 中所定义的底层类的规范化名称。
c.getModifiers(); //获取此Class的修饰符,数字形式
Modifier.toString(c.getModifiers()); //获取此属性--修饰符int转String的形式
2、获取此类所有属性
Field[] fs = c.getDeclaredFields();
f.getName(); //获取此属性--名字
f.getModifiers(); //获取此属性--修饰符数字形式
f.getType(); //获取此属性--数据类型
f.toString(); //返回一个描述此对象的字符串
Field f = c.getDeclaredField("id"); //获取指定名称属性
f.setAccessible(true); //打开私有属性
f.set(e,"110"); //为e对象的id属性赋值"110"
f.get(e); //获取e对象的id属性
3、获取此类所有方法
Method[] ms = c.getDeclaredMethods();
m.getName(); //获取方法名字
m.getReturnType(); //获取此方法的返回值类型
m.getParameterTypes(); //返回方法形参类型(返回一个Class数组)
m.getModifiers(); //返回修饰符int形式
m.toGenericString(); //返回一个描述此对象的字符串
m.invoke(e,arg1,arg2,...); //执行e对象上的m代表的方法,后面是参数
4、获取此类所有构造方法
Constructor<?>[]cs= c.getDeclaredConstructors();