이 글은 리플렉션이 무엇인지, 리플렉션이 무엇을 할 수 있는지, 리플렉션 관련 API 등 리플렉션 메커니즘과 관련된 문제를 주로 소개하는 java에 대한 관련 지식을 제공합니다. 모든 사람에게 도움이 되기를 바랍니다.
추천 학습: "Java 학습 튜토리얼"
Java 개발에서 매우 중요한 개념은 Java의 중요한 기능 중 하나인 Java Reflection 메커니즘입니다.
리플렉션의 개념은 Smith가 1982년에 처음 제안했습니다. 이는 주로 리플렉션을 통해 개인 메서드와 개인 속성을 호출할 수 있는 자체 상태 또는 동작에 액세스하고 이를 감지하고 수정하는 프로그램의 기능을 의미합니다. 반사의 원리를 사용합니다.
Reflection(리플렉션)은 동적 언어로 간주되는 핵심입니다. 리플렉션 메커니즘을 사용하면 프로그램이 실행 중에 Reflection API를 통해 모든
클래스의 내부 정보를 얻을 수 있으며 내부 속성과 메서드를 직접 조작할 수 있습니다. 어떤 물체의.
클래스에는 멤버 변수, 메서드, 생성자 등과 같은 여러 구성 요소가 있습니다. 리플렉션은 클래스를 로드하고 클래스의 다양한 구성 요소를 분석하는 것입니다.
Java의 리플렉션 메커니즘은 클래스의 기본 구조를 알고 있습니다. 이러한 Java 클래스의 구조를 감지하는 기능을 Java 클래스의 "자체 검사"라고 합니다. 예를 들어, Eclipse에서 한 번의 클릭으로 컴파일 도구는 사용자가 선택할 수 있도록 개체에서 사용할 수 있는 모든 메서드와 속성을 자동으로 나열합니다. 이는 Java 리플렉션 원리를 사용하여 우리가 생성한 객체를 감지하고 자체 검사합니다.
Reflection은 다음을 수행할 수 있습니다.
java.lang.Class
: 리플렉션 소스java.lang.reflect.Method
: Methodjava.lang.reflect.Field
: 속성 java.lang .reflect.Constructor
: 생성자 java.lang.Class
:反射的源头java.lang.reflect.Method
:方法java.lang.reflect.Field
:属性java.lang.reflect.Constructor
:构造器程序经过javac.exe命令以后,会生成一个或多个字节码文件(.class结尾)。接着我们使用java.exe命令对某个字节码文件进行解释运行。相当于将某个字节码文件加载到内存中。此过程就称为类的加载。加载到内存中的类,我们就称为运行时类,此运行时类,就作为Class的一个实例。
换句话说,Class的实例就对应着一个运行时类。
加载到内存中的运行时类,会缓存一定的时间。在此时间之内,我们可以通过不同的方式
来获取此运行时类。
在我们new对象或者使用Class.forName("包名.类")
时类加载器(ClassLoader)
会将类加载到内存中,并且创建一个Class对象
如何获取Class对象?
类.class
对象.getClass()
Class.forName
…
수업 로딩
이라고 합니다. 메모리에 로드된 클래스를 런타임 클래스라고 하며, 이 런타임 클래스는 Class의 인스턴스로 사용됩니다.Loading:
🎜클래스는 새로운 객체를 사용하거나Class.forName("Package name.Class")
를 사용할 때 로드됩니다. (ClassLoader)
는 클래스를 메모리에 로드하고 클래스 객체를 생성합니다🎜🎜🎜클래스 객체를 얻는 방법🎜🎜🎜🎜🎜🎜Class.class
🎜 🎜 🎜🎜Object.getClass()
🎜🎜🎜🎜Class.forName
("패키지 이름. 클래스");🎜🎜🎜🎜🎜🎜링크: 🎜🎜🎜🎜 링크 수행된 주요 작업은 바이트코드가 적합한지 확인하고, 정적 메모리 공간을 할당하고 초기화하는 것입니다(실제 초기화가 아니라 해당 유형의 변수에 int를 0으로, double을 0.0으로 지정하는 것과 같은 기본값을 지정합니다) 🎜🎜 🎜🎜 언로드: 🎜🎜🎜🎜메모리에서 언로드(언로드할 때 신경 쓸 필요가 없으며 JVM에 의해 수행됨) 🎜🎜🎜(3) 클래스 로더 🎜🎜🎜클래스(CLASS)는 그 후에만 실행될 수 있습니다. JVM에 로드됩니다. 지정된 프로그램을 실행할 때 JVM은 요구 사항 및 특정 규칙에 따라 컴파일된 .class 파일을 메모리에 로드하고 이를 완전한 Java 애플리케이션으로 구성합니다. 이 로딩 프로세스는 클래스 로더에 의해 완료됩니다. 특히 ClassLoader 및 해당 하위 클래스에 의해 구현됩니다. 클래스 로더 자체도 클래스입니다. 그 본질은 하드 디스크에서 메모리로 클래스 파일을 읽는 것입니다. 🎜🎜클래스 로더 분류: 🎜BootStrap:
은 주로 핵심 클래스 라이브러리(java.lang.*
등) 로드, ExtClassLoader
및 구성을 담당합니다. APPClassLoader
code>;BootStrap:
主要负责加载核心的类库(java.lang.*
等),构造ExtClassLoader
和APPClassLoader
;ExtClassLoader:
主要负责加载jre/lib/ext目录下的一些扩展的jar包;AppClassLoader:
ExtClassLoader:
jre/lib/ext 디렉토리에 일부 확장 jar 패키지를 로드하는 일을 주로 담당합니다.AppClassLoader:
주로 다음 작업을 담당합니다. 애플리케이션 클래스의 주요 기능 로드(작성한 Java 파일은 이 클래스 로더에 의해 로드됨)
System.out.println("app:" + System.getProperty("java.class.path")); System.out.println("ext:" + System.getProperty("java.ext.dirs")); System.out.println("----bootstrap---"); String[] str = System.getProperty("sun.boot.class.path").split(";"); for (String s : str) { System.out.println(s); }
부모 위임(디스패치) 메커니즘:
위 내용은 JAVA 반영 메커니즘(요약 공유)을 이해하게 해주세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!