只是探索Java的新版本,它的新模块系统,以及使用jshell.可能我的问题没有多大意义,但我只是好奇.
所以我想出了一个问题:有没有办法在jshell中创建一个模块?或模块只能创建module-info.java?
由于Java 9引入了JShell的概念,它使我们能够在不创建类和方法的情况下编写代码,是否可以在eclipse中使用Java 9的这一特性?
我在JShell中编写了一个Java方法,现在我想调试它.我想设置断点或者至少逐行执行.JShell有这些调试功能吗?
从帮助信息:
-J<flag> Pass <flag> directly to the runtime system.
Use one -J for each runtime flag or flag argument
-R<flag> Pass <flag> to the remote runtime system.
Use one -R for each remote flag or flag argument
Run Code Online (Sandbox Code Playgroud)
我在工具文档和jshell用户指南中都找不到解释.
另外,什么是jshell上下文中的"远程运行时系统"?
有没有办法在 REPL ( jshell) 上执行 java 命令作为内联命令而不启动它?
例如 Perl 内联命令
$perl -e 'printf("%06d", 19)'
000019
Run Code Online (Sandbox Code Playgroud)
我必须启动 jshell 才能运行任何命令:
$jshell
| Welcome to JShell -- Version 9
| For an introduction type: /help intro
jshell> String.format("%06d", 19)
$1 ==> "000019"
Run Code Online (Sandbox Code Playgroud)
我在这里发现了类似的问题,但为单个命令创建单独的文件并不是可行的解决方案jsh。
同一篇文章的另一个解决方案是:echo "1+2"|jshell
temp=`echo 'String.format("%06d", 19)'|jshell`
echo $temp
Run Code Online (Sandbox Code Playgroud)
哎哟输出
| Welcome to JShell -- Version 9 | For an introduction type: /help intro jshell> String.format("%06d", 19) $1 ==> "000019" jshell>
Run Code Online (Sandbox Code Playgroud)
我$temp只期待打印000019。
是否有任何可用的命令可以在当前的jshell会话中打印所有新创建的方法?类似/list但仅适用于方法的东西
我正在使用新的intellij Jshell控制台(在此处介绍https://blog.jetbrains.com/idea/2017/09/java-9-and-intellij-idea/)
我创建了一个简单的类文件Test2.java
public class Test2 {
public static String test(){
return "Hello";
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试在intellij jshell控制台上运行它时(工具> Jshell控制台)
Test2.test();
Run Code Online (Sandbox Code Playgroud)
我收到以下错误
"C:\Program Files\Java\jdk-9.0.1\bin\java" --add-modules java.xml.bind -classpath "C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.3.1\lib\jshell-frontend.jar;C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2017.3.1\lib\jshell-protocol.jar" com.intellij.execution.jshell.frontend.Main
ERROR: cannot find symbol
symbol: variable Test2
location: class
Rejected Test2.test()
Run Code Online (Sandbox Code Playgroud)
有什么东西我必须配置JShell来识别我的自定义类?
我已将其设置为使用项目的类路径.
编辑:
我还尝试将代码移动到一个包中,并按照用户@NullPointer的建议在Jshell中导入它.
同样的错误仍然存在,它也给我"错误:包angelapps.java不存在"错误.
当我打开窗口cmd并输入时jshell,它可以工作,但是当我在写东西时。每当我按下BackSpace键。例如,如果我想删除一个错误的字母。jshell 因波纹管错误而崩溃,我正在使用windows 10,并且C:\Program Files\Java\jdk-11.0.1是我在 Windows 中的唯一路径System Environment variables,我也cmd用作终端。这是错误:
Exception in thread "main" java.lang.NullPointerException: charsetName
at java.base/java.lang.String.<init>(String.java:464)
at java.base/java.lang.String.<init>(String.java:537)
at jdk.internal.le/jdk.internal.jline.extra.AnsiInterpretingOutputStream.write(AnsiInterpretingOutputStream.java:92)
at java.base/java.io.OutputStream.write(OutputStream.java:157)
at java.base/sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:233)
at java.base/sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:312)
at java.base/sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:316)
at java.base/sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:153)
at java.base/java.io.OutputStreamWriter.flush(OutputStreamWriter.java:254)
at jdk.internal.le/jdk.internal.jline.console.ConsoleReader.flush(ConsoleReader.java:1052)
at jdk.internal.le/jdk.internal.jline.console.ConsoleReader.readLine(ConsoleReader.java:3259)
at jdk.internal.le/jdk.internal.jline.console.ConsoleReader.readLine(ConsoleReader.java:2383)
at jdk.internal.le/jdk.internal.jline.console.ConsoleReader.readLine(ConsoleReader.java:2371)
at jdk.jshell/jdk.internal.jshell.tool.ConsoleIOContext.readLine(ConsoleIOContext.java:142)
at jdk.jshell/jdk.internal.jshell.tool.JShellTool.getInput(JShellTool.java:1261)
at jdk.jshell/jdk.internal.jshell.tool.JShellTool.run(JShellTool.java:1174)
at jdk.jshell/jdk.internal.jshell.tool.JShellTool.start(JShellTool.java:975)
at jdk.jshell/jdk.internal.jshell.tool.JShellToolBuilder.start(JShellToolBuilder.java:254)
at jdk.jshell/jdk.internal.jshell.tool.JShellToolProvider.main(JShellToolProvider.java:120)
Run Code Online (Sandbox Code Playgroud) 我刚开始在 intellij idea 社区版本中使用 jshell。当我在 jshell 中编写以下代码时,它可以工作。
List<String> list = List.of("a", "b", "c");
System.out.println(list);
Run Code Online (Sandbox Code Playgroud)
但是,相同的代码在 intellij 中不起作用。它说“预期的表达”。它执行得很好,但显示List<String>. 问题是“自动完成”不起作用。为了解决这个问题,我们可以使用原始类型,但我想要一个通用类型。有什么我想念的吗?如何编写泛型类型?