Java 반사 메커니즘 지식 상세 소개 및 총결
대상을 향한 세계에서 만물은 모두 대상이다.클래스는 대상이고, 클래스는java입니다.lang. Class 클래스의 인스턴스 객체입니다.또한class류는java가상기기만new가 나올 수 있습니다.모든 클래스는 클래스 클래스의 실례 대상이다.이 인스턴스 객체에는 다음과 같은 세 가지 표현이 있습니다.
public class User{
}
public class ClassTest{
User u=new User();
// 1:
Class c1=User.class;
// 2:
Class c2=u.getClass();
// 3:
Class c3=Class.forName("com.forezp.User");
//
User user=(User)c1.newInstance();
}
둘째,class류의 동적 불러오기Class.forName(클래스의 전체 이름);이 방법은 클래스의 유형을 나타낼 뿐만 아니라 동적 불러오는 클래스도 대표한다.컴파일된 시간 불러오는 클래스는 정적 불러오는 클래스이고, 실행 시간 불러오는 클래스는 동적 불러오는 클래스입니다.
3. 방법 정보 얻기
기본적인 데이터 형식,void 키워드는 모두 Class류의 실례이다.getame () 을 통해 가능합니다.getSimpleName() 클래스의 이름을 가져옵니다.
Class c1=String.class;
Class c2=int.class;
Class c3=void.class;
System.out.println(c1.getName());
System.out.println(c2.getSimpleName());
클래스의 모든 방법을 가져와 인쇄합니다.
public static void printClassInfo(Object object){
Class c=object.getClass();
System.out.println(" :"+c.getName());
/**
* method
* getMethod() public , public
* getDeclaredMethods() , private , 。
*/
Method[] methods=c.getMethods();//
// , private ,c.getDeclaredMethods();
for(int i=0;i<methods.length;i++){
//
Class returnType=methods[i].getReturnType();
System.out.print(returnType.getName());
// :
System.out.print(methods[i].getName()+"(");
Class[] parameterTypes=methods[i].getParameterTypes();
for(Class class1:parameterTypes){
System.out.print(class1.getName()+",");
}
System.out.println(")");
}
}
실행:
:java.lang.String
booleanequals(java.lang.Object,)
java.lang.StringtoString()
inthashCode()
…
4. 구성원 변수에 대한 정보 얻기클래스의 구성원 변수 정보를 얻을 수 있습니다
public static void printFiledInfo(Object o){
Class c=o.getClass();
/**
* getFileds() public
* getDeclaredFields()
*/
Field[] fileds=c.getDeclaredFields();
for(Field f:fileds){
//
Class filedType=f.getType();
System.out.println(filedType.getName()+" "+f.getName());
}
}
public static void main(String[] args){
String s="ss";
//ClassUtil.printClassInfo(s);
ClassUtil.printFiledInfo(s);
}
실행:
[C value
int hash
long serialVersionUID
[Ljava.io.ObjectStreamField; serialPersistentFields
java.util.Comparator CASE_INSENSITIVE_ORDER
int HASHING_SEED
int hash32
5. 구조 함수 정보 얻기
public static void printConstructInfo(Object o){
Class c=o.getClass();
Constructor[] constructors=c.getDeclaredConstructors();
for (Constructor con:constructors){
System.out.print(con.getName()+”(“);
Class[] typeParas=con.getParameterTypes();
for (Class class1:typeParas){
System.out.print(class1.getName()+” ,”);
}
System.out.println(“)”);
}
}
public static void main(String[] args){
String s="ss";
//ClassUtil.printClassInfo(s);
//ClassUtil.printFiledInfo(s);
ClassUtil.printConstructInfo(s);
}
실행:
java.lang.String([B ,)
java.lang.String([B ,int ,int ,)
java.lang.String([B ,java.nio.charset.Charset ,)
java.lang.String([B ,java.lang.String ,)
java.lang.String([B ,int ,int ,java.nio.charset.Charset ,)
java.lang.String(int ,int ,[C ,)
java.lang.String([C ,boolean ,)
java.lang.String(java.lang.StringBuilder ,)
java.lang.String(java.lang.StringBuffer ,)
...
6. 방법 반사 조작방법 가져오기: 방법의 이름과 방법의 매개 변수를 가져와야 방법을 결정할 수 있습니다.
메서드의 반사 작업:
method.invoke( , );
예:
class A{
public void add(int a,int b){
System.out.print(a+b);
}
public void toUpper(String a){
System.out.print(a.toUpperCase());
}
}
public static void main(String[] args) {
A a=new A();
Class c=a.getClass();
try {
Method method=c.getMethod("add",new Class[]{int.class,int.class});
// Method method=c.getMethod("add",int.class,int.class);
//
method.invoke(a,10,10);
}catch (Exception e){
e.printStackTrace();
}
}
실행:
20
이 글은 자바 반사의 기본적인 용법을 설명했는데 실행할 때 임의의 대상이 속하는 종류를 판단할 수 있다.운행할 때 임의의 종류의 대상을 구성한다.운행할 때 임의의 종류가 가지고 있는 구성원 변수와 방법을 판단한다.실행할 때 임의의 대상을 호출하는 방법;동적 에이전트를 생성합니다.읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.