日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

40、使用javassit操作运行时字节码文件

發布時間:2023/12/3 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 40、使用javassit操作运行时字节码文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、是什么

Javassit是一個功能包,作用類似于java的反射,用于操作運行時字節碼文件,實現動態編程,但性能高于反射。

2、怎么用?

首先需要獲取存放class文件的容器ClassPool,根據全類名獲取一個CtClass對象,根據需要修改這個CtClass對象,如果.class文件已經被JVM加載了,則需要先調用ctClass.stopPruning(true),最后使用字節流將CtClass對象生成的字節數組寫到對應的.class文件

3、代碼實例

public void test_1(){ ClassPool pool = ClassPool.getDefault();CtClass ctClass = pool.makeClass("com.czp.CtClassTest");ctClass.stopPruning(true);try { //自定義屬性ctClass.addField(CtField.make("private int age;", ctClass)); ctClass.addMethod(CtMethod.make("public void setAge(int age){this.age = age;}", ctClass));ctClass.addMethod(CtMethod.make("public int getAge(){return this.age;}", ctClass)); //獲取字節數組寫入到指定文件byte[] byteArray = ctClass.toBytecode();FileOutputStream output = new FileOutputStream("F://czp/CtClassTest.class ");output.write(byteArray); output.close();if(ctClass.isFrozen()){//如果class文件被凍結,已經被jvm加載ctClass.defrost();//解凍}//在class Pool中獲取到對應.class文件ctClass = pool.get("com.czp.CtClassTest ");//同上ctClass.addField(CtField.make("private String sex;", ctClass));ctClass.addField(CtField.make("private String name;", ctClass)); byteArray = ctClass.toBytecode();output = new FileOutputStream("F://czp/CtClassTest.class");output.write(byteArray);output.close();} catch (Exception e) {e.printStackTrace();} }

?

總結

以上是生活随笔為你收集整理的40、使用javassit操作运行时字节码文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。