运行时动态地获取类的信息以及动态地调用对象的方法,叫做反射。
Java 反射(Reflection)是指 Java 程序在运行时,可以动态的加载、探知、使用编译期间完全未知的类。也就是说,Java 程序可以加载一个运行时才得知类名的类,获得类的完整构造方法,并实例化出对象,给对象属性设定值或者调用对象的方法等。这种在运行时动态获取类的信息以及动态调用对象方法的功能称为 Java 反射机制。
无论生成某类的多少个对象,这些对象都会对应于同一个class。
Class,Field,Method,Constructor.
使用反射的步骤:
1.获取需要操作的Class对象
2.调用Class的方法去获取Field Method的对象
3.使用反射的API进行操作
Class
类是使用 Java 反射机制的入口,封装了一个类或接口的运行时信息,开发者通过调用 Class
类的方法可以获取这些信息。例如可以通过 Class
中的 getDeclaredMethods()
方法获取类的所有方法。下面列举了获取 Class
对象的几种方法。
Class.forName("全类名")
将传入字符串形式的全类名,转为反射的入口 Class
对象,如下。
Class c = Class.forName("java.lang.Object");
类名.class
通过类名定义反射的入口 Class
对象,如下。
Class c = Car.class;
包装类.TYPE
通过包装类提供的 TYPE
属性,定义反射的入口 Class
对象,如下。
Class c = Integer.TYPE;
对象名.getClass()
通过 Object
基类中的 getClass()
方法,定义反射的入口 Class
对象,如下。
String name="大力士"; Class c = name.getClass();
Class
对象.getSuperClass()
通过 Class
类中的 getSuperClass()
方法,定义反射的入口 Class
对象,如下。
Class c = String.class. getSuperClass();
只有通过 Class
对象. getSuperClass()
方法才能获得 Class
类的父类的 Class
对象。