深入剖析 Java 新特性
范学雷
前 Oracle 首席软件工程师,Java SE 安全组成员,OpenJDK 评审成员
16539 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 23 讲
深入剖析 Java 新特性
15
15
1.0x
00:00/00:00
登录|注册

01 | JShell:怎么快速验证简单的小问题?

你好,我是范学雷。今天,我们聊一聊 Java 的交互式编程环境,JShell。
JShell 这个特性,是在 JDK 9 正式发布的。从名字我们就能想到,JShell 是 Java 的脚本语言。一门编程语言,为什么还需要支持脚本语言呢?编程语言的脚本语言,会是什么样子的?它又能够给我们带来什么帮助呢?
让我们一起来一层一层地拆解这些问题,弄清楚 Java 语言的脚本工具是怎么帮助我们提高生产效率的。我们先从阅读案例开始。

阅读案例

学习编程语言的时候,我们可能都是从打印“Hello, world!”这个简单的例子开始的。一般来说,Java 语言的教科书也是这样的。今天,我们也从这个例子开始,温习一下 Java 语言第一课里面涉及的知识。
class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}
好了,有了这段可以拷贝的代码,接下来我们该怎么办呢?
首先,我们需要一个文本编辑器,比如 vi 或者类似于 IDEA 这样的集成编辑环境,把这段代码记录下来。文本编辑器,每个人都有不同的偏好,每个系统都有不同的偏好。一个软件工程师,可能需要很长时间,才能找到自己顺手的编辑器。就我自己而言,我使用了二十多年 vi 编辑器,直到这两年才发现 IDEA 的好。但是使用 IDEA 的时候,我还是会不自主地敲击 vi 的命令。不得不说,顺手,确实是一个很顽固、难改的行为习惯。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

JShell是Java的交互式编程环境,为开发者提供了快速验证和探索Java代码的便利。通过对比传统Java编译运行和bash脚本语言的效率差异,文章强调了学习效率的重要性。JShell的启动和退出方式以及提供的详尽模式和及时反馈也得到了介绍。JShell具有立即执行的特点,能够加快学习和评估简单Java代码的速度。另外,JShell支持可覆盖的声明和独立的表达式,简化了代码评估工作,提高了工作效率。文章还指出JShell并非取代IDE,对于复杂逻辑的验证,使用IDE或者可编译的代码更合适。总结来看,JShell能够极大地提高开发效率,尤其对于初学者和熟练开发者来说,都具有重要意义。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入剖析 Java 新特性》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(29)

  • 最新
  • 精选
  • 星月
    范老师好,作为一名有些Java基础的图书策划编辑,我惦记新Java这个选题很久了哈哈,感谢您的这次课程。但我也会认真听课哒,力求为可能有的相关图书选题锦上添花!

    作者回复: 出乎意料,居然有出版圈的朋友来。 谢谢来看这个专栏,希望可以帮到你。另外,现在图书编辑真是全能啊, 看得懂技术,够得着大势, 顾得上读者。

    2021-11-17
    11
  • 人要活泼些才好
    我把例子跟着打出来,比如那个switch,换行时会报错,这个问题大家遇到过没,我现在系统是win11,jdk11 ,求解答。

    作者回复: 这是一个很好的经验啊?JDK 11报的是语法错误吗?推荐使用JDK 17来学习这个专栏。这是一个switch的新用法。switch的问题,我们会在第5和第6讲里来说。

    2021-11-16
    14
    11
  • 黄剑豪
    输入一下这段代码出错的规避方法: jshell> greeting = switch (language) { ...> case "English" -> "Hello"; ...> case "Spanish" -> "Hola"; ...> case "Chinese" -> "Nihao"; ...> default -> throw new RuntimeException("Unsupported language"); ...> }; 使用/edit 命令打开编辑器,然后输入代码,保存退出后运行就没有错误了。我觉得这个是JDK17当前版本的jshell的bug。 其实复杂命令的输入都建议用编辑器编写。可以设置自己喜欢的编辑器。例如下面的命令将vscode设置为编辑器。 /set editor -retain <path-to-code> -w 进一步,可以在vscode的终端运行jshell,然后用/edit直接打开vscode打开一个窗口编辑。这样也不用来回切换终端和vscode窗口。

    作者回复: 看起来是输入字符解析的bug。是的,复杂的输入使用编辑器更清晰些。

    2021-11-18
    8
  • bigben
    有意思

    作者回复: 会越来越有意思的,这一讲就是个开胃的小菜。

    2021-11-16
    4
  • 都选C
    jshell> String firstString= "Hello, world"; firstString ==> "Hello, world" | modified variable firstString : String | update overwrote variable firstString : String jshell> String sameString= "Hello, world"; sameString ==> "Hello, world" | modified variable sameString : String | update overwrote variable sameString : String jshell> firstString == sameString $2 ==> true | created scratch variable $2 : boolean

    作者回复: 熟悉的ID啊,应该是老朋友了。

    2021-11-15
    4
  • 王位庆
    还停留在jdk8[捂脸]

    作者回复: 哈哈,老问题了。

    2021-11-15
    4
    4
  • 3.141516
    话说 Java11 免费吗

    作者回复: OpenJDK都是免费的。 Oracle发布的版本,JDK 17也是免费的。是不是免费这个问题,有很多误解。你可以看看我在InfoQ上写的文章(https://xie.infoq.cn/article/a72ca12f97838e16ba2c91937)。 这个文章稍微有点老了,没有反应JDK 17之后的规则,不过大致的方向没有问题。

    2021-11-15
    2
  • Jxin
    实现层面 1.仅展示的能力来看,感觉自己实现个jshll也不难。计算逻辑直接执行字符串就能拿到结果,特殊语法就做一层识别转换,变量就自己维护个上下文。 价值层面 1.对于新手。大大降低了起手难度,而简单就意味着易于推广。虽然一门语言的获客主要还是靠市场诉求驱动,但帮助新顾客更快更舒适的着陆,确实能更好的壮大社区。新人~社区~市场诉求~新人 是一条有力的增强回路。而jshll能加速新人到社区这条连线,进而也能推动整个增强回路的运作。不过,还是得看实际推行情况。需要着力推行在面向初学者的培训机构或学校的使用上。毕竟这些机构滞后可是非常严重的,能用上8都算靠前了。 2.对于刚入门的。语法上的模糊可以借助其快速验证,有利于更快的熟练语法。 3.对于老手。新语言特性可以在这个上面验证。就是还是太局限。稍微复杂点的验证都不适用。基本只能验证某些类库的函数方法的单一效果,或则某些语法单一的效果。反正我的话多半走单测,虽然不即时,但写起来快呀。 展望 1.能否连上本地java进程呢?能的话抛开安全因素,其实可以做很多东西。

    作者回复: "需要着力推行在面向初学者的培训机构或学校的使用上",如果教育和图书能够先行起来,对Java的发展会有巨大的推动。

    2021-11-17
    1
  • 注定非凡
    真是有趣的新特性,确实有很长一段时间没有关注JAVA的新特性了

    作者回复: 快来一起学...

    2021-11-17
    1
  • will
    老师,github连接在哪呢?

    作者回复: 每一讲的末尾,都有一个注。 说的就是GitHub的链接, 和PR请求提交的目录。

    2021-11-16
    1
收起评论
显示
设置
留言
29
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部