--Reflection是Java程序开发语言的特质之一,它允许运行中的Java程序获取自身的信息,并且可以操作类 或对象内部的属性。
- Java的反射框架主要提供一下功能:
- 在运行时判断任意一个对象所属的类
- 在运行时构造任意一个类的对象
- 在运行时判断任意一个类所具有的成员变量和方法(通过反射甚至可以调用private方法)
- 在运行时调用任意一个对象的方法
- 反射的主要用途 : 最重要的用途就是开发各种通用框架。反射虽小,但是作用挺大,它是各种容器实现的核心,
- 反射的基本运用
- 获得class对象
- 使用class类的forName静态方法(在JDBC开发中常用到此方法加载数据库驱动)
- 获得class对象
example:Class.forName(driver);
- 直接获取某个对象的class
example: Class<?> klass = int .class;
Class<?> classInt = Integer.TYPE;
- 调用某个对象的getClass()方法
example: StringBuilder str = new StringBuilder("123");
Class<?> klass = str.getClass();
- 判断是否为某个类的实例
- 一般可以使用instanceof关键字来判断是否为某个类的实例,同时可以借助反射中Class对象的isInstance()方法来判断。
- 判断是否为某个类的实例
public native boolean isInstance(Object obj);
- 创建实例
- 使用Class对象的newInstance()方法来创建Class对象对应类的实例
- 先通过Class对象获取指定的Constructor对象,在调用Constructor对象的newInstance()方法来创建实例。这种方法可以用指定的构造器构造类的实例
- //获取String类带一个String参数的构造器
- 创建实例
Constructor constructor = c.getConstructor(String.class);
//根据构造器创建实例
Object obj = constructor.newInstance( "11111" );
System.out.println(obj);
- 获取方法
- getDeclaredMethods()方法返回类或接口声明的所有方法,包括公共、保护、默认和私有,但是不包括继承的方法
- 获取方法
---->public Method[] getDeclaredMethods() throws SecurityException
- getMethods()方法返回某个类的所有公用public方法,包括其继承类的公用方法
---->public Method getMethods() throws SecurityException
- getMethod()方法返回一个特定的方法,其中第一个参数为方法名称,后面的参数为方法的参数对应Class的对象
---->pubic Method getMethod(String name, Class<T>... parameterTypes)
- 获取构造器信息
- 获取类的成员变量(字段)信息
- 调用方法
- 利用反射创建数组
注: 由于反射会额外消耗一定的系统资源,因此如果不需要动态地创建一个对象,那么就不需要用反射。
另外,反射调用方法时可以忽略权限检查,因此可能会破坏封装性而导致安全问题。
版权声明:本文为qq_32919085原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。