深度探讨java字节代码操纵方法

深度探讨java字节代码操纵方法

ID:16447238

大小:48.50 KB

页数:7页

时间:2018-08-09

深度探讨java字节代码操纵方法_第1页
深度探讨java字节代码操纵方法_第2页
深度探讨java字节代码操纵方法_第3页
深度探讨java字节代码操纵方法_第4页
深度探讨java字节代码操纵方法_第5页
资源描述:

《深度探讨java字节代码操纵方法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、深度探讨Java字节代码操纵方法Java认证考试:深度探讨Java字节代码的操纵方法  本文为IBM工程师成富编写的《Java深度历险》的第一部分Java字节代码的操纵,像这样Java语言的深度理解和运用还没有很多文章,我们把他奉献给读者,希望读者们喜欢。  编者按:我们曾给大家介绍过Java字节码文件操作技巧。Java作为业界应用最为广泛的语言之一,深得众多软件厂商和开发者的推崇,更是被包括Oracle在内的众多JCP成员积极地推动发展。但是对于Java语言的深度理解和运用,毕竟是很少会有人涉及的话题。本文为IBM工程师成富编写的《Java深度历险》的第一部分J

2、ava字节代码的操纵,希望读者们喜欢。  在一般的Java应用开发过程中,开发人员使用Java的方式比较简单。打开惯用的IDE,编写Java源代码,再利用IDE提供的功能直接运行Java程序就可以了。这种开发模式背后的过程是:开发人员编写的是Java源代码文件(.java),IDE会负责调用Java的编译器把Java源代码编译成平台无关的字节代码(bytecode),以类文件的形式保存在磁盘上(.class)。Java虚拟机(JVM)会负责把Java字节代码加载并执行。Java通过这种方式来实现其“编写一次,到处运行(Writeonce,runanywhere)”

3、的目标。Java类文件中包含的字节代码可以被不同平台上的JVM所使用。Java字节代码不仅可以以文件形式存在于磁盘上,也可以通过网络方式来下载,还可以只存在于内存中。JVM中的类加载器会负责从包含字节代码的字节数组(byte[])中定义出Java类。在某些情况下,可能会需要动态的生成Java字节代码,或是对已有的Java字节代码进行修改。这个时候就需要用到本文中将要介绍的相关技术。首先介绍一下如何动态编译Java源文件。  动态编译Java源文件  在一般情况下,开发人员都是在程序运行之前就编写完成了全部的Java源代码并且成功编译。对有些应用来说,Java源代码

4、的内容在运行时刻才能确定。这个时候就需要动态编译源代码来生成Java字节代码,再由JVM来加载执行。典型的场景是很多算法竞赛的在线评测系统(如PKUJudgeOnline),允许用户上传Java代码,由系统在后台编译、运行并进行判定。在动态编译Java源文件时,使用的做法是直接在程序中调用Java编译器。  JSR199引入了Java编译器API。如果使用JDK6的话,可以通过此API来动态编译Java代码。比如下面的代码用来动态编译最简单的HelloWorld类。该Java类的代码是保存在一个字符串中的。1.publicclassCompilerTest{2.p

5、ublicstaticvoidmain(String[]args)throwsException{3.Stringsource=“publicclassMain{publicstaticvoidmain(String[]args){System.out.println(”HelloWorld!“);}}”;4.JavaCompilercompiler=ToolProvider.getSystemJavaCompiler();5.StandardJavaFileManagerfileManager=compiler.getStandardFileManager(

6、null,null,null);6.StringSourceJavaObjectsourceObject=newCompilerTest.StringSourceJavaObject(“Main”,source);7.Iterable《extendsJavaFileObject》fileObjects=Arrays.asList(sourceObject);8.CompilationTasktask=compiler.getTask(null,fileManager,null,null,null,fileObjects);9.booleanresult=task.

7、call();10.if(result){11.System.out.println(“编译成功。”);12.}13.}14.15.staticclassStringSourceJavaObjectextendsSimpleJavaFileObject{16.17.privateStringcontent=null;18.publicStringSourceJavaObject(Stringname,Stringcontent)??throwsURISyntaxException{19.super(URI.create(“string:///”+name.repl

8、ace(‘

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。