>  기사  >  Java  >  Java에서 리플렉션의 의미와 역할은 무엇인가요?

Java에서 리플렉션의 의미와 역할은 무엇인가요?

WBOY
WBOY앞으로
2023-04-21 15:16:081442검색

1. 리플렉션 개요

리플렉션(리플렉션)은 동적 언어로 간주되는 핵심입니다. 리플렉션 메커니즘을 사용하면 프로그램이 실행 중에 Reflection API의 도움으로 모든 클래스의 내부 정보를 얻을 수 있으며 직접 모든 객체의 내부 속성과 메서드를 작동합니다. 클래스가 로드된 후 힙 메모리의 메서드 영역에 클래스 유형 개체가 생성됩니다(클래스에는 클래스 개체가 하나만 있음). 이 개체에는 클래스의 전체 구조 정보가 포함됩니다. 우리는 이 오브제를 통해 클래스의 구조를 볼 수 있습니다. 이 오브제는 마치 거울과도 같습니다. 우리는 이 거울을 통해 클래스의 구조를 볼 수 있으므로 이를 생생하게 반영이라고 부릅니다.

2. 일반적으로 사용되는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제