반사로 클래스 정보 학습 노트 보기
프로그램은 실행 시 대상과 클래스의 진실한 정보를 발견해야 하는데 해결 방법은 두 가지가 있다.
① 컴파일할 때와 실행할 때의 유형 정보를 알고 있다고 가정하면 instanceof 연산자를 사용하여 판단한 다음에 강제 유형 변환을 이용하여 실행할 때의 유형 변수로 변환하면 된다.
② 컴파일할 때 해당 대상과 클래스가 어떤 클래스에 속할지 예측할 수 없으며, 프로그램은 실행할 때의 정보만으로 해당 대상과 클래스의 진실한 정보를 발견하려면 반사를 사용해야 한다.
2. Class 대상을 획득하는 세 가지 방법
① Class 클래스의 forName(String clazzName) 정적 방법을 사용합니다.이 방법은 문자열 파라미터를 입력해야 합니다. 이 문자열 파라미터의 값은 특정한 클래스의 한정된 클래스입니다. (전체 패키지 이름을 추가해야 합니다.)
② 클래스의 클래스 속성을 호출하여 해당 클래스에 해당하는 클래스 객체를 가져옵니다.예를 들어, Person.class는 Person 클래스에 해당하는 Class 객체를 반환합니다.
③ 객체에 대한 getClass() 메서드를 호출합니다.이 방법은java입니다.lang.object 클래스의 한 방법입니다. 따라서 모든 자바 대상은 이 방법을 호출할 수 있습니다. 이 방법은 대상이 속한 클래스에 대응하는Clas 대상을 되돌려줍니다.
3. Class에서 정보 얻기
package tju.chc.classtest;
import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
@Deprecated
@Annos(value = { @Anno,@Anno })
@Anno
public class ClassTest {
@SuppressWarnings("unused")
private ClassTest(){
}
public ClassTest(String[] args){
}
public void info(){
System.out.println(" info ");
}
public void info(String str){
System.out.println(" info " + ", str :" + str);
}
class Inner{
}
public static void main(String[] args) throws NoSuchMethodException, SecurityException, ClassNotFoundException{
Class<ClassTest> clazz = ClassTest.class;
Constructor<?>[] ctors = clazz.getDeclaredConstructors();
System.out.println(" ");
for(Constructor<?> a:ctors){
System.out.println(a);
}
System.out.println(" ");
Constructor<?>[] publicCons = clazz.getConstructors();
for(Constructor<?> p:publicCons){
System.out.println(p);
}
System.out.println(" fangfa ");
Method[] mds = clazz.getMethods();
for(Method md:mds){
System.out.println(md);
}
System.out.println(" String info " + clazz.getMethod("info", String.class));
Annotation[] anns = clazz.getAnnotations();
System.out.println(" Annotations");
for(Annotation an: anns){
System.out.println(an);
}
System.out.println(" ");
Class<?>[] inners = clazz.getDeclaredClasses();
for(Class<?> in:inners){
System.out.println(in);
}
Class<?> inner = Class.forName("tju.chc.classtest.ClassTest$Inner");
System.out.println("neibuleidui :" + inner.getDeclaringClass());
System.out.println("ClassTest :" + clazz.getPackage());
System.out.println("Inner :" + inner.getPackage());
System.out.println("ClassTest :"
+ clazz.getSuperclass());
}
}
private tju.chc.classtest.ClassTest()
public tju.chc.classtest.ClassTest(java.lang.String[])
public tju.chc.classtest.ClassTest(java.lang.String[])
fangfa
public static void tju.chc.classtest.ClassTest.main(java.lang.String[]) throws java.lang.NoSuchMethodException,java.lang.SecurityException,java.lang.ClassNotFoundException
public void tju.chc.classtest.ClassTest.info(java.lang.String)
public void tju.chc.classtest.ClassTest.info()
public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException
public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException
public final void java.lang.Object.wait() throws java.lang.InterruptedException
public boolean java.lang.Object.equals(java.lang.Object)
public java.lang.String java.lang.Object.toString()
public native int java.lang.Object.hashCode()
public final native java.lang.Class java.lang.Object.getClass()
public final native void java.lang.Object.notify()
public final native void java.lang.Object.notifyAll()
String info public void tju.chc.classtest.ClassTest.info(java.lang.String)
Annotations
@tju.chc.classtest.Annos(value=[@tju.chc.classtest.Anno(), @tju.chc.classtest.Anno()])
@java.lang.Deprecated()
class tju.chc.classtest.ClassTest$Inner
neibuleidui :class tju.chc.classtest.ClassTest
ClassTest :package tju.chc.classtest
Inner :package tju.chc.classtest
ClassTest :class java.lang.Object
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
반사를 이용한 범용 DAL텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.