private static void generateDefaultConstructor(ClassWriter cw, Class<?> parentClass,
                                                   String className) {
        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, // public method
            INIT, // method name
            getDesc(void.class, parentClass), // descriptor
            null, // signature (null means not generic)
            null); // exceptions (array of strings)

        mv.visitCode(); // Start the code for this method

        // 调用父类构造器
        mv.visitVarInsn(ALOAD, 0); // Load "this" onto the stack
        mv.visitMethodInsn(INVOKESPECIAL, // Invoke an instance method (non-virtual)
            convert(parentClass), // Class on which the method is defined
            INIT, // Name of the method
            getDesc(void.class), // Descriptor
            false); // Is this class an interface?

        // 设置字段值，相当于this.target = target;
        mv.visitVarInsn(ALOAD, 0); // 加载this
        mv.visitVarInsn(ALOAD, 1); // 加载参数
        mv.visitFieldInsn(PUTFIELD, convert(className), TARGET_FIELD_NAME,
            getByteCodeType(parentClass));

        mv.visitMaxs(2, 1);
        mv.visitInsn(RETURN); // End the constructor method
        mv.visitEnd();
    }
private static void generateDefaultConstructor ( ClassWriter cw , Class < ? > parentClass , String className ) { MethodVisitor mv = cw . visitMethod ( ACC_PUBLIC , INIT , getDesc ( void . class , parentClass ) , null , null ) ; mv . visitCode ( ) ; mv . visitVarInsn ( ALOAD , 0 ) ; mv . visitMethodInsn ( INVOKESPECIAL , convert ( parentClass ) , INIT , getDesc ( void . class ) , false ) ; mv . visitVarInsn ( ALOAD , 0 ) ; mv . visitVarInsn ( ALOAD , 1 ) ; mv . visitFieldInsn ( PUTFIELD , convert ( className ) , TARGET_FIELD_NAME , getByteCodeType ( parentClass ) ) ; mv . visitMaxs ( 2 , 1 ) ; mv . visitInsn ( RETURN ) ; mv . visitEnd ( ) ; }
为类构建默认构造器（正常编译器会自动生成，但是此处要手动生成bytecode就只能手动生成无参构造器了
@param cw ClassWriter
@param parentClass 构建类的父类，会自动调用父类的构造器
@param className 生成的新类名