ClassReader类用于解析类字节码,创建ClassReader对象可传入类名、类字节码数组或者类输入流对象。
    创建完ClassReader对象就会触发字节码解析(解析class基础信息,如常量池、接口信息等),所以可以直接通过ClassReader对象获取类的基础信息,如下:

    1. // 创建ClassReader对象,用于解析类对象,可以根据类名、二进制、输入流的方式创建
    2. final ClassReader cr = new ClassReader(className);
    3. System.out.println(
    4. "解析类名:" + cr.getClassName() + ",父类:" + cr.getSuperName() +
    5. ",实现接口:" + Arrays.toString(cr.getInterfaces())
    6. );

    调用ClassReader类的accpet方法需要传入自定义的ClassVisitor对象,ClassReader会按照如下顺序,依次调用该ClassVisitor的类方法。

    1. visit
    2. [ visitSource ] [ visitModule ][ visitNestHost ][ visitPermittedclass ][ visitOuterClass ]
    3. ( visitAnnotation | visitTypeAnnotation | visitAttribute )*
    4. ( visitNestMember | visitInnerClass | visitRecordComponent | visitField | visitMethod )*
    5. visitEnd

    ClassVisitor类图:
    2. ClassReader和ClassVisitor - 图1