Java代码有效和片段有效_Java 9 尝鲜之交互式编程环境
Java 9
JShell——Java 9 的交互式编程环境
本文要求读者有基本的 Java 知识。
Tips
Java 9 的代码由于提供了新特性,所以有些代码并不支持向后兼容。也就是说,用 Java 9 写的代码,有可能在 Java 8 或更早版本的 JDK 上不能运行。
1. 在操作系统上安装开发所需要的软件
首先,你需要下载JDK 9 (Java Development Kit 9) ,需要到此网站来下载JDK 9。首先需要先同意许可协议,然后就可以下载了。
Java 9 可以运行在很多平台上:
Windows 32-bit
Windows 64-bit
macOS 64-bit (formerly known as Mac OS X or simply OS X)
Linux 32-bit
Linux 64-bit
Linux on ARM 32-bit
Linux on ARM 64-bit
下一步需要配置环境变量。跟之前的 JDK 配置方法相同。这里,我以 macOS 10.12 版本为例,在 Macbook 上的配置。这里会需要 vi 的一些基本操作,可以去网上查找如何使用。
下载完 JDK 后,直接运行。然后安装目录在:
/library/Java/JavaVirtualMachines/jdk-9.jdk/
在 Terminal 下,进入到你的用户的当前目录下(一打开就是你的用户默认目录,实在不清楚在命令行敲入cd则会切换到默认目录下)。
在命令行中执行ls -a命令,列出当前目录下的包括隐藏的文件或目录。
ls -a
4.找到 .bash_profile文件,此文件会影响你当前用户的配置信息,并执行vi .bash_profile 命令编辑此文件。
vi .bash_profile
5.进入编辑页面后,配置 Java Home 和 Path 环境变量:
配置 Java 环境变量
6.配置完以后,使用esc键退出编辑状态,输入“:wq”,保存并退出。并执行
. .bash_profile,使配置文件立刻生效。
在命令行下执行javac -version,如果输出如下信息,则说明 JDK 配置正确。
javac 9-ea
至此,JDK 配置完成。
启动JShell。
在Terminal下输jshell -v,
jshell
此时,就进入JShell 开发环境,命令行里是以jshell>开头。
如果想退出JShell 环境,则输入/exit命令。
退出 jshell
2. 理解在交互式编程环境下开发的好处
Java 9 中引入了交互式编程环境(REPL),这就是JShell,它允许可以执行 Java脚本代码,并且立即返回结果。因此,我们不需要创建什么一个解决方案或工程,就能很容易地编写代码并能很快的看到运行结果。我们不必等待整个项目 build 完去检查多行代码的执行结果。JShell,就像其他 REPL 一样,有利于探索式编程,我们很容易地进行交互式尝试和调试不同的算法和结构。
3. 第一个 JShell 下的 Java 代码
我们简单写一个 JShell 下的一个 Java 代码,就是一个打印输入。
System.out.println("Hello, Java 9, now I am in JShell!")
输出结果为:
第一个 JShell 下的 Java 代码
Tips
在 JShell 环境下,语句末尾的“;” 是可选的。但推荐还是最好加上。提高代码可读性。
在一些例子中,我们将利用JShell 这一特性,提供对网络的访问。此功能与Web Service交互时非常有用。然而,你必须确保你的防火墙配置不会阻挡 JShell。
4. 查看默认导入和使用自动补全功能
默认情况下,JShell提供了一些常用包的导入,我们可以使用import 语句导入必要的包或是从指定的路径的包,来运行我们的代码片段。我们可以输入以下命令列出所有导入的包:
/imports
下面就会列出已经导入的包:
imports
当我们在 JShell 之外写 Java 代码时,如所需要的 java.lang 包是默认导入的。在 JShell 下使用/imports命令并没没有列出这些包,以下是所有的在 JShell 环境下默认导入的包:
java.lang
java.io
java.math
java.net
java.nio.file
java.util
java.util.concurrent
java.util.function
java.util.prefs
java.util.regex
java.util.stream
此外,JShell 提供了自动补全的功能,只需按下 Tab 键,就能自动补全。
但有些情况下,根据我们输入的语句会对应很多选项,这时候 JShell 就会全部给你列出来。
例如,当我输入 S 时,就会列出来所以以 S 开头的类。
自动补全
当我们想输入System类时,根据前面说的自动补全,只需要输入Sys然后按下 Tab 键,则自动补全, 然后再输入“.o”,则会自动补全方法, 在补全“System.out.”后按下 Tab 键,接下来就会列出当前类的所有的 public 方法的列表。
list method
最后完整输入:
System.out.println("Auto-complete is helpful in JShell");
5. 在JShell中编写 Java 9 代码
首先,在命令行下可以执行jshell -v来进入命令行的开发环境。
下面我们定义calculateRectangleArea方法来计算一个正方形的面积。
float calculateRectangleArea(float width, float height) {
return width * height;
}
calculateRectangleArea
然后输入回车,则会输入如下信息:
created calculateRectangleArea
Tips
所有从 JShell 输出的消息用“|”表示。
输入/list 在 JShell 中,会列出到目前为止当前 session 里所有有效的代码片段。
/list
接下来我们定义一个 float类型的变量width并赋值为50:
float width = 50;
输入完上面的代码后,JShell 就会给我们如下信息:
width
然后定义height变量:
float height = 25;
接着输入float area = ca然后自动补全为float area = calculateRectangleArea(,再输入刚才定义的变量width 和height,则方法则计算出面积并返回1250.0。
Area
下面我们再使用/list列出到目前为止所有有效的代码片段。
list again
输入以下代码:
System.out.printf("Width: %.2f, Height: %.2f, Area: %.2f\n", width, height, area);
则会输入如下信息:
width, height, area
6. 计算表达式
Java 9 中运行我们评估任何有效的表达式,在 JShell中输入如下表达式:
width * height;
当我们输入上面的表达式,它就会给分配给一个临时的变量,这个变量以“$”开头,并跟着一个数字。这个变量是$6,但也有可能是$7, $8。
$6
在当前 session 中,我们可以在接下来的代码中直接使用此临时变量,例如:
System.out.printf("The calculated area is %.2f\n", $6);
$8
我们还可以使用之前的临时变量进行响应的运算,例如,
$6 + 10.5f;
$9
7. 使用变量、方法和源代码
到目前为止,我们创建了很多变量,我们可以使用/vars来查看当前 session 下所有创建过的变量:
/vars
我们再定义一个方法:
float calculateRectanglePerimeter(float width, float height) {
return 2 * (width + height);
}
然后使用/methods 来查看所有的方法。
/methods
你也可以 修改已经存在的方法,例如,calculateRectanglePerimeter的方法改为如下:
float calculateRectanglePerimeter(float width, float height) {
float perimeter = 2 * (width + height);
System.out.printf("Width: %.2f\n", width);
System.out.printf("Height: %.2f\n", height);
System.out.printf("Perimeter: %.2f\n", perimeter);
return perimeter;
}
然后输出以下信息:
change method
我们还可以使用 /list method name来查看具体某一个方法的具体信息:
/list method name
8. 使用外部代码编辑器来编写 Java 代码
现在,我想对calculateRectangleArea方法做一些改动,如果这时有外部代码编辑器的话,做起来会很容易。
在 JShell 中可以启用JShell Edit Pad 编辑器,需要输入如下命令,来修改上面的方法:
/edit calculateRectangleArea
接下来就会显示编辑器对话框,和将要修改的方法:
JShell Edit Pad
代码修改完成以后,先点击“Accept”按钮,再点击“Exit”按钮,则退出编辑器,在 JShell 命令行中提示方法已经修改。
JShell Edit Pad 编辑器功能非常有限,仅能提供一些最基础的功能,不过好消息是,JShell 可以配置外部的代码编辑器,我们只需要使用/edit 外部编辑器的完整路径的方式,来指定外部的代码编辑器。
例如,我想使用Sublimet Text 作为外部的代码编译器,则需要使用如下命令:
/set editor "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl"
设置成功以后,返回如下信息:
set editor
然后我们再执行/edit calculateRectangleArea命令,则就打开 Sublime Text,
Sublime Text
9. 从外部加载源代码
如果我们已经有写好的 Java 文件,可以使用/open 命令导入到 JShell 环境中,例如我现在有一个Begin.java文件,
void printHello() {
System.out.println("Hello, World!");
}
printHello()
在 JShell 环境中执行以下语句:
/open /Users/i324779/Desktop/Begin.java
加载文件并执行:
Java代码有效和片段有效_Java 9 尝鲜之交互式编程环境相关推荐
- Java 9 尝鲜之JShell交互式编程环境
转载自https://www.cnblogs.com/IcanFixIt/p/6690478.html JShell--Java 9 的交互式编程环境 本文要求读者有基本的 Java 知识. Tips ...
- Java SE 9(JDK9)环境安装及交互式编程环境Jshell使用示例
目的 安装JDK 9, 练习Jshell工具的使用, 体验Java的交互式编程环境. 什么是Jshell 其实就是一个命令行工具,安装完JDK9后,可以在bin目录下找到该工具,与Python的解释器 ...
- java代码是怎么运行的_Java代码是如何运行起来的?
目录 1.编译 写好:".java"代码后,会通过编译器将代码编译成.class后缀的字节码文件 Java是平台无关的,实现语言无关性的基础就是虚拟机和字节码存储格式 只要编译器按 ...
- java list 去重 相同的相加_Java 中的数据流和函数式编程 | Linux 中国
学习如何使用 Java 8 中的流 API 和函数式编程结构.-- Marty Kalin 当 Java SE 8(又名核心 Java 8)在 2014 年被推出时,它引入了一些更改,从根本上影响了用 ...
- java 怎么把list流化_Java 中的数据流和函数式编程
原标题:Java 中的数据流和函数式编程 学习如何使用 Java 8 中的流 API 和函数式编程结构.-- Marty Kalin(作者) 当 Java SE 8(又名核心 Java 8)在 201 ...
- java代码如何能运行起来_Java代码如何运行
Java作为高级语言,高度抽象,无法直接运行在机器上,这样就必须设计一个面向Java语言特征的虚拟机,并通过编译器将Java程序转化成虚拟机所能识别的指令序列,也成Java字节码. Java 虚拟机将 ...
- java代码实现解压文件_Java压缩/解压文件的实现代码
用java压缩/解压文件: import java.io.*; import java.awt.*; import java.awt.event.*; import java.util.*; impo ...
- java代码执行了两次_Java中JComboBox的itemStateChanged事件执行两次的解释
今天做项目,用到了JComboBox,即下拉列表框.为了在被选中的项发生改变时获得被选中的项,所以使用的ItemStateChanged事件,可是问题就来了,每次触发该事件,它都执行两次,屡试不爽.一 ...
- java 代码配置 网络调试助手_java源码:网络调试助手
[实例简介] [实例截图] [核心代码] package com.hsw.u11.netassist.view; import java.awt.GridLayout; import java.awt ...
最新文章
- Sql Server 中锁的概念
- html最小化窗口,[转载]js实现窗口(支持拉伸,拖拽,最大化,最小化,滚动
- Oracle 并行原理与示例总结
- 计算机硬件拆解,计算机硬件系统及主机拆解.ppt
- 《Create Your Successful Agile Project》书评与作者访谈
- 如何设置并使用 Synology NAS 共享的多功能打印机
- Java 程序优化:字符串操作、基本运算方法等优化策略
- 蓝奏网盘直链转换器 v1.1
- python微信刷屏_用python玩转微信
- fins协议握手信号服务器响应,欧姆龙OMRON PLC之HostLink通讯协议(四)-FINS命令工作模式篇...
- 极值理论(一):极大值极限分布
- 大学计算机课英语心得体会,【大学计算机课程总结12篇】_大学计算机课程总结范文大全_2021年大学计算机课程总结_东城教研...
- 写的坦克游戏 希望对你有帮助
- Python 面试题
- QT 绘图橡皮擦效果的实现
- 分析如何为便携式电子设备挑选安全可靠的场效应晶体管?
- 斑马智行宣布获得30亿元增资,阿里巴巴系合计持股超过50%
- 【矩阵论-20220919(1.1)——数域、线性空间定义和基本性质】
- html超链接点不了_HTML制作超级链接点下去没反应
- 社会心理学效应之皮格马利翁效应
热门文章
- docker -v 挂载文件_浅谈关于docker中数据卷的操作,附带案例
- 【SpringCloud】服务注册之 Consul
- 【clickhouse】docker安装clickhouse后本地无法连接
- [Flink] The file LOG does not exist on the TaskExecutor
- 【kafka】kafka 报错 no brokers found when trying to rebalance
- 95-080-048-源码-启动-启动standalonesession
- Spring: Spring 从xml获取bean
- it : Tmaster (hook declined) error: failed to push some refs to https://xxx/biluo/xxx.git
- yarn:hadoop YarnChild OutOfMemoryError Java heap space || GC Overhead limit
- mysql 实验7,MySQL5.7多源复制的实验