“核心技术Ⅱ:脚本、编译、注解处理”的版本间差异
跳到导航
跳到搜索
无编辑摘要 |
无编辑摘要 |
||
第2行: | 第2行: | ||
== Java平台的脚本 == | == Java平台的脚本 == | ||
脚本语言是一种通过在运行时解释程序文本,从而避免使用通常的“编辑/编译/链接/运行”循环的语言。脚本语言有许多优势: | |||
# 便于快速变更,鼓励不断试验; | |||
# 可以修改运行着的程序的行为; | |||
# 支持程序用户的定制化; | |||
<br/> | |||
但,大多数脚本语言都缺乏可以使编写复杂应用受益的特性,例如强类型、封装和模块化。 | |||
<br/> | |||
脚本API 可以在Java平台上实现将脚本语言和传统语言的优势相结合,它支待在Java程序中对用“JavaScript”、“Groovy”、“Ruby”,甚至是更奇异的诸如“Scheme”和“Haskell”等语言编写的脚本进行调用。 | |||
=== 获取脚本引擎 === | === 获取脚本引擎 === | ||
<pre> | |||
脚本引擎是一个可以执行用某种特定语言编写的脚本的类库。 当虚拟机启动时, 它会发现可用的脚本引擎。 | |||
</pre> | |||
# 枚举这些引赘, 需要构造一个“'''ScriptEngineManager'''”,并调用“'''getEngineFactories'''”方法: | |||
#: <syntaxhighlight lang="java"> | |||
ScriptEngineManager manager = new ScriptEngineManager(); | |||
String language; | |||
if(args.length = 0) | |||
{ | |||
System.out.println("Available factories: "); | |||
for(ScriptEngineFactory factory : manager.getEnginefactories()) | |||
System.out.println(factory.getEngineName()); | |||
language="nashorn"; | |||
} | |||
else 1anguage = args[0]; | |||
</syntaxhighlight> | |||
#: 可以查询每个引擎工厂支持的“引擎名”、“MIME类型”和“文件扩展名”: | |||
#: [[File:脚本引擎工厂的属性.png|600px]] | |||
# 可以直接通过以上(“引擎名”、“MIME类型”和“文件扩展名”)来请求引擎: | |||
#: <syntaxhighlight lang="java"> | |||
final ScriptEngine engine = manager.getEngineByName(language); | |||
if(engine == null) | |||
{ | |||
System.err.println("No engine for " + language); | |||
System.exit(1); | |||
} | |||
</syntaxhighlight> | |||
* JavaSE 8 包含一个“Nashorn”版本,这是由Oracle开发的一个JavaScript解释器。 | |||
* 可以通过在类路径中提供必要的JAR文件来添加对更多语言的支持。 | |||
==== 相关方法 ==== | |||
javax.script.ScriptEngineManager 6 | |||
* List<ScriptEngineFactory> getEngineFactories() | |||
*: 获取所有发现的引擎工厂的列表。 | |||
* ScriptEngine getEngineByName(String name) | |||
* ScriptEngine getEngineByExtension(String extension) | |||
* ScriptEngine getEngi neByMimeType(Stri ng mi me Type) | |||
*: 获取给定名字、 脚本文件扩展名或M IM E 类型的脚本引擎。 | |||
javax.script.ScriptEngineFactory 6 | |||
* List<String> getNames() | |||
* List<String> getExtensions() | |||
* List<String> getMimeTypes() | |||
*: 获取该工厂所了解的名字、脚本文件扩展名和MIME类型。 | |||
=== 脚本赋值与绑定 === | === 脚本赋值与绑定 === | ||
=== 重定向输入和输出 === | === 重定向输入和输出 === |
2020年12月19日 (六) 18:04的版本
Java平台的脚本
脚本语言是一种通过在运行时解释程序文本,从而避免使用通常的“编辑/编译/链接/运行”循环的语言。脚本语言有许多优势:
- 便于快速变更,鼓励不断试验;
- 可以修改运行着的程序的行为;
- 支持程序用户的定制化;
但,大多数脚本语言都缺乏可以使编写复杂应用受益的特性,例如强类型、封装和模块化。
脚本API 可以在Java平台上实现将脚本语言和传统语言的优势相结合,它支待在Java程序中对用“JavaScript”、“Groovy”、“Ruby”,甚至是更奇异的诸如“Scheme”和“Haskell”等语言编写的脚本进行调用。
获取脚本引擎
脚本引擎是一个可以执行用某种特定语言编写的脚本的类库。 当虚拟机启动时, 它会发现可用的脚本引擎。
- 枚举这些引赘, 需要构造一个“ScriptEngineManager”,并调用“getEngineFactories”方法:
ScriptEngineManager manager = new ScriptEngineManager(); String language; if(args.length = 0) { System.out.println("Available factories: "); for(ScriptEngineFactory factory : manager.getEnginefactories()) System.out.println(factory.getEngineName()); language="nashorn"; } else 1anguage = args[0];
- 可以查询每个引擎工厂支持的“引擎名”、“MIME类型”和“文件扩展名”:
- 可以直接通过以上(“引擎名”、“MIME类型”和“文件扩展名”)来请求引擎:
final ScriptEngine engine = manager.getEngineByName(language); if(engine == null) { System.err.println("No engine for " + language); System.exit(1); }
- JavaSE 8 包含一个“Nashorn”版本,这是由Oracle开发的一个JavaScript解释器。
- 可以通过在类路径中提供必要的JAR文件来添加对更多语言的支持。
相关方法
javax.script.ScriptEngineManager 6
- List<ScriptEngineFactory> getEngineFactories()
- 获取所有发现的引擎工厂的列表。
- ScriptEngine getEngineByName(String name)
- ScriptEngine getEngineByExtension(String extension)
- ScriptEngine getEngi neByMimeType(Stri ng mi me Type)
- 获取给定名字、 脚本文件扩展名或M IM E 类型的脚本引擎。
javax.script.ScriptEngineFactory 6
- List<String> getNames()
- List<String> getExtensions()
- List<String> getMimeTypes()
- 获取该工厂所了解的名字、脚本文件扩展名和MIME类型。