jshell介绍
谁说原生java不能函数式编成!
JShell(JAVA Shell tool)是用来学习java语言和代码设计的一个交互式工具。JShell是一个Read-Evaluate-Print Loop (REPL)阅读-键入-打印-循环系统(函数式编成),他可以进行代码声明、输入语句、输入表达式 然后直接显示结果。 然后这是一个命令行工具。
为什么使用Jshell
使用Jshell 你可以对程序过程中任意对象随时查看打印结果,而且可以根据实际情况立即作出调整。
写一个java 程序一般涉及到下面几个步骤:
1. 写一个完整的程序
2. 编译&修改编译错误
3. 运行程序
4. 看下哪里错了
5. 修改代码
6. 然后循环1->5 直到全部OK
Jshell可以实验你的代码还可以探索性的开发你的程序。你可以随意编写代码,提炼出一个精良方法,也可以在jshell session里边试用一些不熟悉的API。
Jshell当然不能替代IDE啦,但是你可以先把代码在jshell里边试验成功以后(因为这样就不用重复上面那个重复编译的循环)然后就可以粘贴到你的IDE里边去用了。
Jshell的启动和停止
Jshell 包含在JDK9里边,所以必须要安装JDK9。进入命令行(windows下是CMD),如果你没有将$JAVA/bin 加入到系统PATH中,那么你只能进入到$JAVA_HOME/bin 使用./jshell进行启动了
Jshell启动两种模式
正常模式
% jshell
| Welcome to JShell -- Version 9
| For an introduction type: /help intro
#这里已经进入jshell了。
jshell>
详情模式(-v)
详情模式是方便你看到例子和教程同步,也就是可以很方便得到引导和错误反馈。当你已经很熟悉这个工具了,那你就可以尝试使用其他正常的或者间接模式(其他模式)
启动详情模式用 -v 选项:
% jshell -v
To exit JShell, enter /exit:
jshell> /exit
| Goodbye
完整例子(功能演示)
leombp:~ Leo$ jshell -v
jshell> /help intro #查看系统大概的帮助
|
| intro
|
| 使用 jshell 工具可以执行 Java 代码, 从而立即获取结果。
| 您可以输入 Java 定义 (变量, 方法, 类, 等等), 例如: int x = 8
| 或 Java 表达式, 例如: x + x
| 或 Java 语句或导入。
| 这些小块的 Java 代码称为 '片段'。
|
| 这些 jshell 命令还可以让您了解和
| 控制您正在执行的操作, 例如: /list
|
| 有关命令的列表, 请执行: /help
jshell> test # 测试下详细模式的错误日志
| 错误:
| 找不到符号
| 符号: 变量 test
| 位置: 类
| test
| ^--^
jshell> 1+1 #可以很方便进行数字简单计算
$1 ==> 2
| 已创建暂存变量 $1 : int
jshell> int a=10 #正常定义变量
a ==> 10
| 已创建 变量 a : int
jshell> String twice(String s){ #函数式定义方法
...> return s + s;
...> }
| 已创建 方法 twice(String)
jshell> twice( #调用方法,这里类似Linux 按tab键可以想IDE一样进行提示。
twice(
jshell> twice("I Love This Game. ") #调用成功
$4 ==> "I Love This Game. I Love This Game. "
| 已创建暂存变量 $4 : String
jshell> $4 #返回系统自动声明一个变量$4
$4 ==> "I Love This Game. I Love This Game. "
| $4 的值: String
jshell> int divide(int x,int y){ #定义一个方法进行异常测试
...> return x /y ;
...> }
| 已创建 方法 divide(int,int)
jshell> dived #按tab进行提示
jshell> divide(10,0) #异常
| java.lang.ArithmeticException thrown: / by zero
| at divide (#6:2)
| at (#7:1)
jshell> /list #查看用户定义
1 : 1+1
2 : int a=10;
3 : String twice(String s){
return s + s;
}
4 : twice("I Love This Game. ")
5 : $4
6 : int divide(int x,int y){
return x /y ;
}
7 : divide(10,0)
jshell> "str". #测试下tab对对象的自动提示
charAt( chars() codePointAt(
codePointBefore( codePointCount( codePoints()
compareTo( compareToIgnoreCase( concat(
contains( contentEquals( endsWith(
equals( equalsIgnoreCase( getBytes(
getChars( getClass() hashCode()
indexOf( intern() isEmpty()
lastIndexOf( length() matches(
notify() notifyAll() offsetByCodePoints(
regionMatches( replace( replaceAll(
replaceFirst( split( startsWith(
subSequence( substring( toCharArray()
toLowerCase( toString() toUpperCase(
trim() wait(
#测试自动导入
#Shift + Tab + i后出现意外的字符。
#Mac下是 `tab + i` 进行自动导入。
jshell> new JFrame
0: 不执行任何操作
1: import: javax.swing.JFrame
选项: #我输入了 1
Imported: javax.swing.JFrame
jshell> new JFrame
jshell> /exit #退出命令
| 再见