JShell是Java的REPL.要在默认JRE之外使用其他类,它包含一个/classpath命令,用于添加当前类路径的路径.
有没有办法在JShell环境中查看当前的类路径?
请注意,我正在使用以下早期版本:
java version "9-ea"
Java(TM) SE Runtime Environment (build 9-ea+111)
Java HotSpot(TM) 64-Bit Server VM (build 9-ea+111, mixed mode)
Run Code Online (Sandbox Code Playgroud) 我目前在我的 Mac Sierra 上使用 java 1.8。
java -version
java version "1.8.0_51"
Java(TM) SE Runtime Environment (build 1.8.0_51-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.51-b03, mixed mode)
Run Code Online (Sandbox Code Playgroud)
现在我想运行“jshell”来直接从终端执行简单的java命令。但我最终得到了以下错误消息 -
Unable to locate an executable at "/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/bin/jshell" (-1)
Run Code Online (Sandbox Code Playgroud)
我需要采取什么解决方法来避免出现此错误消息?
我正在使用Windows 10并运行Oracle昨天发布的Java 9版本.
如果我打开一个jshell并输入System.out.println(System.getenv()),输出就像预期的那样,如下面屏幕截图的下半部分所示.
但是,如果我只是输入System.getenv(),则输出中间会丢失大量数据.请参阅下面屏幕截图的初始部分.这似乎是jshell的一个特性,因为在System.getenv()输出中的省略号(" ... ")下面的屏幕截图中(在第二个框中用手绘黄色边缘)完全对应于缺失的数据.
缺少环境变量CommonProgramFiles的结束部分,环境变量SPRING_HOME的开头也是如此,并且还有其他几个环境变量,例如Path,根本没有显示.
(屏幕截图中的某些信息因隐私而模糊不清.)
有没有其他人看到同样的事情(或没有),有没有人有关于为什么jshell这样做的建议?
在 Java 9 发布后,我在玩 JShell,并尝试导入我制作的包。由于我为其编码的整个应用程序将包含在该包中,因此除了一个类(我尚未编码)之外的每个类都是包私有的。我的类路径是正确的,但我仍然无法使用 JShell 中包中声明的任何类型(它会引发“找不到符号”错误)。我是否需要将它们公开以供访问,或者有什么方法可以测试包私有类?这是我试过的确切代码。
我当前的目录是
C:\Users\Sylvaenn\OneDrive\Documents\Programs\Java\src
Run Code Online (Sandbox Code Playgroud)
我的课程路径是
C:\Users\Sylvaenn\OneDrive\Documents\Programs\Java\cls
Run Code Online (Sandbox Code Playgroud)
包目录(用于字节码)是
C:\Users\Sylvaenn\OneDrive\Documents\Programs\Java\cls\collatz
Run Code Online (Sandbox Code Playgroud)
CollatzSequence是包含在collatz.
PS C:\Users\Sylvaenn> cd OneDrive\Documents\Programs\Java\src
PS C:\Users\Sylvaenn\OneDrive\Documents\Programs\Java\src> jshell
| Welcome to JShell -- Version 9
| For an introduction type: /help intro
jshell> import collatz.*;
jshell> CollatzSequence seq = new CollatzSequence(BigInteger.ONE);
| Error:
| cannot find symbol
| symbol: class CollatzSequence
| CollatzSequence seq = new CollatzSequence(BigInteger.ONE);
| ^-------------^
| Error:
| cannot find symbol
| symbol: class CollatzSequence
| CollatzSequence seq …Run Code Online (Sandbox Code Playgroud) 我试图通过我使用JShell API创建的JShell实例在运行时运行一些Java代码.为了演示我的问题,我将分享我的简单代码.
在我目前的设置中,我有一个名为lib的目录,它有MySQL Java驱动程序:mysql-connector-java-5.1.35.jar.
通过命令工具启动JShell并添加所需的模块:
jshell --module-path lib --add-modules mysql.connector.java
Run Code Online (Sandbox Code Playgroud)
然后加载mysql驱动程序适合我:
jshell> Class.forName("com.mysql.jdbc.Driver").newInstance();
$1 ==> com.mysql.jdbc.Driver@42f93a98
Run Code Online (Sandbox Code Playgroud)
我用module-info.javaas 创建了一个类似的Java 9模块:
module example.loadmysql {
requires java.sql;
requires mysql.connector.java;
requires jdk.jshell;
}
Run Code Online (Sandbox Code Playgroud)
src/example/loadmysql/Runner.java:
package example.loadmysql;
import jdk.jshell.*;
import java.sql.*;
public class Runner {
public static void main(String[] args) throws Exception {
// this works because this module requires mysql.connector.java
System.out.println(Class.forName("com.mysql.jdbc.Driver").newInstance());
JShell js = JShell.create();
String code = ""
+ "try {"
+ " Class.forName(\"com.mysql.jdbc.Driver\").newInstance();" …Run Code Online (Sandbox Code Playgroud) 我正在使用 JShell 来测试一个库,我通过类路径为其提供了类、源和 javadoc,如下所示:
jshell --class-path library-javadoc.jar:library-sources.jar:library-jar-with-dependencies.jar
Run Code Online (Sandbox Code Playgroud)
尽管如此,当我收到记录的 Java 标识符之后的双选项卡时:
<no documentation found>
Run Code Online (Sandbox Code Playgroud)
JShell 对文档有何期待?
如何在jshell 脚本中获取用户输入?或者我做错了什么?
注意:我不是在寻找如何将参数传递给 jshell script。
例如脚本hello.java:
Scanner in = new Scanner(System.in);
System.out.print("Enter number n1: ");
int n1 = in.nextInt();
System.out.print("Enter number n2: ");
int n2 = in.nextInt();
System.out.println("n1 + n2 = "+ (n1 +n2));
/exit
Run Code Online (Sandbox Code Playgroud)
如果我在 jshell 中逐行输入它可以工作,但然后我运行jshell hello.java它就不行了。投掷java.util.NoSuchElementException。
我得到的输出:
@myMint ~/Java $ jshell hello.java
Enter number n1: | java.util.NoSuchElementException thrown:
| at Scanner.throwFor (Scanner.java:858)
| at Scanner.next (Scanner.java:1497)
| at Scanner.nextInt (Scanner.java:2161)
| at …Run Code Online (Sandbox Code Playgroud) 如何在JShell中查找变量或表达式结果的类型.
正在用Java试验Bitwise Operators
jshell> byte b=5<<-1;
| Error:
| incompatible types: possible lossy conversion from int to byte
| byte b=5<<-1;
| ^---^
jshell> 5<<-1
$2 ==> -2147483648
jshell>
Run Code Online (Sandbox Code Playgroud)
是否有类似Python类型(5 << - 1)的替代方法在Jshell中查找表达式或变量的结果类型.
我想做以下事情:
jshell -v -Duser.country=FR -Duser.language=fr
以便获得例如个性化的Locale.getDefault().
有谁知道 JShell 历史记录存储在哪里(Windows-10 上的 Java-11/Open JDK,但任何配置都可能有用)?我一直在$HOME( $USERPROFILE, $APPDATA, ...) 四处寻找。它是基于文件的吗?
JShell 是基于 JLine 的,对吧?我确实发现了$JAVA_HOME\legal\jdk.internal.le\jline.md。