Reflection은 객체와 클래스가 어떤 것인지 컴파일 타임에 예측이 불가능하고, 프로그램이 실행될 때의 정보를 통해서만 객체와 클래스의 정보를 알 수 있다는 문제를 해결할 수 있습니다. 달리기.
두 사람이 공동으로 개발할 경우 상대방의 클래스명만 알면 예비 개발이 진행됩니다.
클래스 객체 가져오기
Class.forName(String clazzName) 정적 메서드
클래스의 클래스 속성 호출 , Person. 클래스는 Person 클래스 객체를 반환합니다(권장)
객체의 getClass() 메서드 호출
특정 용도 여전히 실제 상황에 따라 선택해야 합니다. 첫 번째 방법은 클래스 이름만 알면 됩니다. 두 번째 및 세 번째 방법은
클래스 정보 가져오기
클래스 생성자 가져오기
Connstructor<t> getConstructor(Class>...parameterTypes)</t>
: 지정된 형식 매개변수를 사용하여 이 Class 객체의 해당 클래스를 반환합니다. 공용 생성자Constructor>[] getConstructors()
: 이 클래스 객체에 해당하는 클래스의 모든 공용 생성자를 반환합니다.Constructor<t>[] getDeclaredConstructor(Class>...parameterTypes)</t>
: 이 클래스 객체를 반환합니다. 해당 클래스의 지정된 매개변수가 있는 생성자Constructor>[] getDeclaredConstructors()
: 이 클래스 객체의 해당 클래스의 모든 생성자를 반환하고 생성자의 액세스 권한은 관련 없음
클래스 멤버 메소드 가져오기
-
Method getMethod(String name,Class>...parameterTypes)
: 이 클래스 객체의 해당 클래스의 지정된 형식 매개변수를 사용하여 공용 메소드를 반환합니다 Method[] getMethods()
: 이 클래스 객체가 나타내는 클래스의 모든 공개 메서드를 반환합니다.Method getDeclaredMethod(string name,Class>...parameterTypes)
: 이 클래스 객체에 해당하는 지정된 클래스를 반환합니다. 형식 매개변수의 메소드는 메소드 접근권한과 무관Method[] getDeclaredMethods()
: 이 클래스 객체의 해당 클래스의 모든 메소드를 반환하며, 메소드와는 아무런 관련이 없다. 접근 권한
클래스 멤버 변수 가져오기
Field getField(String name)
: 이 클래스 객체에 해당하는 지정된 이름의 공용 멤버 변수를 반환합니다Field[] getFields()
: 이 클래스 객체에 해당하는 클래스의 모든 공용 멤버 변수를 반환합니다.Field getDeclaredField(String name)
: 지정된 멤버 변수를 반환합니다. 멤버 변수 접근 권한에 관계없이 이 클래스 객체에 해당하는 클래스 이름Field[] getDeclaredFields()
: 접근 권한에 관계없이 이 클래스 객체에 해당하는 클래스의 모든 멤버 변수를 반환합니다. 멤버 변수
클래스 주석 가져오기
<a extends annotation>A getAnnotation(Class</a><a>annotationClass)</a>
: 클래스의 해당 클래스에 대한 지정된 유형의 Annotation을 가져옵니다. 유형 주석이 없으면 null<a extends annotation>A getDeclaredAnnotation(Class</a><a>annotationClass)</a>
을 반환합니다. 이는 Java 8의 새로운 기능입니다. 이 메서드는 해당 클래스를 직접 수정하는 지정된 유형의 주석을 가져옵니다. 클래스 객체가 없으면 nullAnnotation[] getAnnotations()
을 반환합니다. 수정하는 모든 주석Annotation[] getDeclaredAnnotations()
을 반환합니다. 이 클래스 객체의 해당 클래스: 이 클래스 객체의 해당 클래스를 수정하는 모든 주석을 반환합니다<a extends annotation>A[] getAnnotationByType(Class</a><a>annotationClass)</a>
: 이 메서드의 기능은 기본적으로 getAnnotation() 메서드와 유사합니다. 앞서 소개했지만 Java8에서는 반복 주석 기능을 추가했기 때문에 클래스를 수정하는 지정된 유형의 여러 주석을 얻으려면 이 방법을 사용해야 합니다<a extends annotation>A[] getDeclaredAnnotationByType(Class</a><a>annotationClass)</a>
: 이 메소드는 앞서 소개한 getDeclaredAnnotations() 메소드와 유사합니다. 이는 Java8의 반복 주석 기능 때문이기도 합니다. 다중 주석 을 직접 수정하는 지정된 유형을 얻으려면 이 메소드를 사용해야 합니다.
이 클래스의 내부 클래스 가져오기
Class>[] getDeclaredClasses()
: 이 클래스 구성의 해당 클래스에 포함된 모든 내부 클래스를 반환
이 클래스의 객체가 있는 외부 클래스 가져오기
Class> getDeclaringClass()
: Class 객체의 해당 클래스가 있는 외부 클래스를 반환
이 클래스 객체의 해당 클래스에 의해 구현된 인터페이스 가져오기
Class>[] getInterfaces()
: 이 클래스 객체의 해당 클래스에 의해 구현된 모든 인터페이스를 반환합니다
이 클래스 객체의 해당 클래스에 상속된 상위 클래스를 가져옵니다
Class super T> getSuperclass()
: 해당 클래스의 상위 클래스의 Class 객체를 반환합니다. 이 클래스 객체의
이 클래스 객체의 해당 클래스에 대한 수정자, 패키지, 클래스 이름 등과 같은 기본 정보를 가져옵니다
int getModifiers()
: 이 클래스 또는 인터페이스를 반환합니다. 모든 수정자는 public, protected, private, final, static, abstract 등 해당 상수로 구성됩니다. 반환된 정수는 다음 메서드를 사용하여 디코딩해야 합니다. 실제 수정자를 얻기 위한 수정자 도구 클래스Package getPackage()
: 이 클래스의 패키지를 가져옵니다.String getName()
: 이 CLAs를 반환합니다. String 형식으로 객체가 표현하는 클래스의 약어
클래스가 인터페이스, 열거형, 주석형인지 확인
boolean isAnnotation()
: 이 클래스 반환 객체가 주석 유형을 나타내는지 여부-
boolean isAnnotationPresent(Class extends Annotation>annotationClass)
: 이 클래스 객체가 클래스 주석으로 장식되었는지 확인 boolean isAnonymousClass()
: 이 클래스를 반환합니다. 객체가 익명 클래스boolean isArray()
인지 여부를 반환합니다. 배열클래스boolean isEnum()
을 나타냅니다. 이 클래스 객체가 열거형boolean isInterface()
을 나타내는지 여부를 반환합니다. 이 클래스 객체가 인터페이스를 나타내는지 여부를 반환합니다.boolean isInstance(<a href="http://www.php.cn/wiki/60.html" target=" _blank">Object<code>boolean isInstance(<a href="http://www.php.cn/wiki/60.html" target="_blank">Object</a> obj)
obj): obj 결정 이 클래스 개체의 인스턴스인지 여부에 관계없이 이 메서드는 operator
operator结果
를 완전히 대체할 수 있습니다.
public interface Colorable { public void value(); }
- Java8의 새로운 기능 메서드 매개변수 반영
int getParameterCount()
: 생성자 또는 메서드의 형식 매개변수 개수 가져오기 Parameter[] getParameters()
: 생성자 또는 메소드의 모든 형식 매개변수를 가져옵니다. getModifiers()
: 형식 매개변수를 수정하는 수정자를 가져옵니다. String getName()
: 형식 매개변수 이름 가져오기 Type getParameterizedType()
: 제네릭을 사용하여 형식 매개변수 유형 가져오기 Class>getType()
: 형식 매개변수 유형을 가져옵니다. boolean isNamePresent()
: 해당 클래스의 클래스 파일에 해당 메서드의 형식 매개변수 이름 정보가 포함되어 있는지 여부를 반환합니다. boolean isVarArgs()
: 이 방법은 매개변수가 가변 개수의 형식 매개변수인지 여부를 확인하는 데 사용됩니다
结果
public class ClassInfo { public static void main(String[] args) throws NoSuchMethodException, SecurityException { Class<Colorable> cls=Colorable.class; System.out.println(cls.getMethod("value")); System.out.println(cls.isAnnotation()); System.out.println(cls.isInterface()); } }
public abstract void com.em.Colorable.value() false true
public class Test { public void getInfo(String str,List<String>list){ System.out.println("成功"); } }
- 반사 생성 객체
- 클래스 사용 객체의 newInstance() 메서드는 Class 객체의 인스턴스를 생성합니다. 이 메서드에는 기본 생성자(더 일반적으로 사용됨)가 필요합니다. 🎜>
먼저 Class 개체를 사용하여 지정된 Constructor 개체를 얻은 다음 Constructor 개체를 호출합니다. newInstance() 메서드를 사용하여 Class 개체의 해당 클래스 인스턴스를 만듭니다.
Reflection 호출 메서드
Object invoke(Object obj,Object...args)
: 이 메서드의 obj는 메서드를 실행하기 위한 기본 호출이며, 다음 인수는 다음과 같은 경우 메서드에 전달되는 실제 매개 변수입니다. 메소드 실행
public class ClassInfo { public static void main(String[] args) throws NoSuchMethodException, SecurityException { Class<Test> cls=Test.class; Method med=cls.getMethod("getInfo", String.class,List.class); System.out.println(med.getParameterCount()); Parameter[] params=med.getParameters(); System.out.println(params.length); for(Parameter par:params){ System.out.println(par.getName()); System.out.println(par.getType()); System.out.println(par.getParameterizedType()); } } }
2 2 arg0 class java.lang.String class java.lang.String arg1 interface java.util.List java.util.List<java.lang.String>
结果
public class Test { public Test(String str) { System.out.println(str); } public void getInfo(String str){ System.out.println(str); } }
다음 공식을 볼까요 아래 밤나무를 잘 보세요
public class ClassInfo { public static void main(String[] args) throws Exception { Class<Test> cls=Test.class; Constructor<Test>construct=cls.getConstructor(String.class); Test test=construct.newInstance("初始化"); Method med=cls.getMethod("getInfo", String.class); med.invoke(test, "调用方法成功"); } }
初始化 调用方法成功
结果
public class Test { public Test(String str) { System.out.println(str); } //私有方法 private void getInfo(String str){ System.out.println(str); } }
setAccessible(boolean flag): 값을 true로 설정하여 이 메소드 검사
액세스 멤버 변수 값
을 사용할 때 Java 언어 액세스 권한을 취소해야 함을 나타냅니다.getXxx(Object obj)
: obj 객체의 멤버 변수 값을 가져옵니다. 여기서 Xxx는 8가지 기본 유형에 해당합니다. 멤버 변수의 유형이 참조 유형인 경우 Xxx 부분setXxx(Object obj,Xxx val)
을 제거합니다. obj 객체를 변경합니다. 멤버 변수는 val 값으로 설정됩니다. 여기서 Xxx는 8가지 기본타입에 해당합니다. 멤버변수의 타입이 참조타입이라면 set
후 Xxx를 취소하면 됩니다. 개인 멤버 변수를 포함한 변수
public class ClassInfo { public static void main(String[] args) throws Exception { Class<Test> cls=Test.class; Constructor<Test>construct=cls.getConstructor(String.class); Test test=construct.newInstance("初始化"); //为啥使用这个方法呢? Method med=cls.getDeclaredMethod("getInfo", String.class); //为啥使用这个方法呢? med.setAccessible(true); med.invoke(test, "调用方法成功"); } }
初始化 调用方法成功
结果
public class Test { private int num; public Test(String str) { System.out.println(str); } private void getInfo(String str){ System.out.println(str); } public int getNum() { return num; } public void setNum(int num) { this.num = num; } }
연산 배열
java.lang.reflect 패키지 아래에 Array 클래스가 있습니다. 동적으로 배열을 생성할 수 있는
static Object newInstance(Class>componentType,int...length)
: 지정된 요소 유형과 지정된 크기로 새 배열을 생성합니다
static xxx getXxx(Object array,int index)
:返回array数组中第index个元素。其中xxx是各种基本数据类型,如果数组元素是引用类型,则该方法变为get()
static void setXxx(Object array,int index,xxx val)
:将array数组中低index 个元素的值设为val,其中xxx是各种基本数据类型,如果数组元素是引用类型,则该方法变为set()
public class ArrayInfo { public static void main(String[] args) { Object arrays=Array.newInstance(String.class, 3); Array.set(arrays, 0, "第一个"); Array.set(arrays, 1, "第二个"); Array.set(arrays, 2, "第三个"); System.out.println(Array.get(arrays, 2)); } }
위 내용은 클래스 및 객체 정보를 얻기 위한 Java 리플렉션에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

이 기사에서는 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 및 Gradle을 사용하여 접근 방식과 최적화 전략을 비교합니다.

이 기사에서는 Maven 및 Gradle과 같은 도구를 사용하여 적절한 버전 및 종속성 관리로 사용자 정의 Java 라이브러리 (JAR Files)를 작성하고 사용하는 것에 대해 설명합니다.

이 기사는 카페인 및 구아바 캐시를 사용하여 자바에서 다단계 캐싱을 구현하여 응용 프로그램 성능을 향상시키는 것에 대해 설명합니다. 구성 및 퇴거 정책 관리 Best Pra와 함께 설정, 통합 및 성능 이점을 다룹니다.

이 기사는 캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA를 사용하는 것에 대해 설명합니다. 잠재적 인 함정을 강조하면서 성능을 최적화하기위한 설정, 엔티티 매핑 및 모범 사례를 다룹니다. [159 문자]

Java의 클래스 로딩에는 부트 스트랩, 확장 및 응용 프로그램 클래스 로더가있는 계층 적 시스템을 사용하여 클래스로드, 링크 및 초기화 클래스가 포함됩니다. 학부모 위임 모델은 핵심 클래스가 먼저로드되어 사용자 정의 클래스 LOA에 영향을 미치도록합니다.


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

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

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

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

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

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