返回顶部
首页 > 资讯 > 精选 >JDK6.0如何使用Compiler API
  • 622
分享到

JDK6.0如何使用Compiler API

2023-06-03 08:06:06 622人浏览 泡泡鱼
摘要

这篇文章将为大家详细讲解有关jdk6.0如何使用Compiler api,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。现在我们可以用JDK6 的Compiler API(jsR 199)去动态编译Java

这篇文章将为大家详细讲解有关jdk6.0如何使用Compiler api,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

现在我们可以用JDK6 的Compiler API(jsR 199)去动态编译Java源文件,Compiler API结合反射功能就可以实现动态的产生Java代码并编译执行这些代码,有点动态语言的特征。这个特性对于某些需要用到动态编译的应用程序相当有用, 比如JSP WEB Server,当我们手动修改JSP后,是不希望需要重启Web Server才可以看到效果的,这时候我们就可以用Compiler API来实现动态编译JSP文件,当然,现在的JSP Web Server也是支持JSP热部署的,现在的JSP Web Server通过在运行期间通过Runtime.exec或ProcessBuilder来调用javac来编译代码,这种方式需要我们产生另一个进程去做编译工作,不够优雅而且容易使代码依赖与特定的操作系统;Compiler API通过一套易用的标准的API提供了更加丰富的方式去做动态编译,而且是跨平台的。 下面代码演示了Compiler API的使用:

public class CompilerAPITester {
 private static String JAVA_SOURCE_FILE = "DynamicObject.java";
 private static String JAVA_CLASS_FILE = "DynamicObject.class";
 private static String JAVA_CLASS_NAME = "DynamicObject";
 public static void main(String[] args) {
  JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
  StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, null, null);
  generateJavaClass();
  try {
   //将产生的类文件拷贝到程序的ClassPath下面,下面这一行代码是特定于windows+IntelliJ idea 6.0项目,不具有移植性
   Runtime.getRuntime().exec("cmd /c copy "+JAVA_CLASS_FILE+" classesproductionJDK6Features");
   Iterable sourcefiles = fileManager.getJavaFileObjects(JAVA_SOURCE_FILE);
   compiler.getTask(null, fileManager, null, null, null, sourcefiles).call();
   fileManager.close();
   Class.forName(JAVA_CLASS_NAME).newInstance();//创建动态编译得到的DynamicObject类的实例
  } catch (Exception ex) {
   ex.printStackTrace();
  }
 }

 public static void generateJavaClass(){
  try {
   FileWriter fw = new FileWriter(JAVA_SOURCE_FILE);
   BufferedWriter bw = new BufferedWriter(fw);
   bw.write("public class "+JAVA_CLASS_NAME+"{");
   bw.newLine();
   bw.write("public "+JAVA_CLASS_NAME+"(){System.out.println("In the constructor of DynamicObject");}}");
   bw.flush();
   bw.close();
  } catch (IOException ex) {
   ex.printStackTrace();
  }
 }
}


  程序运行后,会产生DynamicObject.java和DynamicObject.class两个文件,并在控制台输出:

  In the constructor of DynamicObject

关于“JDK6.0如何使用Compiler API”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: JDK6.0如何使用Compiler API

本文链接: https://lsjlt.com/news/233707.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JDK6.0如何使用Compiler API
    这篇文章将为大家详细讲解有关JDK6.0如何使用Compiler API,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。现在我们可以用JDK6 的Compiler API(JSR 199)去动态编译Java...
    99+
    2023-06-03
  • JDK6.0中如何使用Compiler API
    这篇文章将为大家详细讲解有关JDK6.0中如何使用Compiler API,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。public class CompilerAPITester&n...
    99+
    2023-06-03
  • 如何使用History API
    这篇文章主要讲解了“如何使用History API”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用History API”吧!一,开篇分析  为了提高...
    99+
    2024-04-02
  • ChatGPT API如何使用
    今天小编给大家分享一下ChatGPT API如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1.概述随着人工...
    99+
    2023-07-05
  • chatgpt api如何使用
    今天小编给大家分享一下chatgpt api如何使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。chatgpt-api是 ...
    99+
    2023-07-05
  • 如何分析JDK6.0的Desktop和SystemTray类特性
    今天就跟大家聊聊有关如何分析JDK6.0的Desktop和SystemTray类特性,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。在JDK6中 ,AWT新增加了两个类:Desktop...
    99+
    2023-06-03
  • html5的api如何使用
    本文小编为大家详细介绍“html5的api如何使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“html5的api如何使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。   ...
    99+
    2024-04-02
  • HTML5 FileSystem API如何使用
    本篇内容主要讲解“HTML5 FileSystem API如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“HTML5 FileSystem API如何使用...
    99+
    2024-04-02
  • Java8 Time Api如何使用
    本篇内容主要讲解“Java8 Time Api如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java8 Time Api如何使用”吧!1.概述作为...
    99+
    2023-06-30
  • JavaScript DOM API如何使用
    这篇文章主要介绍了JavaScript DOM API如何使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript DOM API如何使用文章都会有所收获,...
    99+
    2023-07-05
  • JavaScript中如何使用Geolocation API
    本文小编为大家详细介绍“JavaScript中如何使用Geolocation API”,内容详细,步骤清晰,细节处理妥当,希望这篇“JavaScript中如何使用Geolocation API”文章能帮助大...
    99+
    2024-04-02
  • Vue3.0 API中如何使用reactive
    这篇文章主要介绍“Vue3.0 API中如何使用reactive”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue3.0 API中如何使用reactive”文章能...
    99+
    2024-04-02
  • Vue3.0 API中如何使用markRaw
    这篇文章主要介绍“Vue3.0 API中如何使用markRaw”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue3.0 API中如何使用markRaw”文章能帮助...
    99+
    2024-04-02
  • Vue3.0 API中如何使用readonly
    今天小编给大家分享一下Vue3.0 API中如何使用readonly的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下...
    99+
    2024-04-02
  • Node.js中如何使用RESTful API
    本篇文章为大家展示了Node.js中如何使用RESTful API,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Node.js RESTful API现在介绍Nod...
    99+
    2024-04-02
  • 如何使用Python Numpy Load API?
    好的,下面是文章: Python是一种功能强大的编程语言,被广泛用于数据分析、机器学习、科学计算等领域。在这些领域中,处理大规模数据是常见的任务,而Numpy是Python中最流行的科学计算库之一。它提供了高效的数组操作和数学函数,可以使数...
    99+
    2023-09-04
    numpy load api
  • 如何在Django中使用API?
    好的,以下是文章内容: Django是一个流行的Python Web框架,它提供了许多内置的功能和库,使得开发Web应用变得更加容易。其中一个内置的功能是Django的REST框架,它让我们能够轻松地创建和使用API。 本文将会介绍如何在D...
    99+
    2023-06-29
    编程算法 django api
  • Android如何使用@hide的API
    这篇文章主要介绍了Android如何使用@hide的API,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。早上想修改MediaPlaybackService.Java(/pac...
    99+
    2023-05-30
    android @hide
  • GitLab API如何使用教程
    这篇文章主要介绍了GitLab API如何使用教程的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇GitLab API如何使用教程文章都会有所收获,下面我们一起来看看吧。1 简介GitLab 作为一个开源、强大的...
    99+
    2023-07-05
  • vue3中常用的API如何使用
    这篇文章主要介绍了vue3中常用的API如何使用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。vue3.x已经发布了这么久,相关的生态也慢慢起来了,包括vite这个新的打包工...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作