1. 什么是JShell工具?
JShell是Java 9中引入的一种交互式编程工具,可以在命令行中实时评估Java代码。使用JShell可以使得Java语言更易于使用和学习。
1.1 JShell的优点
- 快速反馈:JShell可以立即执行代码并输出结果,这使得调试和试验变得更加快速和高效。
- 易于使用:JShell是Java语言的交互式控制台,无需创建源文件,可以直接输入代码并获得结果,所有的Java表达式都可以在JShell中使用。
- 学习新API:使用JShell可以实时测试和验证新的Java API,这对学习Java很有帮助。
1.2 JShell的限制
- JShell不适合大型项目:虽然可以在JShell中编写Java代码,但是JShell本身不支持使用包或类的定义进行编程,因此不适合在大型项目中使用。
- JShell缺少IDE的优势:JShell不像IDE那样提供大量的代码模板、自动完成功能和调试工具等,因此在开发过程中可能需要更多的手动操作。
2. JShell的内部工作原理
2.1 JVM之外的JShell执行引擎
JShell的处理引擎在JVM之外处理用户输入的代码,以便立即评估和执行代码片段。这个引擎执行用户输入的代码时,会执行两个关键步骤:
1. 将用户输入的代码转换为抽象语法树。
2. 对AST进行评估和执行,以生成结果。
2.2 处理输入代码的Parser
JShell使用Java编写的Parser来解析用户输入的Java代码。这个Parser使用Java语法规则将用户输入的代码分析成树形结构,即抽象语法树。
2.3 抽象语法树(AST)
抽象语法树(AST)是一种从源代码中提取出来的树形结构,树的节点表示源代码中的语法单元。例如,在Java中,变量声明、方法声明和表达式等语法单元都可以在AST中表示为节点。
2.4 代码片段的执行和结果的显示
通过将用户输入的代码转换为抽象语法树并在JVM之外进行评估和执行,JShell可以在用户输入代码时立即提供反馈和结果。在执行完成后,JShell会将结果生成并显示在控制台中。
int a = 10;
int b = 20;
System.out.println("a+b="+(a+b));
以上代码在JShell中执行结果为:
| Expression value is: 30
| assigned to temporary variable $2 of type int
以上结果表明,变量a和b的值分别为10和20,并使用表达式a+b计算并显示结果。
3. 总结
JShell是Java 9中引入的一种交互式编程工具,可以在命令行中实时评估Java代码。通过将用户输入的代码转换为抽象语法树并在JVM之外进行评估和执行,JShell可以在用户输入代码时立即提供反馈和结果,这使得调试和试验变得更加快速和高效。虽然JShell不能用于大型项目,但对于Java学习者和Java API的实验和测试非常有用。