欢迎来到天天文库
浏览记录
ID:45236147
大小:460.00 KB
页数:33页
时间:2019-11-11
《java下第八章编译器API》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第八章编译器API学习目标编译器概述,了解API能够实现的功能。能够熟练使用ToolProvider获得系统默认编译器,并动态完成编译操作。熟练应用StandardJavaFileManager管理相关的输入和输出,以及编译非文本文件。能够运用DiagnosticListener监听、收集编译过程中的诊断信息。范例导入程序代码的自我复制和自我修改是一种非常强大的能力,但这种能力常被滥用来制造病毒,以至于现代操作系统通常不允许修改程序的代码段和禁用调用栈的执行权限来保证代码的安全性。这使得通过修改自身代码来实现某种逻辑的合理编程方法受到了限制。而J
2、DK1.6赋予了程序员在运行时刻产生并编译Java源代码的能力,这和Java的反射机制结合在一起,使得Java程序可以在运行过程中产生新类,替换旧类,动态修改自身组件以进行自适应优化运行时刻的性能。编译器API概述-1JDK1.6提供了在运行时调用编译器的API,后面我们将假设把此API应用在JSP技术中。在传统的JSP技术中,服务器处理JSP通常需要进行下面六个步骤:、分析JSP代码、生成Java代码、将Java代码写入存储器、启动另外一个进程并运行编译器编译Java代码、将类文件写入存储器、服务器读入类文件并运行;但如果采用运行时编译,可以同
3、时简化步骤4和5,节约新进程的开销和写入存储器的输出开销,提高系统效率。编译器API概述-2新API的第二个新特性是可以编译抽象文件,理论上是任何形式的对象,只要该对象实现了特定的接口。第三个新特性是可以收集编译时的诊断信息。由此可见编译器API产生主要是面向热部署或者增量编译这样的场合,目的是增强Java和JVM的交互性。ToolProvider类ToolProvider类为找出Tool提供了方法,例如,编译器的提供者。成员方法:publicstaticJavaCompilergetSystemJavaCompiler()publicstati
4、cClassLoadergetSystemToolClassLoader()Tool接口Tool接口是JavaCompiler接口的父接口,定义了命令行工具的共同的接口。成员方法:publicSetgetSourceVersions()publicintrun(InputStreamin,OutputStreamout,OutputStreamerr,String...arguments)动态编译练习练习:编写一个java源文件Hello.java,然后写一段代码完成对Hello.java文件的动态编译和运行。程序清
5、单:Hello.java。publicclassHello{publicstaticvoidmain(String[]args){System.out.println("HelloWorld!");System.out.println("你好,世界!");}}使用StandardJavaFileManager编译-1JDK1.6的编译器API强大之处在于,它可以编译的源文件的形式并不局限于文本文件。JavaCompiler类依靠文件管理服务可以编译多种形式的源文件。比如直接由内存中的字符串构造的文件,或者是从数据库中取出的文件。如果要使用Java
6、FileManager,就必须构造CompilationTask。JDK1.6提供了JavaCompiler.CompilationTask类来封装一个编译操作。这个类可以通过JavaCompiler的getTask方法得到。使用StandardJavaFileManager编译-2JavaCompiler接口代表Java的编译器,方法如下:publicStandardJavaFileManagergetStandardFileManager(DiagnosticListenerdiagnosticLi
7、stener,Localelocale,Charsetcharset)使用StandardJavaFileManager编译-3publicJavaCompiler.CompilationTaskgetTask(Writerout,JavaFileManagerfileManager,DiagnosticListenerdiagnosticListener,Iterableoptions,Iterableclasses,Iterable8、bject>compilationUnits)使用StandardJavaFileManager编译-4JavaFileManager.
8、bject>compilationUnits)使用StandardJavaFileManager编译-4JavaFileManager.
此文档下载收益归作者所有