Java反射原理小记

Java反射原理简述

原理

Java代码编译的.class文件中,包含程序员开发的类的全部信息。大多数情况下我们编写的类在编译时就会被加载到Jvm虚拟机中,但也有运行时加载的情况,加载的方式包括ClassName.class、object.getClass()、Class.froName(“className”)等。
无论是编译时还是运行时,Jvm调用classLoader加载一个类时都会为这个类生成一个Java.Lang.Class

Java.Lang.Class
public class ReflectionTest {
    public static void main(String[] args){
        Class<?> clazz = String.class;
        Class<?> clazzClazz = clazz.getClass();
        Method[] fields = clazzClazz.getDeclaredMethods();
        for (Method f:fields
             ) {
            System.out.println("Method:"+f.toString());
        }

    }
}

输出内容

Method:private void java.lang.Class.checkPackageAccess(java.lang.ClassLoader,boolean)
Method:public static java.lang.Class<?> java.lang.Class.forName(java.lang.String) throws java.lang.ClassNotFoundException
Method:public static java.lang.Class<?> java.lang.Class.forName(java.lang.String,boolean,java.lang.ClassLoader) throws java.lang.ClassNotFoundException
Method:private static native java.lang.Class<?> java.lang.Class.forName0(java.lang.String,boolean,java.lang.ClassLoader,java.lang.Class<?>) throws java.lang.ClassNotFoundException
Method:public java.lang.String java.lang.Class.toString()
Method:public java.security.ProtectionDomain java.lang.Class.getProtectionDomain()
Method:public native boolean java.lang.Class.isAssignableFrom(java.lang.Class<?>)
Method:public native boolean java.lang.Class.isInstance(java.lang.Object)
Method:public native int java.lang.Class.getModifiers()
Method:public native boolean java.lang.Class.isInterface()
Method:public native boolean java.lang.Class.isArray()
Method:public native boolean java.lang.Class.isPrimitive()
Method:public native java.lang.Class<? super T> java.lang.Class.getSuperclass()
Method:public native java.lang.Class<?> java.lang.Class.getComponentType()
Method:public java.lang.String java.lang.Class.getName()
Method:private static native void java.lang.Class.registerNatives()
Method:static java.lang.reflect.Field[] java.lang.Class.access$100(java.lang.Class,boolean)
Method:static java.lang.reflect.Field java.lang.Class.access$200(java.lang.reflect.Field[],java.lang.String)
Method:static boolean java.lang.Class.access$300(java.lang.Object[],java.lang.Object[])
Method:static boolean java.lang.Class.access$402(boolean)
Method:static boolean java.lang.Class.access$502(boolean)
Method:private static void java.lang.Class.addAll(java.util.Collection<java.lang.reflect.Field>,java.lang.reflect.Field[])
Method:private java.lang.Class$AnnotationData java.lang.Class.annotationData()
Method:private static java.lang.String java.lang.Class.argumentTypesToString(java.lang.Class<?>[])
Method:private static boolean java.lang.Class.arrayContentsEq(java.lang.Object[],java.lang.Object[])
Method:public <U> java.lang.Class<? extends U> java.lang.Class.asSubclass(java.lang.Class<U>)
Method:private java.lang.String java.lang.Class.cannotCastMsg(java.lang.Object)
Method:boolean java.lang.Class.casAnnotationType(sun.reflect.annotation.AnnotationType,sun.reflect.annotation.AnnotationType)
Method:public T java.lang.Class.cast(java.lang.Object)
Method:private static void java.lang.Class.checkInitted()
Method:private void java.lang.Class.checkMemberAccess(int,java.lang.Class<?>,boolean)
Method:private static <U> java.lang.reflect.Constructor<U>[] java.lang.Class.copyConstructors(java.lang.reflect.Constructor<U>[])
Method:private static java.lang.reflect.Field[] java.lang.Class.copyFields(java.lang.reflect.Field[])
Method:private static java.lang.reflect.Method[] java.lang.Class.copyMethods(java.lang.reflect.Method[])
Method:private java.lang.Class$AnnotationData java.lang.Class.createAnnotationData(int)
Method:public boolean java.lang.Class.desiredAssertionStatus()
Method:private static native boolean java.lang.Class.desiredAssertionStatus0(java.lang.Class<?>)
Method:java.util.Map<java.lang.String, T> java.lang.Class.enumConstantDirectory()
Method:public java.lang.reflect.AnnotatedType[] java.lang.Class.getAnnotatedInterfaces()
Method:public java.lang.reflect.AnnotatedType java.lang.Class.getAnnotatedSuperclass()
Method:public <A> A java.lang.Class.getAnnotation(java.lang.Class<A>)
Method:sun.reflect.annotation.AnnotationType java.lang.Class.getAnnotationType()
Method:public java.lang.annotation.Annotation[] java.lang.Class.getAnnotations()
Method:public <A> A[] java.lang.Class.getAnnotationsByType(java.lang.Class<A>)
Method:public java.lang.String java.lang.Class.getCanonicalName()
Method:public java.lang.ClassLoader java.lang.Class.getClassLoader()
Method:java.lang.ClassLoader java.lang.Class.getClassLoader0()
Method:public java.lang.Class<?>[] java.lang.Class.getClasses()
Method:native sun.reflect.ConstantPool java.lang.Class.getConstantPool()
Method:public java.lang.reflect.Constructor<T> java.lang.Class.getConstructor(java.lang.Class<?>...) throws java.lang.NoSuchMethodException,java.lang.SecurityException
Method:private java.lang.reflect.Constructor<T> java.lang.Class.getConstructor0(java.lang.Class<?>[],int) throws java.lang.NoSuchMethodException
Method:public java.lang.reflect.Constructor<?>[] java.lang.Class.getConstructors() throws java.lang.SecurityException
Method:public <A> A java.lang.Class.getDeclaredAnnotation(java.lang.Class<A>)
Method:java.util.Map<java.lang.Class<? extends java.lang.annotation.Annotation>, java.lang.annotation.Annotation> java.lang.Class.getDeclaredAnnotationMap()
Method:public java.lang.annotation.Annotation[] java.lang.Class.getDeclaredAnnotations()
Method:public <A> A[] java.lang.Class.getDeclaredAnnotationsByType(java.lang.Class<A>)
Method:public java.lang.Class<?>[] java.lang.Class.getDeclaredClasses() throws java.lang.SecurityException
Method:private native java.lang.Class<?>[] java.lang.Class.getDeclaredClasses0()
Method:public java.lang.reflect.Constructor<T> java.lang.Class.getDeclaredConstructor(java.lang.Class<?>...) throws java.lang.NoSuchMethodException,java.lang.SecurityException
Method:public java.lang.reflect.Constructor<?>[] java.lang.Class.getDeclaredConstructors() throws java.lang.SecurityException
Method:private native java.lang.reflect.Constructor<T>[] java.lang.Class.getDeclaredConstructors0(boolean)
Method:public java.lang.reflect.Field java.lang.Class.getDeclaredField(java.lang.String) throws java.lang.NoSuchFieldException,java.lang.SecurityException
Method:public java.lang.reflect.Field[] java.lang.Class.getDeclaredFields() throws java.lang.SecurityException
Method:private native java.lang.reflect.Field[] java.lang.Class.getDeclaredFields0(boolean)
Method:public java.lang.reflect.Method java.lang.Class.getDeclaredMethod(java.lang.String,java.lang.Class<?>...) throws java.lang.NoSuchMethodException,java.lang.SecurityException
Method:public java.lang.reflect.Method[] java.lang.Class.getDeclaredMethods() throws java.lang.SecurityException
Method:private native java.lang.reflect.Method[] java.lang.Class.getDeclaredMethods0(boolean)
Method:public java.lang.Class<?> java.lang.Class.getDeclaringClass() throws java.lang.SecurityException
Method:private native java.lang.Class<?> java.lang.Class.getDeclaringClass0()
Method:public java.lang.Class<?> java.lang.Class.getEnclosingClass() throws java.lang.SecurityException
Method:public java.lang.reflect.Constructor<?> java.lang.Class.getEnclosingConstructor() throws java.lang.SecurityException
Method:public java.lang.reflect.Method java.lang.Class.getEnclosingMethod() throws java.lang.SecurityException
Method:private native java.lang.Object[] java.lang.Class.getEnclosingMethod0()
Method:private java.lang.Class$EnclosingMethodInfo java.lang.Class.getEnclosingMethodInfo()
Method:public T[] java.lang.Class.getEnumConstants()
Method:T[] java.lang.Class.getEnumConstantsShared()
Method:static byte[] java.lang.Class.getExecutableTypeAnnotationBytes(java.lang.reflect.Executable)
Method:private sun.reflect.generics.factory.GenericsFactory java.lang.Class.getFactory()
Method:public java.lang.reflect.Field java.lang.Class.getField(java.lang.String) throws java.lang.NoSuchFieldException,java.lang.SecurityException
Method:private java.lang.reflect.Field java.lang.Class.getField0(java.lang.String) throws java.lang.NoSuchFieldException
Method:public java.lang.reflect.Field[] java.lang.Class.getFields() throws java.lang.SecurityException
Method:private sun.reflect.generics.repository.ClassRepository java.lang.Class.getGenericInfo()
Method:public java.lang.reflect.Type[] java.lang.Class.getGenericInterfaces()
Method:private native java.lang.String java.lang.Class.getGenericSignature0()
Method:public java.lang.reflect.Type java.lang.Class.getGenericSuperclass()
Method:public java.lang.Class<?>[] java.lang.Class.getInterfaces()
Method:private native java.lang.Class<?>[] java.lang.Class.getInterfaces0()
Method:public java.lang.reflect.Method java.lang.Class.getMethod(java.lang.String,java.lang.Class<?>...) throws java.lang.NoSuchMethodException,java.lang.SecurityException
Method:private java.lang.reflect.Method java.lang.Class.getMethod0(java.lang.String,java.lang.Class<?>[],boolean)
Method:public java.lang.reflect.Method[] java.lang.Class.getMethods() throws java.lang.SecurityException
Method:private native java.lang.String java.lang.Class.getName0()
Method:public java.lang.Package java.lang.Class.getPackage()
Method:static native java.lang.Class<?> java.lang.Class.getPrimitiveClass(java.lang.String)
Method:private native java.security.ProtectionDomain java.lang.Class.getProtectionDomain0()
Method:native byte[] java.lang.Class.getRawAnnotations()
Method:native byte[] java.lang.Class.getRawTypeAnnotations()
Method:private static sun.reflect.ReflectionFactory java.lang.Class.getReflectionFactory()
Method:public java.net.URL java.lang.Class.getResource(java.lang.String)
Method:public java.io.InputStream java.lang.Class.getResourceAsStream(java.lang.String)
Method:public native java.lang.Object[] java.lang.Class.getSigners()
Method:private java.lang.String java.lang.Class.getSimpleBinaryName()
Method:public java.lang.String java.lang.Class.getSimpleName()
Method:public java.lang.String java.lang.Class.getTypeName()
Method:public java.lang.reflect.TypeVariable<java.lang.Class<T>>[] java.lang.Class.getTypeParameters()
Method:public boolean java.lang.Class.isAnnotation()
Method:public boolean java.lang.Class.isAnnotationPresent(java.lang.Class<? extends java.lang.annotation.Annotation>)
Method:public boolean java.lang.Class.isAnonymousClass()
Method:private static boolean java.lang.Class.isAsciiDigit(char)
Method:public boolean java.lang.Class.isEnum()
Method:public boolean java.lang.Class.isLocalClass()
Method:private boolean java.lang.Class.isLocalOrAnonymousClass()
Method:public boolean java.lang.Class.isMemberClass()
Method:public boolean java.lang.Class.isSynthetic()
Method:public T java.lang.Class.newInstance() throws java.lang.InstantiationException,java.lang.IllegalAccessException
Method:private java.lang.Class.java.lang.Class$ReflectionData<T> java.lang.Class.newReflectionData(java.lang.ref.SoftReference<java.lang.Class.java.lang.Class$ReflectionData<T>>,int)
Method:private java.lang.reflect.Constructor<T>[] java.lang.Class.privateGetDeclaredConstructors(boolean)
Method:private java.lang.reflect.Field[] java.lang.Class.privateGetDeclaredFields(boolean)
Method:private java.lang.reflect.Method[] java.lang.Class.privateGetDeclaredMethods(boolean)
Method:private java.lang.reflect.Method java.lang.Class.privateGetMethodRecursive(java.lang.String,java.lang.Class<?>[],boolean,java.lang.Class$MethodArray)
Method:private java.lang.reflect.Field[] java.lang.Class.privateGetPublicFields(java.util.Set<java.lang.Class<?>>)
Method:private java.lang.reflect.Method[] java.lang.Class.privateGetPublicMethods()
Method:private java.lang.Class.java.lang.Class$ReflectionData<T> java.lang.Class.reflectionData()
Method:private java.lang.String java.lang.Class.resolveName(java.lang.String)
Method:private static java.lang.reflect.Field java.lang.Class.searchFields(java.lang.reflect.Field[],java.lang.String)
Method:private static java.lang.reflect.Method java.lang.Class.searchMethods(java.lang.reflect.Method[],java.lang.String,java.lang.Class<?>[])
Method:native void java.lang.Class.setSigners(java.lang.Object[])
Method:private static java.lang.Class<?> java.lang.Class.toClass(java.lang.reflect.Type)
Method:public java.lang.String java.lang.Class.toGenericString()

我们可以看到很多亲切的方法,比如getMethod(),getDeclaredMEthod(),getMEthods(),getDeclaredMEthods(),getFileds(),getConstructors()等。具体的使用方法网上很多,暂时就不扣这个细节了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值