美文网首页
【Java基础】字节码操作

【Java基础】字节码操作

作者: 灰色孤星 | 来源:发表于2018-10-23 18:09 被阅读0次

要点:
1、Java动态性的两种实现方法(反射和字节码操作)
2、操作字节码有什么作用
3、API的使用
4、反编译软件XJad的使用

一、Java动态性的两种实现方式

  • 反射
  • 字节码操作

二、字节码操作简介

  • 在程序运行时,操作字节码可以实现动态生成新的类动态改变某个类的结构(添加/删除/修改 新的属性/方法)。
  • 相比于反射开销小、效率高。

三、实现

import javassist.*;

import java.io.IOException;

/**
 * @ClassName Demo01
 * @Description 测试Javassist创建一个新的类
 * @Author xwd
 * @Date 2018/10/23 16:55
 */
public class Demo01 {
    public static void main(String[] args) throws CannotCompileException, NotFoundException, IOException {
        //创建类
        ClassPool pool = ClassPool.getDefault();
        CtClass ctClass = pool.makeClass("pri.xiaowd.bean.Stu");

        //创建属性并添加
        CtField field1 = CtField.make("private int age;",ctClass);
        CtField field2 = CtField.make("private String name;",ctClass);
        ctClass.addField(field1);
        ctClass.addField(field2);

        //创建方法并添加
        CtMethod method1 = CtMethod.make("public int getAge(){return this.age;}",ctClass);
        CtMethod method2 = CtMethod.make("public void setAge(int age){this.age=age;}",ctClass);
        ctClass.addMethod(method1);
        ctClass.addMethod(method2);

        //创建构造器并添加
        CtConstructor constructor1 = new CtConstructor(new CtClass[]{CtClass.intType,pool.get("java.lang.String")},ctClass);
        constructor1.setBody("{this.age=age;this.name=name;}");
        ctClass.addConstructor(constructor1);
        
        //写到本地,生成.class文件
        ctClass.writeFile("D:/myJava");
    }
}
Javassist

通过反编译软件XJad可以获得Stu.class文件的java文件:

Stu.java

相关文章

  • 【Java基础】字节码操作

    要点:1、Java动态性的两种实现方法(反射和字节码操作)2、操作字节码有什么作用3、API的使用4、反编译软件X...

  • JavaAgent 与 动态代理

    ASM, CGlib, Java Proxy, Javassist都是可以操作字节码,但是这些操作字节码都需要等到...

  • java字节码

    一文让你明白Java字节码JVM 内部原理(六)— Java 字节码基础之一

  • 字节码引用检测原理与实战

    一、字节码与引用检测 1.1 Java字节码 本章中的字节码重点研究Java 字节码,Java字节码(Java b...

  • JVM

    JVM 基础-类字节码详解 多语言编译为字节码在 JVM 运行 Java 字节码文件-- Class文件的结构属性...

  • java字节码

      我们都知道Java字节码是JVM所使用的指令集。java字节码可以分为如下几类: 操作数栈   Java 方法...

  • 史上最全的ASM原理解析与应用

    ASM简介 ASM是一个操作Java字节码类库,其操作的对象是字节码数据,处理字节码方式是“拆分-修改-合并”将....

  • 【JAVA】JAVA中的小知识(补充中...)

    Java文件经过JVM编译成字节码文件,即.class文件,将字节码文件在不同的操作系统中运行时,操作系统再将字节...

  • Java虚拟机知识点【字节码】

    字节码指令   Java虚拟机的字节码指令由一个字节长度,代表着某种特定操作含义的操作码以及跟随其后的零至多个代表...

  • Java虚拟机-字节码指令

    1 字节码指令 Java字节码指令的执行离不开操作数栈,局部变量表,和常量池。 2 常量池 对于字节码指定来说,常...

网友评论

      本文标题:【Java基础】字节码操作

      本文链接:https://www.haomeiwen.com/subject/xmwazftx.html