java javassist创建类和反编译类

用javassist生成一个新的类

 public class Byte {

public static void main(String[] args) throws Exception {

    //获得类池
    ClassPool pool=ClassPool.getDefault();
    //创建类
    CtClass cc=pool.makeClass("cn.sxt.in.Emp");

    //创建属性
    CtField f1 = CtField.make("private int empno;", cc);
    CtField f2 = CtField.make("private String ename;", cc);
    cc.addField(f1);
    cc.addField(f2);

    //创建方法
    CtMethod c1=CtMethod.make("public int getEmpno(){return empno;}", cc);
    CtMethod c2=CtMethod.make("public void setEmpno(int empno){this.empno=empno;}", cc);
    cc.addMethod(c1);
    cc.addMethod(c2);

    //添加构造器,第一个参数为类型的可变数组,CtClass.获得类型或pool.get("java.lang.类型")
    CtConstructor constructor =new CtConstructor(new CtClass[] {CtClass.intType,pool.get("java.lang.String")},cc);
    //构造器的方法体
    constructor.setBody("{this.empno=empno;this.ename=ename;}");
    cc.addConstructor(constructor);

    //写出类
    cc.writeFile("d:/myj3"); //自动创建文件夹和工作区间
    System.out.println("成功"); 

}
}

原文地址:https://blog.51cto.com/14437184/2438368

时间: 2024-10-16 01:02:50

java javassist创建类和反编译类的相关文章

Eclipse - 安装了jd-eclipse插件后依然无法反编译类文件

问题 Eclipse在安装了jd-eclipse插件后依然无法反编译类文件,这个问题是因为没有修改默认的类文件查看器. 解决方法 修改默认的类文件查看器为jd-eclipse Window -> Preference -> General -> Editors -> File Associations 选中*.class,将Class File Editor设置为默认(Default) 选中*.class without source,将Class File Editor设置为默认

java中的.class文件反编译

安装Java jdk后 看安装目录里有没有jad.exe,没有要下载,一般都有的 配置Java环境变量 开始-运行-cmd-回车-进入命令行窗口: cd+空格+class文件所在路径: 按下面的命令进行反编译: 例如:[2] jad -sjava example.class 回车 在目录里可以看到example.java源文件 [1] 反编译一个class文件:jad example.class,会生成example.jad,用文本编辑器打开就是java源代码 [2] 指定生成源代码的后缀名:j

java反射机制例子,反编译,以及通过读取配置文件降低耦合

本文不多做文字描述,通过代码可以说明一切,简单直观. //这边以反编译String类为例子,将反编译结果输入到文件. 1.ReflectTest.java 1 import java.io.File; 2 import java.io.FileReader; 3 import java.io.FileWriter; 4 import java.lang.reflect.Constructor; 5 import java.lang.reflect.Field; 6 import java.lan

C++反编译-类与结构体分析

类>构造函数 ;5 : A(int a, int b, int c) { 0x438638 push %ebp 0x438639 mov %esp,%ebp 0x43863b sub $0x4,%esp 0x43863e mov %ecx,-0x4(%ebp) ;6 : this->a = a; 0x438641 mov -0x4(%ebp),%eax 0x438644 mov 0x8(%ebp),%edx //等价于取a的值 0x438647 mov %edx,(%eax) //等价于把a赋

C++反编译-类与结构体分析二

类作为参数传递 main函数;17 :    {0x401373    lea    0x4(%esp),%ecx0x401377    and    $0xfffffff0,%esp0x40137a    pushl  -0x4(%ecx)0x40137d    push   %ebp0x40137e    mov    %esp,%ebp0x401380    push   %ecx0x401381    sub    $0x24,%esp0x401384    call   0x4270d

Java反射创建带构造参数的类 并执行方法

部分代码 public void go(ServletRequest request,ServletResponse response){ String methodName = "index";//方法名 String className = "indexAction";//类名 try{ Class<?> action = Class.forName(className); //参数列表 Class<?>[] parameterTypes

C++反编译-类与结构体分析三

main函数 ;15 : { 0x40137a push %ebp 0x40137b mov %esp,%ebp 0x40137d and $0xfffffff0,%esp 0x401380 sub $0x60,%esp 0x401383 call 0x427130 <__main> ;16 : A a; ;17 : a.a = 1; 0x401388 movl $0x1,0x38(%esp) ;18 : a.b = 2; 0x401390 movl $0x2,0x3c(%esp) ;19 :

C++反编译-类的继承

;35 : DExtend de; - - - - - - main栈 - - - - - - 0x401369 lea -0x10(%ebp),%eax 0x40136c mov %eax,%ecx 0x40136e call 0x438628 <DExtend::DExtend()> //定义时调用空构造函数 0x40138a lea -0x10(%ebp),%eax 0x40138d mov %eax,%ecx 0x40138f call 0x438640 <DExtend::~D

C++反编译-类的继承二

- - - - - - begin - - - - - - ;42 : speak(&chinese); 0x4013c7 lea 0x5c(%esp),%eax 0x4013cb mov %eax,(%esp) 0x4013ce movl $0x1,0x20(%esp) 0x4013d6 call 0x401350 <speak(CPerson*)> - - - - - - call speak - - - - - - ;34 : void speak(CPerson* pPerso