JAVA 반영 메커니즘(요약 공유)을 이해하게 해주세요.
이 글은 리플렉션이 무엇인지, 리플렉션이 무엇을 할 수 있는지, 리플렉션 관련 API 등 리플렉션 메커니즘과 관련된 문제를 주로 소개하는 java에 대한 관련 지식을 제공합니다. 모든 사람에게 도움이 되기를 바랍니다.
추천 학습: "Java 학습 튜토리얼"
1. 리플렉션이란?
Java 개발에서 매우 중요한 개념은 Java의 중요한 기능 중 하나인 Java Reflection 메커니즘입니다.
리플렉션의 개념은 Smith가 1982년에 처음 제안했습니다. 이는 주로 리플렉션을 통해 개인 메서드와 개인 속성을 호출할 수 있는 자체 상태 또는 동작에 액세스하고 이를 감지하고 수정하는 프로그램의 기능을 의미합니다. 반사의 원리를 사용합니다.
Reflection(리플렉션)은 동적 언어로 간주되는 핵심입니다. 리플렉션 메커니즘을 사용하면 프로그램이 실행 중에 Reflection API를 통해 모든
클래스의 내부 정보를 얻을 수 있으며 내부 속성과 메서드를 직접 조작할 수 있습니다. 어떤 물체의.
클래스에는 멤버 변수, 메서드, 생성자 등과 같은 여러 구성 요소가 있습니다. 리플렉션은 클래스를 로드하고 클래스의 다양한 구성 요소를 분석하는 것입니다.
2. 반사는 무엇을 할 수 있나요?
Java의 리플렉션 메커니즘은 클래스의 기본 구조를 알고 있습니다. 이러한 Java 클래스의 구조를 감지하는 기능을 Java 클래스의 "자체 검사"라고 합니다. 예를 들어, Eclipse에서 한 번의 클릭으로 컴파일 도구는 사용자가 선택할 수 있도록 개체에서 사용할 수 있는 모든 메서드와 속성을 자동으로 나열합니다. 이는 Java 리플렉션 원리를 사용하여 우리가 생성한 객체를 감지하고 자체 검사합니다.
Reflection은 다음을 수행할 수 있습니다.
- 런타임에 모든 객체가 속하는 클래스를 결정합니다.
- 런타임에 모든 클래스의 객체를 생성합니다.
- 런타임에 모든 클래스의 멤버 변수와 메서드를 결정합니다.
- 런타임에 모든 객체의 멤버 변수 및 메소드 호출
- 동적 에이전트 생성
-
java.lang.Class
: 리플렉션 소스 -
java.lang.reflect.Method
: Method
java.lang.reflect.Field
: 속성
-
java.lang.Class
:反射的源头 -
java.lang.reflect.Method
:方法 -
java.lang.reflect.Field
:属性 -
java.lang.reflect.Constructor
:构造器 - …
java.lang .reflect.Constructor
: 생성자 4、Class类的理解
(1)、介绍:
程序经过javac.exe命令以后,会生成一个或多个字节码文件(.class结尾)。接着我们使用java.exe命令对某个字节码文件进行解释运行。相当于将某个字节码文件加载到内存中。此过程就称为类的加载。加载到内存中的类,我们就称为运行时类,此运行时类,就作为Class的一个实例。
换句话说,Class的实例就对应着一个运行时类。
加载到内存中的运行时类,会缓存一定的时间。在此时间之内,我们可以通过不同的方式
来获取此运行时类。
(2)、类的加载过程:
加载:
在我们new对象或者使用Class.forName("包名.类")
时类加载器(ClassLoader)
会将类加载到内存中,并且创建一个Class对象
如何获取Class对象?
类.
class
对象.
getClass()
Class.forName
…
(1), 소개:
프로그램은 javac.exe를 통과합니다. 명령을 실행한 후 하나 이상의 바이트코드 파일(.class로 끝남)이 생성됩니다. 그런 다음 java.exe 명령을 사용하여 특정 바이트코드 파일을 해석하고 실행합니다. 특정 바이트코드 파일을 메모리에 로드하는 것과 같습니다. 이 과정을수업 로딩
이라고 합니다. 메모리에 로드된 클래스를 런타임 클래스라고 하며, 이 런타임 클래스는 Class의 인스턴스로 사용됩니다.즉, Class의 인스턴스는 런타임 클래스에 해당합니다. 메모리에 로드된 런타임 클래스는 일정 기간 동안 캐시됩니다. 이 시간 내에 우리는 다양한 방법으로 이 런타임 클래스를 얻을 수 있습니다.
(2). 클래스 로딩 프로세스: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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











Java의 Weka 가이드. 여기에서는 소개, weka java 사용 방법, 플랫폼 유형 및 장점을 예제와 함께 설명합니다.

Java의 Smith Number 가이드. 여기서는 정의, Java에서 스미스 번호를 확인하는 방법에 대해 논의합니다. 코드 구현의 예.

이 기사에서는 가장 많이 묻는 Java Spring 면접 질문과 자세한 답변을 보관했습니다. 그래야 면접에 합격할 수 있습니다.

Java 8은 스트림 API를 소개하여 데이터 컬렉션을 처리하는 강력하고 표현적인 방법을 제공합니다. 그러나 스트림을 사용할 때 일반적인 질문은 다음과 같은 것입니다. 기존 루프는 조기 중단 또는 반환을 허용하지만 스트림의 Foreach 메소드는이 방법을 직접 지원하지 않습니다. 이 기사는 이유를 설명하고 스트림 처리 시스템에서 조기 종료를 구현하기위한 대체 방법을 탐색합니다. 추가 읽기 : Java Stream API 개선 스트림 foreach를 이해하십시오 Foreach 메소드는 스트림의 각 요소에서 하나의 작업을 수행하는 터미널 작동입니다. 디자인 의도입니다

Java의 TimeStamp to Date 안내. 여기서는 소개와 예제와 함께 Java에서 타임스탬프를 날짜로 변환하는 방법에 대해서도 설명합니다.

캡슐은 3 차원 기하학적 그림이며, 양쪽 끝에 실린더와 반구로 구성됩니다. 캡슐의 부피는 실린더의 부피와 양쪽 끝에 반구의 부피를 첨가하여 계산할 수 있습니다. 이 튜토리얼은 다른 방법을 사용하여 Java에서 주어진 캡슐의 부피를 계산하는 방법에 대해 논의합니다. 캡슐 볼륨 공식 캡슐 볼륨에 대한 공식은 다음과 같습니다. 캡슐 부피 = 원통형 볼륨 2 반구 볼륨 안에, R : 반구의 반경. H : 실린더의 높이 (반구 제외). 예 1 입력하다 반경 = 5 단위 높이 = 10 단위 산출 볼륨 = 1570.8 입방 단위 설명하다 공식을 사용하여 볼륨 계산 : 부피 = π × r2 × h (4

Spring Boot는 강력하고 확장 가능하며 생산 가능한 Java 응용 프로그램의 생성을 단순화하여 Java 개발에 혁명을 일으킨다. Spring Ecosystem에 내재 된 "구성에 대한 협약"접근 방식은 수동 설정, Allo를 최소화합니다.
