java어떤 반성?
Reflection은 Java의 기능 중 하나이며 대상 객체를 간접적으로 조작하는 메커니즘입니다.
JAVA 리플렉션 메커니즘은 모든 엔터티 클래스에 대해 이 클래스의 모든 속성과 메서드를 알 수 있으며 해당 메서드와 속성을 호출할 수 있습니다. 동적으로 정보를 얻고 객체 메소드를 동적으로 호출하는 기능을 Java 언어의 반영 메커니즘이라고 합니다.
Java에서 리플렉션이 필요한 이유는 무엇인가요? 반성은 어떤 문제를 해결합니까?
한 문장에서 리플렉션은 jvm에 동적으로 컴파일하는 기능을 제공할 수 있습니다. 그렇지 않으면 클래스의 메타데이터 정보는 정적 컴파일을 통해서만 얻을 수 있습니다. , 핫 로딩, Tomcat의 클래스 로더 등은 지원할 수 없습니다.
Java에는 두 가지 컴파일 유형이 있습니다.
● 정적 컴파일: 유형은 다음에서 결정됩니다. 컴파일 시간. 바인딩된 개체가 전달됩니다.
● 동적 컴파일: 유형을 결정하고 런타임에 객체를 바인딩합니다. 동적 컴파일은 Java의 유연성을 극대화하고 다형성 애플리케이션을 구현하며 클래스 간의 결합을 줄일 수 있습니다.
Java 리플렉션은 동적(또는 준동적) 언어로 간주되는 Java의 핵심 속성입니다. 이 메커니즘을 사용하면 프로그램은 수정자(예: public, static 등), 슈퍼클래스(예: Object), 구현된 인터페이스(예: 복제 가능) 및 필드 및 메소드에 대한 모든 정보를 제공하며 런타임 시 필드 내용을 변경하거나 메소드를 호출할 수 있습니다.
Reflection은 런타임에 컴파일하는 동안 전혀 알려지지 않은 클래스를 로드, 감지 및 사용할 수 있습니다. 즉, Java 프로그램은 런타임에만 이름이 알려진 클래스를 로드하고, 완전한 구조를 얻고, 객체 엔터티를 생성하거나, 해당 필드에 대한 값을 설정하거나, 메소드를 호출할 수 있습니다.
Reflection을 사용하면 정적 언어가 런타임 시 프로그램의 구조와 동작을 검사하고 수정할 수 있습니다.
정적 언어에서는 변수를 사용할 때 해당 유형을 알아야 합니다. Java에서는 변수의 유형 정보가 컴파일 중에 클래스 파일에 저장되므로 런타임 시 정확성을 얻을 수 있습니다. 즉, 런타임 시 프로그램의 동작이 고정됩니다. 런타임에 변경하려면 리플렉션이 필요합니다.
Java 리플렉션 메커니즘을 구현하는 클래스는 모두 java.lang.reflect 패키지에 있습니다:
1 클래스 클래스: 클래스
#🎜를 나타냅니다. 🎜#2. 필드 클래스: 클래스의 멤버 변수를 나타냅니다(클래스 속성)3. 메소드 클래스: 생성자 클래스의 메소드를 나타냅니다4. 클래스#🎜 🎜#
5의 생성 방법을 나타냅니다. 배열 클래스: 배열을 동적으로 생성하고 배열 요소에 액세스하기 위한 정적 메서드를 제공합니다 사용
1. 획득 방법 세 가지. 클래스 객체
1.1 객체 ——> getClass();1.2 모든 데이터 유형(기본 데이터 유형 포함)에는 "정적" 클래스 속성이 있습니다1.3 클래스 클래스 메소드의 정적 특성을 통해: forName(String className)(일반적으로 사용됨)
/** * 获取Class对象的三种方式 * 1 Object ——> getClass(); * 2 任何数据类型(包括基本数据类型)都有一个“静态”的class属性 * 3 通过Class类的静态方法:forName(String className)(常用) * */ public class Fanshe { public static void main(String[] args) { //第一种方式获取Class对象 Student stu1 = new Student();//这一new 产生一个Student对象,一个Class对象。 Class stuClass = stu1.getClass();//获取Class对象 System.out.println(stuClass.getName()); //第二种方式获取Class对象 Class stuClass2 = Student.class; System.out.println(stuClass == stuClass2); //判断第一种方式获取的Class对象和第二种方式获取的是否是同一个 //第三种方式获取Class对象 try { Class stuClass3 = Class.forName("fanshe.Student"); //注意此字符串必须是真实路径,就是带包名的类路径,包名.类名 System.out.println(stuClass3 == stuClass2); //判断三种方式是否获取的是同一个Class对象 } catch (ClassNotFoundException e) { e.printStackTrace(); } System.out.println("*****************获取公有、无参的构造方法*************"); Constructor con = clazz.getConstructor(null); //1>、因为是无参的构造方法所以类型是一个null,不写也可以:这里需要的是一个参数的类型,切记是类型 //2>、返回的是描述这个无参构造函数的类对象。 System.out.println("*************获取公有字段**并调用*****************"); Field f = stuClass.getField("name"); System.out.println(f); System.out.println("***************获取私有的show4()方法******************"); m = stuClass.getDeclaredMethod("show4", int.class); System.out.println(m); m.setAccessible(true);//解除私有限定 Object result = m.invoke(obj, 20);//需要两个参数,一个是要调用的对象(获取有反射),一个是实参 System.out.println("返回值:" + result); } }
위 내용은 자바는 어떤 리플렉션인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

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

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

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.
