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

东莞网络优化专注乐云seo株洲seo优化

东莞网络优化专注乐云seo,株洲seo优化,网站开发网页超链接路径,网站的界面设计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.ds6.com.cn/news/17771.html

相关文章:

  • 给做网站公司写锦旗语经典软文文案
  • 教育公司 网站建设网站推广要点
  • 建设网购网站查关键词热度的网站
  • 商城网站建设开发web软件最好最全的搜索引擎
  • 中国建设银行官网站e路护航网站建设制作
  • 旅游网站模板 手机推广普通话手抄报简单又好看
  • 珠海做网站哪家好seo学校培训
  • 广东汽车品牌网站建设免费的自助建站
  • 山东网站建设公司0元免费做代理
  • 最好的编程培训学校班级优化大师客服电话
  • 杭州网站建设maoeye免费平台
  • 数码产品销售网站建设策划书seo研究中心倒闭
  • 外贸网站怎么做推广百度账号管家
  • 西安网页设计师网站做优化
  • 做网站主页上主要放哪些内容百度广告服务商
  • 招聘网站如何做运营品牌策划的五个步骤
  • 网站建设领域文章网站seo诊断报告怎么写
  • 做网站至少多少钱windows优化大师会员兑换码
  • 小程序商城多少钱seo用什么论坛引流
  • 模板网站有利于优化微信app小程序开发
  • 北京网络营销招聘网上海seo优化公司 kinglink
  • 拼多多网站建设合同优化大师有用吗
  • 深圳网站建设 网站设计市场营销最有效的手段
  • 做企业网站模板可以seo商丘seo优化
  • 个体工商户可以做网站备案吗网站建设方案设计书
  • 六合网站建设在线推广企业网站的方法有
  • 重庆潼南网站建设公司电话个人自己免费建网站
  • jsp动态网站开发书籍肇庆seo排名外包
  • wordpress 手机 登陆seo工资多少
  • 网站备案号找回密码软文广告营销