当前位置: 首页 > news >正文

中企网络科技建站百度外推排名代做

中企网络科技建站,百度外推排名代做,做美团类似的网站,wordpress系列怎么做Javassist讲解1(介绍,读写字节码) 介绍一、读写字节码1.如何创建新的类2.类冻结 介绍 javassist 使Java字节码操作变得简单,它是一个用于在Java中编辑字节码的类库; 它使Java程序能够在运行时定义一个新类,…

Javassist讲解1(介绍,读写字节码)

  • 介绍
  • 一、读写字节码
    • 1.如何创建新的类
    • 2.类冻结


介绍

    javassist 使Java字节码操作变得简单,它是一个用于在Java中编辑字节码的类库;

    它使Java程序能够在运行时定义一个新类,并在JVM加载类文件时对其进行修改

    与其他类似的字节码编辑器不同,javassist提供了两个级别的API:

    源代码级别和字节码级别

    如果用户使用源级API,他们可以在不了解Java字节码规范的情况下编辑类文件。整个API仅使用Java语言的词汇设计,甚至可以以源代码的形式指定插入的字节码,Javassist会即时的进行编译。

    另一方面,字节级API允许用户像其他编辑器一样直接编辑类文件



一、读写字节码

    javassist是一个用于处理Java的字节码的类库。Java字节码存储在成为类文件的二进制文件中。每个类文件都包含一个Java类或接口

	//获取Class池ClassPool pool = ClassPool.getDefault();//获取CtClassCtClass cc = pool.get("net.mooctest.Yest");//修改字节码cc.setSuperclass(pool.get("net.mooctest.YestFather"));//输出字节码cc.writeFile("D:\\桌面\\pair\\PairHeap2\\result1666497514964\\target\\classes");

  • 首先获取一个ClassPool对象,该对象控制使用Javassist修改字节码,ClassPool是一个表示类文件的对象容器
  • ClassPool 是本质一个CtClass 对象的map,使用类名作为键,调用get方法,搜索整个ClassPool,如果没有找到对应的对象,就新构造一个CtClass类对象,该对象被记录在map中,但是注意,这里说得是加载的对象,如果类名对应类不存在,会抛出异常
  • 获取到ClassPool对象后,就可以进行修改,这里的话讲其父类修改为了BaseObj,然后是cc.writeFile(),可以将修改后的字节码进行保存,也可以直接通过toBytecode()获取字节码

最后看到Class文件中可以发现本来没有继承的Yest类成功继承了YestFather类


在这里插入图片描述

1.如何创建新的类

  • ClassPool的makeClass方法可以帮助我们定义一个新的不存在的类
  • 但是makeClass()不能创建接口,创建接口需要调用makeInterface方法

	ClassPool pool = ClassPool.getDefault();CtClass cc = pool.makeClass("net.mooctest.NewClass");cc.writeFile("D:\\桌面\\pair\\PairHeap2\\result1666497514964\\target\\classes");

可以看到成功创建了一个NewClass类

在这里插入图片描述

2.类冻结

  • 执行了writeFile 或者 toBytecode() 等输出字节码的方法之后,CtClass就处于了冻结的状态,在此状态下不允许修改。

	ClassPool pool = ClassPool.getDefault();CtClass cc = pool.makeClass("net.mooctest.Yest");cc.writeFile("D:\\桌面\\pair\\PairHeap2\\result1666497514964\\target\\classes");cc.setSuperclass(pool.get("net.mooctest.YestFather"));如果在输出之后修改再次修改:>>>>>>>>Exception in thread "main" java.lang.RuntimeException:net.mooctest.Yest class is frozen

  • CtClass 调用 defrost 可以解冻,变为可修改的状态
  • 当 ClassPool.doPruning 属性设置为 true 的时候 ,冻结的类不能再次被解冻

	ClassPool pool = ClassPool.getDefault();ClassPool.doPruning = true;调用解冻会提示:dofrost(): net.mooctest.Yest was pruned

  • doPruning 属性设置为 true ,某一个特定类需要解冻的时候,可以提前调用,这样就不会报错

	CtClass cc = pool.makeClass("net.mooctest.Yest");cc.stopPruning(true);

http://www.mmbaike.com/news/89399.html

相关文章:

  • 四川手机网站有哪些百度搜索排行榜前十名
  • 网站未被百度中收录的原因百度网盘网页登录入口
  • 网站模板css外贸网站推广
  • ftp 网站 怎么上传优化师助理
  • 河北网站制作公司百度指数批量获取
  • 瑞安哪里有做百度的网站网站流量查询站长之家
  • 中企动力邮箱登陆网址seo任务平台
  • 视频模板宁波seo网络推广咨询价格
  • 武汉 网站最好用的磁力搜索器
  • 佛山网站代运营哪家公司做seo
  • 网站建设可以资本化吗推一手新闻发稿平台
  • 网页制作步骤流程鸡西网站seo
  • 做淘宝差不多的网站吗seo网站排名优化服务
  • 怎么做网站商城重庆森林经典台词
  • 智能建造师证书徐州seo推广优化
  • 阿里云 建设网站广州排名推广
  • 怎么用手机做钓鱼软件或者网站企业网络营销推广方案
  • 中山网站制作建设搜索关键词排名优化技术
  • 一个网站如何产生流量百度反馈中心
  • 使用wordpress在ec2上建网站今天最新新闻事件报道
  • apache做网站seo的搜索排名影响因素有哪些
  • 网站内链如何布局郑州百度网站优化排名
  • 用php做网站难吗拉新推广平台
  • 哪个网站公司做的好公司建设网站哪家好
  • 邯郸哪里有做网站的李互联网营销方法有哪些
  • 哪个网站可以做头像优化标题关键词技巧
  • 科技网站配色西安网络推广优化培训
  • 电商网站建设灰色关键词排名优化
  • 做电影网站用什么程序外贸推广平台排名
  • 淄博做网站的网络公司个人网页制作成品欣赏