java.lang.Object
jdk.jshell.JShell
- 所有已实现的接口:
AutoCloseable
JShell 评估状态引擎。这是 JShell API 中的中心类。
JShell 实例保存不断发展的编译和执行状态。使用实例方法 eval(String) 、 drop(Snippet) 和 addToClasspath(String) 更改状态。大多数方法查询状态。 JShell 实例还允许使用 onSnippetEvent(Consumer) 和 onShutdown(Consumer) 注册事件,这些事件未注册到 unsubscribe(Subscription) 。通过 sourceCodeAnalysis() 访问源分析实用程序。完成后应关闭实例以释放资源 - close() 。
JShell 的一个实例是用 JShell.create() 创建的。
此类不是线程安全的,除非另有说明,否则所有访问都应通过单个线程进行。
- 自从:
- 9
-
内部类总结
内部类 -
方法总结
修饰符和类型方法描述voidaddToClasspath(String path) 指定的路径被添加到 eval() 中使用的类路径的末尾。static JShell.Builderbuilder()JShell.Builder的工厂方法反过来用于创建JShell的实例。voidclose()关闭此状态引擎。static JShellcreate()创建一个新的 JShell 状态引擎。diagnostics(Snippet snippet) 返回对代码段的最新评估的诊断。从状态中删除声明。评估输入字符串,包括定义和/或执行(如果适用)。imports()返回活动的导入片段。methods()返回活动的方法片段。onShutdown(Consumer<JShell> listener) 注册此 JShell 实例终止时要调用的回调。onSnippetEvent(Consumer<SnippetEvent> listener) 注册一个回调,当代码段的状态发生变化时调用。snippets()返回所有片段。访问源代码分析功能。返回片段的状态。voidstop()尝试停止当前正在运行的评估。types()返回活动类型声明(类、接口、注解类型和枚举)片段。unresolvedDependencies(DeclarationSnippet snippet) 对于RECOVERABLE_DEFINED或RECOVERABLE_NOT_DEFINED声明,片段当前未解析的依赖项的名称。voidunsubscribe(JShell.Subscription token) 取消回调订阅。返回活动变量片段。varValue(VarSnippet snippet) 获取变量的当前值。
-
方法详情
-
create
创建一个新的 JShell 状态引擎。也就是说,创建JShell的实例。相当于
JShell.builder().build()。- 返回:
JShell的实例。- 抛出:
IllegalStateException- 如果无法创建JShell实例。
-
builder
JShell.Builder的工厂方法反过来用于创建JShell的实例。使用JShell.builder().build()创建JShell的默认实例。有关更多构造选项,请参阅JShell.Builder。- 返回:
Builder的实例。- 参见:
-
sourceCodeAnalysis
访问源代码分析功能。JShell的实例将始终从sourceCodeAnalysis()返回相同的SourceCodeAnalysis实例。- 返回:
SourceCodeAnalysis的实例,可用于源代码分析,例如完成检测和完成建议。
-
eval
评估输入字符串,包括定义和/或执行(如果适用)。检查输入是否有错误,除非可以延迟错误(如某些未解决的依赖项引用的情况),否则错误将中止评估。输入应该是一个完整的源代码片段,即一个表达式、语句、变量声明、方法声明、类声明或导入。要将任意输入分解为单独的完整片段,请使用
SourceCodeAnalysis.analyzeCompletion(String)。对于导入,添加导入。类,接口。定义了方法和变量。执行变量、语句和表达式的初始化程序。修饰符 public、protected、private、static 和 final 不允许在 op-level 声明中使用,并且会被忽略并发出警告。同步的、本机的、抽象的和默认的顶级方法是不允许的,都是错误的。如果声明的先前定义被重写,则会有一个事件显示其状态更改为 OVERWRITTEN,这不会发生在丢弃、拒绝或已经重写的声明中。
如果执行环境在进程外,这是默认情况,那么如果评估的代码导致执行环境终止,则此
JShell实例将关闭,但调用进程和 VM 仍然有效。- 参数:
input- 要评估的输入字符串- 返回:
- 本次评价直接或间接引起的事件清单。
- 抛出:
IllegalStateException- 如果此JShell实例已关闭。- 参见:
-
drop
- 参数:
snippet- 要删除的代码段- 返回:
- 根据删除的代码段更新声明的事件列表。
- 抛出:
IllegalStateException- 如果此JShell实例已关闭。IllegalArgumentException- 如果片段与此JShell实例无关。
-
addToClasspath
指定的路径被添加到 eval() 中使用的类路径的末尾。请注意,无法从放置eval(String)代码的包访问未命名的包。- 参数:
path- 添加到类路径的路径。- 抛出:
IllegalStateException- 如果此JShell实例已关闭。
-
stop
public void stop()尝试停止当前正在运行的评估。在eval(java.lang.String)方法正在运行且正在执行用户代码时调用时,将尝试停止用户代码。请注意,通常需要从与运行eval方法的线程不同的线程调用此方法。如果
eval(java.lang.String)方法未运行,则不执行任何操作。在某些情况下,停止用户代码的尝试可能会失败,这可能包括在 I/O 操作上阻塞执行时,或者当用户代码正在捕获
ThreadDeath异常时。 -
close
public void close()关闭此状态引擎。释放资源。当不再需要此状态引擎时应调用。- 指定者:
close在接口AutoCloseable中
-
snippets
返回所有片段。- 返回:
- 所有当前代码段的代码段按 id 顺序排列。
-
variables
返回活动变量片段。此便捷方法等效于snippets()为status(snippet).isActive()&& snippet.kind() == Kind.VARIABLE过滤并转换为VarSnippet。- 返回:
- 活动声明的变量。
-
methods
返回活动的方法片段。此便捷方法等效于snippets()为status(snippet).isActive()&& snippet.kind() == Kind.METHOD过滤并转换为 MethodSnippet。- 返回:
- 活动声明的方法。
-
types
返回活动类型声明(类、接口、注释类型和枚举)片段。这个方便的方法相当于snippets()为status(snippet).isActive()&& snippet.kind() == Kind.TYPE_DECL过滤并转换为TypeDeclSnippet。- 返回:
- 活动声明的类型声明。
-
imports
返回活动的导入片段。此便捷方法等效于snippets()为status(snippet).isActive()&& snippet.kind() == Kind.IMPORT过滤并转换为 ImportSnippet。- 返回:
- 主动申报的导入声明。
-
status
返回片段的状态。这是由于显式eval()调用或由依赖项触发的自动更新而更新的。- 参数:
snippet- 要查找的Snippet- 返回:
- 此代码段对应的状态
- 抛出:
IllegalStateException- 如果此JShell实例已关闭。IllegalArgumentException- 如果片段与此JShell实例无关。
-
diagnostics
返回对代码段的最新评估的诊断。评估可能是因为显式eval()调用或由依赖项触发的自动更新。- 参数:
snippet- 要查找的Snippet- 返回:
-
与此代码段对应的诊断。这不包括
unresolvedDependencies()中报告的 unresolvedDependencies 引用。 - 抛出:
IllegalStateException- 如果此JShell实例已关闭。IllegalArgumentException- 如果片段与此JShell实例无关。
-
unresolvedDependencies
对于RECOVERABLE_DEFINED或RECOVERABLE_NOT_DEFINED声明,片段当前未解析的依赖项的名称。当另一个片段的eval()或drop()导致依赖项更新时,此方法对于给定方法的返回值可能会更改。- 参数:
snippet- 要查找的声明Snippet- 返回:
- 当前未解决的依赖项的符号名称流。
- 抛出:
IllegalStateException- 如果此JShell实例已关闭。IllegalArgumentException- 如果片段与此JShell实例无关。
-
varValue
获取变量的当前值。- 参数:
snippet- 查询其值的变量 Snippet。- 返回:
- 片段引用的变量的当前值。
- 抛出:
IllegalStateException- 如果此JShell实例已关闭。IllegalArgumentException- 如果片段与此JShell实例无关。IllegalArgumentException- 如果变量的状态不是Snippet.Status.VALID。
-
onSnippetEvent
public JShell.Subscription onSnippetEvent(Consumer <SnippetEvent > listener) throws IllegalStateException 注册一个回调,当代码段的状态发生变化时调用。每次调用都会添加一个新的订阅。- 参数:
listener- 状态更改时要执行的操作。- 返回:
- 可用于unsubscribe此订阅的令牌。
- 抛出:
IllegalStateException- 如果此JShell实例已关闭。
-
onShutdown
注册此 JShell 实例终止时要调用的回调。发生这种情况是因为客户端进程已结束(例如调用 System.exit(0))或连接已关闭,如 close()。每次调用都会添加一个新的订阅。- 参数:
listener- 状态终止时要执行的操作。- 返回:
- 可用于unsubscribe此订阅的令牌。
- 抛出:
IllegalStateException- 如果此 JShell 实例已关闭
-
unsubscribe
取消回调订阅。- 参数:
token- 要取消订阅的订阅对应的token。
-