[ASM教程]#2生成類

首發於Enaium的個人博客


public class Learn2 {
    public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
        ClassWriter classWriter = new ClassWriter(ClassWriter.COMPUTE_MAXS);
        classWriter.visit(V1_8, ACC_PUBLIC, "cn/enaium/learn/asm/learn2/Learn2Test", null, "java/lang/Object", null);//類信息
        MethodVisitor methodVisitor = classWriter.visitMethod(ACC_PUBLIC + ACC_STATIC, "render", "()V", null, null);//插入方法
        methodVisitor.visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;");//插入字段
        methodVisitor.visitLdcInsn("Hello ASM!");//插入LDC
        methodVisitor.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "println", "(Ljava/lang/String;)V", false);//插入方法
        methodVisitor.visitMaxs(2, 1);//設置棧和局部變量大小
        methodVisitor.visitInsn(RETURN);//插入返回
        methodVisitor.visitEnd();//結束
        classWriter.visitEnd();//結束

        //生成類
        try {
            FileOutputStream out = new FileOutputStream(Learn2.class.getResource("/cn/enaium/learn/asm/learn2/").getPath() + "Learn2Test.class");
            out.write(classWriter.toByteArray());
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章