“核心技术Ⅱ:脚本、编译、注解处理”的版本间差异

来自Wikioe
跳到导航 跳到搜索
无编辑摘要
无编辑摘要
第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平台的脚本

脚本语言是一种通过在运行时解释程序文本,从而避免使用通常的“编辑/编译/链接/运行”循环的语言。脚本语言有许多优势:

  1. 便于快速变更,鼓励不断试验;
  2. 可以修改运行着的程序的行为;
  3. 支持程序用户的定制化;


但,大多数脚本语言都缺乏可以使编写复杂应用受益的特性,例如强类型、封装和模块化。
脚本API 可以在Java平台上实现将脚本语言和传统语言的优势相结合,它支待在Java程序中对用“JavaScript”、“Groovy”、“Ruby”,甚至是更奇异的诸如“Scheme”和“Haskell”等语言编写的脚本进行调用。

获取脚本引擎

   脚本引擎是一个可以执行用某种特定语言编写的脚本的类库。 当虚拟机启动时, 它会发现可用的脚本引擎。
  1. 枚举这些引赘, 需要构造一个“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类型”和“文件扩展名”:
    脚本引擎工厂的属性.png
  2. 可以直接通过以上(“引擎名”、“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类型。

脚本赋值与绑定

重定向输入和输出

间用脚本的函数和方法

编译脚本

编译器API

编译便捷之法

使用编译工具

一个示例:动态Java 代码生成

使用注解

注解简介

一个示例:注解事件处理器

注解语法

注解接口

注解

注解各类声明

注解类型用法

注解this

标准注解

用于编译的注解

用于管理资源的注解

元注解

源码级注解处理

注解处理

语言模型API

使用注解来生成源码

字节码工程

修改类文件

在加载时修改字节码