Java常见的字节操作
来源:互联网 发布:协同办公软件a8 编辑:程序博客网 时间:2024/06/06 08:52
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtField;
import javassist.CtMethod;
import javassist.CtNewMethod;
import javassist.Modifier;
public class Test32 {
// 通过javaSsist添加字节码
public static void main(String[] args) throws Exception {
// 加载class字节文件
ClassPool pool = ClassPool.getDefault();
CtClass cc = pool.get("cn.david.newtest.User");
// 字节操作定义变量
CtField field = new CtField(CtClass.intType, "sex", cc);
field.setModifiers(Modifier.PRIVATE);
cc.addField(field, "100");
// 通过字节操作自定义set和get方法
CtMethod m1 = CtNewMethod.getter("getSex", field);
CtMethod m2 = CtNewMethod.getter("setSex", field);
cc.addMethod(m1);
cc.addMethod(m2);
// 字节操作定义函数
CtMethod method = new CtMethod(CtClass.intType, "add", new CtClass[] { CtClass.intType, CtClass.intType }, cc);
method.setModifiers(Modifier.PUBLIC);
method.setBody("{return $1+$2;}");
cc.addMethod(method);
// 通过反射调用定义的方法
Class<?> clazz = cc.toClass();
User user = (User) clazz.newInstance();
Method m = clazz.getDeclaredMethod("add", int.class, int.class);
Object object = m.invoke(user, 12, 21);
System.out.println(object);
// 通过反射调用定义的变量
Field f = clazz.getDeclaredField("sex");
f.setAccessible(true);
System.out.println(f.get(user));
}
}
class User {
}
0 0
- Java常见的字节操作
- java常见的字节码操作类库
- java的常见的字符字节处理
- 常见的字节码操作类库 Javassist
- Java IO:基于字节的IO操作
- java 字节运算常见错误
- java字节码操作
- Java字节流操作
- Java字节码操作
- Java 字节流操作
- Java字节流操作
- 常见数据类型的字节数
- java字符串的常见的操作
- 字节的位操作
- java 排序常见排序的操作
- java实现二叉树的常见操作
- 树的常见操作Java版
- java实现二叉树的常见操作
- 如何使用RecyclerView打造首页轮播图
- 康托和逆康托展开
- 聊天机器人对话数据
- 使用Android Studio进行JNI开发 - Mac篇
- JavaScript 特性检测与浏览器嗅探
- Java常见的字节操作
- Fragment全解析系列(一):那些年踩过的坑
- 级数——一种简单的理解方式(作者_nwsuafhua)
- Java 异步 IO
- Linux系统增加交换空间的方法
- javascript数据类型【小结】
- Markdown 使用文档
- the analysis of some mp4 container boxes(stsd/avcC/stco...)
- shell实时查看文件内容