Reflection (reflection) is the key to being regarded as a dynamic language. The reflection mechanism allows the program to obtain the internal information of any class through the Reflection API during execution, and can directly operate any object. internal properties and methods. After the class is loaded, a Class type object is generated in the method area of the heap memory (a class has only one Class object). This object contains the complete structural information of the class. We can see the structure of the class through this object. This object is like a mirror. We can see the structure of the class through this mirror, so we vividly call it reflection.
java.lang.Class
: represents a class
java.lang.reflect.Method
: Represents the method of the class
java.lang.reflect.Field
: Represents the member variable of the class
java.lang.reflect.Constructor
: Constructor representing the class
static Class forName(String name)
Returns the Class object of the specified class name name
Object newInstance()
Call None Parameter constructor, return an instance of the Class object
getName()
Return the name of the entity (class, interface, array class, basic type or void) represented by this Class object
Class getSuperClass()
Returns the Class object of the parent class of the current Class object
Class [] getInterfaces()
Gets the interface of the current Class object
ClassLoader getClassLoader()
Returns the class loader of this class
Class getSuperclass()
Returns the Class that represents the super class of the entity represented by this Class
Constructor[] getConstructors()
Returns an array containing certain Constructor objects
Field[] getDeclaredFields()
Returns an array of Field objects ArrayMethod
getMethod(String name,Class … paramTypes)
Returns a Method object, the formal parameter type of this object is paramType
Example:
public class Person { private String name; private int age; public Person() { System.out.println("Person类被初始化了。。。。。^_^"); } public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
Reflection
public class ClassDemo { public static void main(String[] args) throws Exception { // 1. 创建Class对象 //Class<Person> clazz = (Class<Person>) Class.forName("Person"); Class<?> clazz =Class.forName("Person"); // 2. 通过Class对象调用其方法 // 2.1. 通过反射来实例化对象 //Person person = clazz.newInstance(); Object o = clazz.newInstance(); // 此名就相当于 Person p = new Person() // 2.2. 获取类的完整类名称(包名+类名) String name = clazz.getName(); System.out.println(name); // 2.3. 获取类的简单名称,就是类的名称,不含包名 System.out.println(clazz.getSimpleName()); // 2.4. 获取构造器 Constructor<?>[] constructors = clazz.getConstructors(); for (Constructor<?> constructor : constructors) { System.out.println(constructor.getName()); } // 2.5. 获取字段 Field[] fields = clazz.getFields(); for (Field field : fields) { System.out.println(field.getName()); } // 2.6. 获取方法 Method[] methods = clazz.getMethods(); for (Method method : methods) { System.out.println(method.getName()); } } }
public class Demo { public static void main(String[] args) throws Exception { // 第一种方式:调用Class.forName() Class clazz =Class.forName("java.lang.String"); // 第二种方式:通过类的字节码文件来创建 Class clazz1 = String.class; // 第三种方式:通过调用对象的getClass()方法来创建 String str = new String(); Class clazz2 = str.getClass(); // 第四种:通过类装载器来创建 ClassLoader loader =String.class.getClassLoader(); Class<?> clazz3 =loader.loadClass("java.lang.String"); } }
The above is the detailed content of What is the meaning and role of reflection in Java?. For more information, please follow other related articles on the PHP Chinese website!