[Java Shell 指南] - 代码片段 ( 一 )

yufei       5 年, 6 月 前       563

Java JShell 支持运行 Java 语句、变量、方法和类定义、imports 和表达式语句,我们统称这些 Java 代码称为片段 ( snippets )。因此,Java Shell 的功能还是蛮齐全的。

本章节我们将会介绍一下内容

  1. 尝试一些简单的 Java 片段。
  2. 改变定义
  3. 向前引用
  4. 异常处理
  5. Tab 键自动完成片段
  6. 片段转换

尝试一些简单的 Java 片段

将 Java 代码片段输入 JShell 回车后会立即运行,会即时显示有关结果,执行的操作以及发生的任何错误的反馈。你可以在 JShell 中输入本章节的任何片段,与我们一起遨游 JShell。

如果在启动 JShell 时添加 verbose 选项 ( -v ),可以获得最大的可用反馈提示。

[yufei@www.twle.cn ~]$ jshell -v
|  欢迎使用 JShell -- 版本 10.0.2
|  要大致了解该版本, 请键入: /help intro

jshell> 

然后在 JShell 中输入以下语句,查看输出结果

jshell> int x = 30;
x ==> 30
|  已创建 变量 x : int

可以看到,当我们输入按下回车键后,就会立即显示结果。

上面这个范例结果告诉我们,已经创建了一个变量 x ,类型为 int,并且赋值为 30。 会显示这么详细的结果是因为我们启用了 -v 选项,JShell 会输出当前发生了什么。

这种信息性的消息是以竖条 ( | ) 开始的,告诉了我们刚刚创建的变量名称和变量类型。

注意

JShell 会自动补全末尾的分号,所以,即使我们没有输入,也不会发生错误。

当输入的表达式没有赋值给变量时,JShell 会自动创建一个临时变量,以便接下来的代码中可以引用该值。下面的范例显示了表达式和方法结果的临时值。这个范例还演示了在代码段需要多行输入完成时使用的延续提示( ...>

jshell> 2 + 2
$2 ==> 4
|  已创建暂存变量 $2 : int

jshell> String twice(String s) {
   ...>  return s +s;
   ...> }
|  已创建 方法 twice(String)

jshell> twice("简单教程")
$4 ==> "简单教程简单教程"
|  已创建暂存变量 $4 : String

改变定义

在试验代码时,我们经常会发现变量,方法或类的定义没有按照我们希望的方式执行。在 JShell 中,我们可以通过重新输入新的定义可以来覆盖之前的定义。

例如,下面的定义将覆盖先前的定义

jshell> String twice(String s) {
   ...>    return "Twice:" + s;
   ...> }
|  已修改 方法 twice(String)
|    更新已覆盖 方法 twice(String)

jshell> twice("简单教程")
$6 ==> "Twice:简单教程"
|  已创建暂存变量 $6 : String

jshell> 

观察我们重新定义 twice(String s) 的返回结果,由第一次创建时的 已创建 方法 twice(String) 变成了

|  已修改 方法 twice(String)
|    更新已覆盖 方法 twice(String)

从这条消息中可以看出,我们的覆写已经生效了,因为覆写的方法和之前的方法有着相同的签名,所以调用方式仍然有效。

当然了,我们还可以以不兼容的方式覆写定义。例如下面的示例,我们把 x 变量的类型从 int 更改为 String

jshell> int x = 45
x ==> 45
|  已修改 变量 x : int
|    更新已覆盖 变量 x : int

jshell> String x = "简单教程"
x ==> "简单教程"
|  已替换 变量 x : String
|    更新已覆盖 变量 x : int

jshell> 

注意观察两次覆写的不同,第一次保持了变量的签名不变,因此提示信息是 已修改 变量 x : int ,而第二次我们更改了 x 变量的类型,因此提示信息变成了 已替换 变量 x : String ,也就是由 修改 变成了 替换

改变提示信息的模式

刚刚我们能看到提示信息,是因为启动 JShell 添加了 -v 选项,这个选项会输出很多有用的消息。

如果你有需要更改提示信息的模式,可以使用 /set feedback 命令设置提示信息的级别和格式。例如使用 /set feedback concise 设置不显示信息提示。

如果需要在不同的 JShell 之间相互拷贝代码,那么你可能更喜欢没有提示且只有错误反馈的反馈模式,如果是,则输入 /set feedback silent 命令

silentconcise 之间的区别主要是如何对待出错,前者会显示出错信息,后者什么也不会输出

需要说明的是 /set feedback 有四种模式,你可以使用 /set feedback 查看具体的选项

jshell> /set feedback
|  /set feedback concise
|  
|  可用的反馈模式:
|     concise
|     normal
|     silent
|     verbose
模式 说明
concise 简要模式,不输出任何正常信息,但会输出错误信息
normal 会输出代码片段的执行结果,但不会输出提示信息
slient 错误信息也不会输出
verbose 输出详细的信息,包括提示信息
目前尚无回复
简单教程 = 简单教程,简单编程
简单教程 是一个关于技术和学习的地方
现在注册
已注册用户请 登入
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.