java 反射 Class解释

java反射机制

在运行期间,从.class字节码文件中获取 构造函数,成员变量,成员方法等信息。

或取.class文件类容,先获取对应Class对象。

Class对象获取

  1. Class的静态方法
public static Class<?> forName(String className) throws ClassNotFoundException{...}

  1. ClassLoader loadClass方法
public Class<?> loadClass(String name) throws ClassNotFoundException
  1. 类名.class
  2. 实例对象.getClass()

Class类主要方法分析


public final class Class<T> implments ...{
...
    //创建对象实例,实际上是通过获取Constructor,通过其无参的构造函数创建
    public T newInstance() throws...{
        ...
        
        return tmpConstructor.newInstance((Object[])null);
        
    }    
    //获取类加载器
    public ClassLoader getClassLoader(){}
    
    //返回泛型声明中声明的类型变量数组
    //Map<Cheese, Table> maps = new HashMap<Cheese, Table>();
    //maps.getclass().getTypeParameters()返回 [K,V]
    public TypeVariable<Class<T>>[] getTypeParameters(){}
    
    //获取超类
    public native Class<? super T> getSuperclass();
    
    //获取超类 包含泛型信息
    public Type getGenericSuperClass(){}
    
    //获取该类全部实现的接口Class数组信息
    public Class<?>[] getInterfaces(){}
    
    //或取实现接口Type数组  包含泛型信息 
    public Type[] getGenericInterface(){}
    
    //返回数组元素中的CLass对象,非数组原型不能调用此方法
    public native Class<T getComponentType();
    
    //获取该类的修饰符
    public native int getModifiers();
    
    //如果这个类是“其它类中的某个方法的内部类” 调用getEnclosingMethod() 返回的就是这个类的方法;不存在返回null
    public Method getEncloseingMethod() throws SecurityException{}
    
    //如果这个类是“其它类的构造函数中的内部类”,调用getEnclosingConstructor()就是这个类所在的构造函数;若不存在,返回null
    public Constructor<?> getEncloseingConstructor() throws SecurityException{}
    
    如果这个类是其它类的内部类,调用 getEnclosingClass则返回这个类
    public Class<?> getEnclosingClass() throws SecurityException{} 
    
    //获取当前类定义所在的类
    public Class<?> getDeclaringClass() throws SecurityException {}
    
    //判断是否是匿名类
    public boolean isAnonymousClass(){}
    
    //得到该类及其父类所有的public的内部类
    public Class<?>[] getClasses(){}
    
    //得到该类所有的内部类,除去父类的
    public Class<?>[] getDeclaredClasses() throws SecurityException{}
    
    //获得某个类的所有的公共(public)的字段,包括父类中的字段
    public Field[] getFields() throws SecurityException{}
    
    //获得某个类的所有声明的字段,即包括public、private和proteced,但是不包括父类的申明字段
    public Field[] getDeclaredFields() throws SecurityException{}
    
    //根据name 获取public字段,包过父类中字段
    public Field getField(String name){}
    
      //根据name 获取字段,不包过父类中字段
    public Field getDeclaredField(String name){}
    
     //获得某个类的所有的公共(public)的构造器,包括父类中的构造器
    public Constructor<?>[] getConstructors() throws SecurityException{}
    
    // 返回当前类的所有构造器
    public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes){}
    
    //根据参数获取public构造方法
    public Constructor<T> getConstructor(Class<?>... parameterTypes){}
    
    //根据参数获取私有的构造方法
     public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes){}
     
     //获取所有的public方法,包过父类
     public Method[] getMethods() throws SecurityException {}
     
     //获取所有的方法,不包过父类
     public Method[] getDeclaredMethods() throws SecurityException {}
     
     // name 方法名  parameterTypes 方法参数列表,
     // 获取public方法,包过父类
      public Method getMethod(String name, Class<?>... parameterTypes){}
      
      //获取指定方法,不包过父类
      public Method getDeclaredMethod(String name, Class<?>... parameterTypes){}
      
     
      static native Class<?> getPrimitiveClass(String name);
       
      //获取所有public 注解 ,包过父类
      public Annotation[] getAnnotations(){}
      
       //获取所有 注解 ,不包过父类
      public Annotation[] getDeclaredAnnotations(){}
      
      public <A extends Annotation> A getAnnotation(Class<A> annotationClass) 
      
      public <A extends Annotation> A getDeclaredAnnotation(Class<A> annotationClass) {}
      
      public <A extends Annotation> A[] getAnnotationsByType(Class<A> annotationClass) {}
      
      public <A extends Annotation> A[] getDeclaredAnnotationsByType(Class<A> annotationClass)
      
    
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值