리플렉션(리플렉션)은 동적 언어로 간주되는 핵심입니다. 리플렉션 메커니즘을 사용하면 프로그램이 실행 중에 Reflection API의 도움으로 모든 클래스의 내부 정보를 얻을 수 있으며 직접 모든 객체의 내부 속성과 메서드를 작동합니다. 클래스가 로드된 후 힙 메모리의 메서드 영역에 클래스 유형 개체가 생성됩니다(클래스에는 클래스 개체가 하나만 있음). 이 개체에는 클래스의 전체 구조 정보가 포함됩니다. 우리는 이 오브제를 통해 클래스의 구조를 볼 수 있습니다. 이 오브제는 마치 거울과도 같습니다. 우리는 이 거울을 통해 클래스의 구조를 볼 수 있으므로 이를 생생하게 반영이라고 부릅니다.
java.lang.Class
: 클래스를 나타냅니다java.lang.Class
:代表一个类
java.lang.reflect.Method
:代表类的方法
java.lang.reflect.Field
:代表类的成员变量
java.lang.reflect.Constructor
:代表类的构造器
static Class forName(String name)
返回指定类名 name 的 Class 对象
Object newInstance()
调用无参构造函数,返回该Class对象 的一个实例
getName()
返回此Class对象所表示的实体(类、 接口、数组类、基本类型或void)名称
Class getSuperClass()
返回当前Class对象的父类的Class对象
Class [] getInterfaces()
获取当前Class对象的接口
ClassLoader getClassLoader()
返回该类的类加载器
Class getSuperclass()
返回表示此Class所表示的实体的超类的Class
Constructor[] getConstructors()
返回一个包含某些Constructor对象的数组
Field[] getDeclaredFields()
返回Field对象的一个数组 Method
getMethod(String name,Class … paramTypes)
java.lang.reflect.Method
: 클래스의 메소드를 나타냅니다 java.lang.reflect.Field
: 클래스의 멤버 변수를 나타냅니다.java.lang.reflect.Constructor
: 클래스의 생성자를 나타냅니다
static Class forName(String name )
지정된 클래스 이름을 가진 Class 객체를 반환합니다. 🎜🎜Object newInstance()
인수가 없는 생성자를 호출하고 Class 객체의 인스턴스를 반환합니다. 🎜🎜getName() 이 클래스 객체가 나타내는 엔터티(클래스, 인터페이스, 배열 클래스, 기본 유형 또는 void)의 이름을 반환합니다.🎜🎜Class getSuperClass()
클래스 객체를 반환합니다. 현재 클래스 객체의 상위 클래스🎜🎜Class [] getInterfaces()
현재 클래스 객체의 인터페이스를 가져옵니다🎜🎜ClassLoader getClassLoader()
의 클래스 로더를 반환합니다. class🎜🎜Class getSuperclass()
이 Class가 나타내는 엔터티의 슈퍼클래스를 나타내는 클래스를 반환합니다.🎜🎜Constructor[] getConstructors()
일부 생성자 객체를 포함하는 배열을 반환합니다. 🎜🎜Field[] getDeclaredFields()
code> 필드 객체의 배열을 반환합니다. Method🎜🎜getMethod(String name,Class ... paramTypes)
메소드 객체를 반환합니다. 이 객체의 형식 매개변수 유형은 paramType🎜🎜예: 🎜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()); } } }🎜3 클래스 객체를 생성하는 네 가지 방법🎜
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"); } }
위 내용은 Java에서 리플렉션의 의미와 역할은 무엇인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!