JDK11 | 第二篇 : JShell 工具
文章首发于公众号《程序员果果》
一、简介
Java Shell工具是JDK1.9出现的工具, Java Shell工具(JShell)是一个用于学习Java编程语言和Java代码原型的交互式工具。JShell是一个Read-Evaluate-Print循环(REPL),它在输入时评估声明,语句和表达式,并立即显示结果。该工具从命令行运行。
二、为什么要使用JShell ?
使用JShell,您可以一次输入一个程序元素,立即查看结果,并根据需要进行调整。
Java程序开发通常涉及以下过程:
- 写一个完整的程序。
- 编译它并修复任何错误。
- 运行程序。
- 弄清楚它有什么问题。
- 编辑它。
- 重复这个过程。
JShell可帮助您在开发程序时尝试代码并轻松探索选项。您可以测试单个语句,尝试不同的方法变体,并在JShell会话中试验不熟悉的API。JShell不替换IDE。在开发程序时,将代码粘贴到JShell中进行试用,然后将JShell中的工作代码粘贴到程序编辑器或IDE中。
三、JShell的使用
1. 启动和退出
使用JShell需要配置好java的环境变量。
启动:
jshell
要以详细模式启动JShell,请使用以下-v选项:
jshell -v
退出:
/exit
2. 运行代码片段
使用详细选项启动JShell以获得最大可用反馈量:
jshell -v | 欢迎使用 JShell -- 版本 11.0.2 | 要大致了解该版本, 请键入: /help intro
在提示符处输入以下示例语句,并查看显示的输出:
jshell> int x = 45 x ==> 45 | 已创建 变量 x : int
首先,显示结果。将其读作:变量x的值为45.因为您处于详细模式,所以还会显示所发生情况的描述。
注意:如果未输入分号,则会自动将终止分号添加到完整代码段的末尾。
当输入的表达式没有命名变量时,会创建一个临时变量,以便稍后可以引用该值。以下示例显示表达式和方法结果的临时值。该示例还显示了...> 在代码段需要多行输入完成时使用的continuation prompt():
jshell> String twice(String s) { ...> return s + s; ...> } | 已创建 方法 twice(String) jshell> twice("Oecan") $4 ==> "OecanOecan" | 已创建暂存变量 $4 : String
3. 改变定义
在试验代码时,您可能会发现变量,方法或类的定义没有按照您希望的方式执行。通过输入新的定义可以轻松更改定义,该定义将覆盖先前的定义。
要更改变量,方法或类的定义,只需输入新定义即可。例如,twice在定义该方法尝试片段得到在下面的示例中的新定义:
jshell> String twice(String s) { ...> return "Twice: " + s; ...> } | 已修改 方法 twice(String) | 更新已覆盖 方法 twice(String) jshell> twice("thing") $6 ==> "Twice: thing" | 已创建暂存变量 $6 : String
还可以改变变量的类型定义。以下示例显示x从String更改int为:
jshell> int x = 45 x ==> 45 | 已创建 变量 x : int jshell> String x x ==> null | 已替换 变量 x : String | 更新已覆盖 变量 x : int
4. 查看默认导入和使用自动补全功能
默认情况下,JShell提供了一些常用包的导入,我们可以使用 import 语句导入必要的包或是从指定的路径的包,来运行我们的代码片段。我们可以输入以下命令列出所有导入的包:
jshell> /imports | import java.io.* | import java.math.* | import java.net.* | import java.nio.file.* | import java.util.* | import java.util.concurrent.* | import java.util.function.* | import java.util.prefs.* | import java.util.regex.* | import java.util.stream.*
5. 自动补全的功能
当我们想输入System类时,根据前面说的自动补全,只需要输入Sys然后按下 Tab 键,则自动补全, 然后再输入“.o”,则会自动补全方法, 在补全“System.out.”后按下 Tab 键,接下来就会列出当前类的所有的 public 方法的列表:
jshell> System 签名: java.lang.System <再次按 Tab 可查看文档> jshell> System.out. append( checkError() close() equals( flush() format( getClass() hashCode() notify() notifyAll() print( printf( println( toString() wait( write(
6. 列出到目前为止当前 session 里所有有效的代码片段
jshell> /list 2 : 2+2 4 : twice("Oecan") 5 : String twice(String s) { return "Twice: " + s; } 6 : twice("thing") 8 : String x;
7. 列出到目前为止当前 session 里所有方法
jshell> /methods | String twice(String)
8. 使用外部代码编辑器来编写 Java 代码
现在,我想对twice方法做一些改动,如果这时有外部代码编辑器的话,做起来会很容易。在 JShell 中可以启用JShell Edit Pad 编辑器,需要输入如下命令,来修改上面的方法:
代码修改完成以后,先点击“Accept”按钮,再点击“Exit”按钮,则退出编辑器,在 JShell 命令行中提示方法已经修改。
9. 从外部加载源代码
如果在外部已经有写好的 Java 文件,可以使用/open 命令导入到 JShell 环境中,例如现在有一个Test.java文件:
void say(String name) { System.out.println("hello " + name); }
jshell> /open /Users/Documents/java11/Test.java jshell> /methods | String twice(String) | void say(String) jshell> say("zhangsan") hello zhangsan
JShell工具的更多使用方法,请参照官方示例:https://docs.oracle.com/javase/9/jshell/
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
JDK11 | 第一篇 : JDK11 介绍
文章首发于公众号《程序员果果》 地址 : https://mp.weixin.qq.com/s/cOqRVlDgOqfDfKtkk1JGxw 一、简介 北京时间 2018年9 月 26 日,Oracle 官方宣布 Java 11 正式发布。这是 Java 大版本周期变化后的第一个长期支持版本,非常值得关注。从官网即可下载, 最新发布的 Java11 将带来 ZGC、Http Client 等重要特性。Java 11 新特性: 从时间节点来看,JDK 11 的发布正好处在 JDK 8 免费更新到期的前夕,同时 JDK 9、10 也陆续成为“历史版本”。JDK 11 将是一个企业不可忽视的版本。 二、更新的细节 在过去的很多年中,Oracle 和 OpenJDK 社区提供了接近免费的午餐,导致人们忽略了其背后的海量工作和价值,这其中包括但不仅仅限于:最新的安全更新,如,安全协议等基础设施的升级和维护,安全漏洞的及时修补,这是 Java 成为企业核心设施的基础之一。大量的新特性、Bug 修复,例如,容器环境支持,GC 等基础领域的增强。很多生产开发中的 Hack,其实升级 JDK 就能解决了...
- 下一篇
JDK11 | 第三篇 : 局部变量类型推断
文章首发于公众号《程序员果果》 地址 : https://mp.weixin.qq.com/s/PB0Mw4bzjDML7nto2M8x2w 一、简介 Java局部变量类型推断(LVTI),简称var类型(标识符var不是一个关键字,是一个预留类型名),Java10中新添加的功能。作为100%编译特征,它不会影响字节码,运行时或者性能。在编译时,编译器会检查赋值语句右侧代码,从而推断出具体类型。它查看声明的右侧,如果这是一个初始化语句,它会用那个类型取代var。另外,它非常有助于减少冗余代码和样板代码。 二、使用及注意事项 1. 争取起有意义的局部变量名 通常我们在起全局变量名的时候会注意这一点,但是选择局部变量名的时候不太注意。尤其是当方法很短,方法名和实现都不错的时候,我们趋向于简化我们的变量名。但是当我们使用var替代显式类型的时候,具体的类型是通过编译器推断出来的。所以,对于人来说阅读或者理解代码非常困难。在这一点上var削弱了代码可读性。这种事情之所以会发生,是因为大多数情况下,我们会把变量类型当成是第一信息,而把变量名当成第二信息。但是使用var的时候,恰恰相反。 示例1 ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Red5直播服务器,属于Java语言的直播服务器
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作