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

yufei       6 年, 4 月 前       650

继续发掘 JSHell ,刚刚无意中多按了两下 Tab 键,竟然发现了一个新功能,自动提示。哇塞。

JShell 中的自动提示功能

在 JShell 中输入代码片段时,随时可以使用 Tab 键来显示自动提示,而且这个提示功能还挺智能的,如果无法根据输入的内容确定具体的提示时,则提供一些可能的选项。

例如上一章节中我们定义的 volume() 方法,但我们调用方法时,可以先输入 vol 然后按下 Tab

shell> vol<tab>

因为 vol 开头的变量、方法和类只有 volume() 方法,所以会自动完成到以下步骤

jshell> volume(

如果我们再次按下 <Tab> 键,那么就会出现一些提示信息,比如提示我们再按一下就会提示可以作为该方法的参数和该方法的签名

jshell> volume(
$14       $16       $2        cube(     divide(   volume(   

签名:
double volume(double radius)

<再次按 Tab 可查看文档>

jshell> volume(

如果再次按下 <Tab> 键,则会继续显示该方法的文档,如果有的话

<找不到文档>

<再次按 Tab 可查看所有可能的输入提示; 可能的输入提示总计: 553>

jshell> volume(

还可以继续按 <Tab> 键,但那样没啥大意义了...

如果项目可以多种方式完成,则会显示一组可能性,例如我们输入 System.c 然后按下 <Tab> 键会显示如下

jshell> System.c
class                 clearProperty(        console()             currentTimeMillis()   

jshell> System.c

我们可以输入任意字符,然后按下 <Tab> 键来提示可能的输入项。而且光标可以出于任意位置。但是,一般情况下我们都会让光标出于末尾,这样才能有意义。

例如我们可以先输入 System.c 然后使用 <- 键把光标移动到 e 后面,再次按下 <Tab> 则显示如下

jshell> Syste<Tab>m.c
jshell> Systemm.c

自动完成除了能够自动提示可能的方法、变量和类名外,如果光标位于 左括号 后面,还会提示 参数 可能自动完成的选项。例如我们先输入 "简单教程".startsWith( 然后按下 <Tab> 键,则会告诉我们可能的参数

jshell> "简单教程".startsWith(
$4       $6       twice(   x        

签名:
boolean String.startsWith(String prefix, int toffset)
boolean String.startsWith(String prefix)

<再次按 Tab 可查看文档>

jshell> "简单教程".startsWith(

在这一步,如果再次按下 <Tab> 键则会显示纯文本格式的文档

jshell> "简单教程".startsWith(
boolean String.startsWith(String prefix, int toffset)
Tests if the substring of this string beginning at the specified index starts with the
specified prefix.

Parameters:
prefix - the prefix.
toffset - where to begin looking in this string.

Returns:
true if the character sequence represented by the argument is a prefix of the substring of this
          object starting at index toffset ; false otherwise. The result is false if toffset is
          negative or greater than the length of this String object; otherwise the result is
          the same as the result of the expression
                    this.substring(toffset).startsWith(prefix)


<按 Tab 可查看下一文档>

jshell> "简单教程".startsWith(

片段转换

如果我们使用的类并没有导入到当前的上下文中,那么在首次引用时可以轻松导入所需的类,JShell 会提示一些可用的选项,并允许我们使用键盘快捷键将表达式转换为变量声明。

当然了,这个过程是通过同时按下 <Shift><Tab> 键,松开,再按下 <i> 键达到的。

注意: 仔细看这个说明文字,而且要返回练习,刚开始我都是错误的。

例如,我们可以先输入 new JFrame 然后同时按下 <Shift><Tab> 键,松开,再按下 <i> 键就会提示导入选项了

jshell> new JFrame<Shift + Tab> <i>
0: 不执行任何操作
1: import: javax.swing.JFrame
选项: 

当出现选项的时候,就可以按下左边的数字来作出选择了

jshell> new JFrame
0: 不执行任何操作
1: import: javax.swing.JFrame
选项: 
Imported: javax.swing.JFrame

jshell> new JFrame1

在按下 <Shift><Tab> 键后,接下来如果按错了,那么就会提示我们正确的方法,就在这里,我还发现了 v 键这个选项,用于将表达式转换为创建变量。

例如我们先输入 new JFrame("Demo") 然后按下 <Shift><Tab> 键,松开后在按下 v 键,光标就会出现在变量名称的后面

jshell> new JFrame("Demo")<Shift + Tab> <i>
jshell> JFrame  = new JFrame("Demo")

注意:输入的表达式必须有效或忽略转换请求。上面的示例中,在变量转换之前需要导入 JFrame

然后我们就可以在光标处输入变量名称 jframe 并按下回车键

jshell> JFrame jframe = new JFrame("demo")
jframe ==> javax.swing.JFrame[frame0,0,23,0x0,invalid,hidden ... tPaneCheckingEnabled=true]
|  已创建 变量 jframe : JFrame

jshell> 

如果表达式的结果类型尚未导入,那么在这种情况下,Shift + Tab v 提供导入和创建变量,如以下示例所示:

jshell> jframe.getGraphics()
0: 不执行任何操作
1: 创建变量
2: import: java.awt.Graphics. 创建变量
选项: 

这种情况下,我们只要按下对应的数字即可

jshell> Graphics gc = jframe.getGraphics()
gc ==> null
|  已创建 变量 gc : Graphics

jshell> 
目前尚无回复
简单教程 = 简单教程,简单编程
简单教程 是一个关于技术和学习的地方
现在注册
已注册用户请 登入
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

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

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