点击上方“方志朋”,选择“设为星标”

回复”666“获取新整理的面试文章

现在你多少听说一些JDK9 JShell相关的内容,这篇文章中将介绍如何使用JShell像Unix脚本一样执行Java代码。

让我们开始一个简单的例子,再进行详细的介绍:

  • 创建一个 java_shell_code.txt 的文件;

  • 在文件中写一些Java代码,并执行以下命令。你没必须声明一个Class,你可以直接写一句代码,或者创建一个方法。

java ex.jshell.extension.JShellScriptExecutor ./java_shell_code.txt

java_shell_code.txt

// java_shell_code.txt contents./* If you observe it does not need a class declaration.Using the power of jshell, we can write functions and call functions with out creating class, just like functional programming */// You can also include comments like above, anywhere in the scriptString var1 = "Hello";System.out.println(var1);public int getInt1(){return 2;}public int getInt2(){return 4;}getInt1() + getInt2();public class MyClass{public void sayHelloWorld(){System.out.println("HelloWorld");}}new MyClass().sayHelloWorld()

执行结果:

"Hello"Hello6HelloWorld

详细介绍

在JDK9中提供了一个新的类 JShell.java,它属于jdk.jshell模块。我们可以使用它执行Java代码片段,或创建一个Java方法,而不用创建一个类。如果这个Java代码片段中有错误,可以通过 Snippet.status状态(只有两种状态:REJECTED、VALID)来检查。SourceCodeAnalysis是用来解析代码的,它使用分号、解析方法、或类的声明等。

下面是JShellScriptExecutor代码。你可以拷贝,并修改它。你也可以从GitHub仓库中克隆。

https://github.com/kotari4u/jshell_script_executor

package ex.jshell.extension;
import jdk.jshell.JShell;
import jdk.jshell.Snippet;
import jdk.jshell.SnippetEvent;
import jdk.jshell.SourceCodeAnalysis;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Objects;
/*** This class can execute jshell expressions in sequence* We can write java commands like shell script and execute it.* Just write commands in a way that we give in jshell and save it in a file and execute it.** @author Hemamabara Vamsi, Kotari* @since 5/27/2017.*/
public class JShellScriptExecutor {public static void main(String[] args){new JShellScriptExecutor().evaluate(args[0]);}public void evaluate(String scriptFileName){try(JShell jshell = JShell.create()){// Handle snippet events. We can print value or take action if evaluation failed.jshell.onSnippetEvent(snippetEvent -> snippetEventHandler(snippetEvent));String scriptContent = new String(Files.readAllBytes(Paths.get(scriptFileName)));String s = scriptContent;while (true) {// Read source line by line till semicolon (;)SourceCodeAnalysis.CompletionInfo an = jshell.sourceCodeAnalysis().analyzeCompletion(s);if (!an.completeness().isComplete()) {break;}// If there are any method declaration or class declaration // in new lines, resolve it.jshell.eval(trimNewlines(an.source()));// EOFif (an.remaining().isEmpty()) {break;}// If there is semicolon, execute next seqs = an.remaining();}} catch (IOException e) {e.printStackTrace();}}public void snippetEventHandler(SnippetEvent snippetEvent){String value = snippetEvent.value();if(!Objects.isNull(value) && value.trim().length() > 0) {// Prints output of code evaluationSystem.out.println(value);}// If there are any erros print and exitif(Snippet.Status.REJECTED.equals(snippetEvent.status())){System.out.println("Evaluation failed : "+snippetEvent.snippet().toString()+"\nIgnoring execution of above script");}}private String trimNewlines(String s) {int b = 0;while (b < s.length() && s.charAt(b) == '\n') {++b;}int e = s.length() -1;while (e >= 0 && s.charAt(e) == '\n') {--e;}return s.substring(b, e + 1);}
}

module-info.java

module ex.jshell.extension{   requires jdk.jshell;
}

赶快试用下强大的JShell吧。

来源 | https://urlify.cn/fyiIRr

热门内容:fastjson 的作者,在阿里内网挨骂了?!
Spring Boot 实现定时任务的动态增删启停Spring Boot 最流行的 16 条实践解读,值得收藏!Mybatis 框架下 SQL 注入攻击的 3 种方式,真是防不胜防!Java8 快速实现List转map 、分组、过滤等操作
SpringBoot 三招组合拳,手把手教你打出优雅的后端接口
最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。
明天见(。・ω・。)ノ

JDK9,像Unix脚本一样执行Java代码相关推荐

  1. 【Java脚本引擎】脚本引擎执行JavaScript代码

    应用场景 公司有30员工,每个人工资计算方式不同.现在需要计算工资. 传统的方法:一个接口,30个实现类. 使用脚本引擎:编写一个xml文件,每人一个计算公式,使用的时候可以把公式加载到程序中,启动时 ...

  2. Java动态性(3) - 脚本引擎执行javascript代码

    1.脚本引擎执行JavaScript代码 脚本引擎介绍 使得Java应用程序可以通过一套固定的接口与各种脚本引擎交互,从而达到在Java平台上调用各种脚本语言的目的 Java脚本API是连通Java平 ...

  3. Java脚本引擎执行js代码以及动态编译

    Java脚本引擎执行js代码 一.概述 JAVA脚本引擎是从JDK6.0之后添加的新功能. 使得 Java 应用程序可以通过一套固定的接口与各种脚本引擎交互,从 而达到在 Java 平台上调用各种脚本 ...

  4. 网页脚本注入执行任意代码

    网页脚本注入执行任意代码 --突破网页本地脚本验证方法实例 最近为了帮朋友批量查询信息,查询页面上要求输入验证码,查询结果要保存到文件.首先想到的是验证码自动识别,太复杂了.总算让我找到一个非常好的软 ...

  5. 【Hadoop】hive2.1在hadoop2.7.3中的可执行java代码

    首先是可执行java代码 package lekko.hive;import java.sql.Connection; import java.sql.DriverManager; import ja ...

  6. pmd java_用PMD自动执行Java代码静态分析

    一起学习 一.基础知识 PMD是一种分析Java代码错误的工具.与其他分析工具不同的是,PMD通过静态分析获知代码错误.也就是说,在不运行Java程序的情况下报告错误.PMD附带了许多可以直接使用的规 ...

  7. pmd java规则_PMD执行Java代码分析的原理

    PMD执行Java代码分析的原理 PMD是一种代码静态分析工具,当使用PMD规则分析Java源码时,PMD首先利用JavaCC和EBNF文法产生了一个语法分析器,用来分析普通文本形式的Java代码,产 ...

  8. hive运行mysql脚本_用java代码调用shell脚本执行sqoop将hive表中数据导出到mysql

    1:创建shell脚本 1 touch sqoop_options.sh2 chmod 777 sqoop_options.sh 编辑文件  特地将执行map的个数设置为变量  测试 可以java代码 ...

  9. mvn如何执行java代码

    2019独角兽企业重金招聘Python工程师标准>>> 如果你的项目是mvn项目,那么去pom所在的文件夹执行如下命令: 1 2 3 4 mvn compile mvn exec : ...

最新文章

  1. 利用 Pandas 将数据集中的某列文本拆分为多行
  2. 2009年8月26日,用于win2003上的MSN不能正常使用
  3. vue的多选框存储值操作
  4. JDBC连接Oracle RAC
  5. POJ1724 ROADS 费用最短路
  6. 奇安信代码安全实验室帮助谷歌修复 Chrome 沙箱外高危漏洞,获官方致谢
  7. volley 框架的使用
  8. 计算机科学概论读书报告,计算机科学导论读书笔记01:绪论
  9. mysql嵌套查询实例_MySQL嵌套查询实例详解_MySQL
  10. java中如何写像下雨_雨声像什么的比喻句,形容下雨的声音的句子
  11. 新疆几十公里花海开始盛放,一株580年最老野树,开出最艳鲜花
  12. 开源软件学习交流计划 (西游记项目)
  13. 用MySQL绘制新年祝福图形_2020年春节,你有哪些与众不同的祝福语?
  14. 电脑截图快捷键有哪些?5大截图方法总结!(2023版)
  15. 联想M490原装Win8系统改Win7系统的血泪史
  16. RADIUS 服务器之 hostapd 配置说明
  17. 二进制逻辑运算和基本门电路
  18. 《操作系统》 第二章 知识点整理
  19. redis cluster如何添加和删除节点?
  20. HDFS:分布式文件系统(1)

热门文章

  1. thymeleaf 的常见属性
  2. GitLab 配置邮箱
  3. 3.commonjs模块
  4. 用eclipse玩转Python,让习惯java开发的童鞋拥有一个更爽的开发体验
  5. CATransform3DRotate 实现左右,上下翻转效果
  6. python基于Django框架编译报错“django.core.exceptions.ImproperlyConfigured”的解决办法?...
  7. 破一个行业ERP的感想
  8. 技术图文:Python的属性装饰器详解
  9. Matlab编程与数据类型 -- 循环控制语句之二:while/end
  10. 【Codeforces】913C Party Lemonade (贪...)。