Java 반사 메커니즘 지식 상세 소개 및 총결

이 편은 반사에 대한 지식을 다음과 같이 설명합니다.
  • class의 사용
  • 방법의 반사
  • 구조 함수의 반사
  • 구성원 변수의 반사
  • 1. 클래스가 무엇입니까
    대상을 향한 세계에서 만물은 모두 대상이다.클래스는 대상이고, 클래스는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
    이 글은 자바 반사의 기본적인 용법을 설명했는데 실행할 때 임의의 대상이 속하는 종류를 판단할 수 있다.운행할 때 임의의 종류의 대상을 구성한다.운행할 때 임의의 종류가 가지고 있는 구성원 변수와 방법을 판단한다.실행할 때 임의의 대상을 호출하는 방법;동적 에이전트를 생성합니다.
    읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!

    좋은 웹페이지 즐겨찾기