java reflect是什么?让我们一起来了解一下吧!
java reflect是反射机制,指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
实现反射的方法:
一、获得类的信息(获得到的是类的全路径信息)
获取类的信息有三种方法:
1.使用class类的forName()方法获取类的信息
2.使用实例的getClass()获取类的信息
3.通过类名获得类的信息
二、使用类的信息创建类
获得类的信息之后,可以使用reflect(反射)包下面的Field和Method类获得类的属性和方法,并对属性和方法进行操作。
获得类的全路径名以后可以通过使用Class类中的getDeclaredMethod(String name, Class
getDeclaredField(String name)方法如下:
public class ClassUtils { /** * 获取属性字段 * @param clazz 类 * @param fieldName 属性名称 * @throws Exception */ public static void getDeclaredField(Class clazz, String fieldName) throws Exception{ System.out.println(clazz.getDeclaredField(fieldName)); } } public class ClassTest { public static void main(String[] args) { try { Class clazz = Class.forName("reflectdemo.SuperHero"); //测试公有属性 ClassUtils.getDeclaredField(clazz, "ADDRESS"); //测试私有属性 ClassUtils.getDeclaredField(clazz, "name"); } catch (Exception e) { e.printStackTrace(); } } }
getDeclaredFields()方法如下:
public class ClassUtils { /** * 遍历clazz对象已有的成员变量 * @param clazz */ public static void getDeclaredFields(Class clazz){ Field[] fields = clazz.getDeclaredFields(); for (Field field: fields) { //如果要设置值,需要加入下面这句,反射对象在使用时不使用Java语言访问检查 //field.setAccessible(true); //直接打印Field System.out.println(field); //手动获取变量类型和变量名称 System.out.println(field.getType().getName() + " " +field.getName()); System.out.println("--------------------"); } } } public class ClassTest { public static void main(String[] args) { try { Class clazz = Class.forName("reflectdemo.SuperHero"); //遍历成员变量 ClassUtils.getDeclaredFields(clazz); } catch (Exception e) { e.printStackTrace(); } } }
以上就是小编今天的分享了,希望可以帮助到大家。