찾다
Javajava지도 시간Java에서 리플렉션의 의미와 역할은 무엇인가요?

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());
        }
    }
}</person></person>
🎜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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는