这是我使用的代码片段:
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder(URI.create("https://www.google.com")).GET().build();
HttpResponse.BodyHandler responseBodyHandler = HttpResponse.BodyHandler.asString();
HttpResponse response = client.send(request, responseBodyHandler);
System.out.println("Status code = " + response.statusCode());
String body = response.body().toString();
System.out.println(body);
Run Code Online (Sandbox Code Playgroud)
NoClassDefFoundError当我运行上面的代码时,Eclipse抛出HttpClient。但是,当我将jshell与一起使用时,此功能可以完美运行--add-modules=jdk.incubator.httpclient。怎样才能使代码通过Eclipse执行?
当我在JShell(9.0.1)中输入表达式时,它返回:
$22 -> <value>
Run Code Online (Sandbox Code Playgroud)
22的来源是什么,1美元到21美元之间发生了什么?(它们是未定义的。)
我似乎隐约记得(当我从Java 9.0开始时)变量以$ 1开头,这更有意义。现在,从9.0.1起,它们全部以22美元开始。为什么?
默认情况下,JShell启用所有键入内容的持久性历史记录,可以通过按向上箭头来调用它。
设置此功能的位置在哪里?掉?
另外,如何清除当前历史记录?也许我很笨,但我不知道命令。/reset似乎无能为力。
我从https://jdk9.java.net下载了java 9 并将其安装在我的Windows 10机器上.
Java 9有jshell,我可以用来评估和学习java编程.
一些示例导入sun包,例如sun.audio.*等等.但是,在jshell中,每次我尝试导入任何sun包时,都会说sun包不存在.
有些应用程序不能与java 9一起使用.也许有不兼容性?
为什么我的jshell实例(JDK Version 9-ea)无法识别printf()语句?以下是我观察到的错误,
jshell> printf("Print number one - %d",1)
| Error:
| cannot find symbol
| symbol: method printf(java.lang.String,int)
| printf("Print number one - %d",1)
| ^----^
Run Code Online (Sandbox Code Playgroud)
我可以访问printf,只要我以常规方式指定它.
jshell> System.out.printf("Print number one - %d",1)
Print number one - 1$1 ==> java.io.PrintStream@1efbd816
Run Code Online (Sandbox Code Playgroud)
有什么指针吗?
我尝试编写一些jshell脚本.抛出异常时,jshell仍继续执行下一行.
如何让我的脚本更像普通的java程序?
编辑:我只是像运行它一样jshell SCR.jsh.
使用throw new Exception()或1/0不阻止执行下一行.
该脚本包含如下语句:
System.out.println(1/0)
System.out.println("foo")
/exit
Run Code Online (Sandbox Code Playgroud)
我以为第二行无法访问.这就是我的预期.但在打印异常后,foo也会打印出来.
我已经阅读了jshell 指南的介绍,但在 jshell 中找不到关于 -C 选项的描述/示例。
$jshell --help
-C<flag> Pass <flag> to the compiler.
Use one -C for each compiler flag or flag argument
Run Code Online (Sandbox Code Playgroud) 使用jshell,有没有办法在解释器的范围内创建变量?我有类似的东西
Map<String,Object> vars = loadVarsFromSomething();
Run Code Online (Sandbox Code Playgroud)
我希望能够做类似的事情
for ( Map.Entry<String,Object> key : vars )
{
scope.put( key.getKey(), key.getValue() );
}
Run Code Online (Sandbox Code Playgroud)
那可能吗?
请注意,我所指的"范围" 是jshell解释器正在使用的Shell对象的实际范围.我需要获取对shell调用的shell的引用,以便我可以创建变量看起来好像是由用户/来电者分配的..
我正在发现 JShell,并且发现默认添加的导入:
jshell> /imports
| import java.io.*
| import java.math.*
| import java.net.*
| import java.nio.file.*
| import java.util.*
| import java.util.concurrent.*
| import java.util.function.*
| import java.util.prefs.*
| import java.util.regex.*
| import java.util.stream.*
Run Code Online (Sandbox Code Playgroud)
完成此操作后,我使用以下命令添加了自己的导入:
import java.lang.Math
Run Code Online (Sandbox Code Playgroud)
有没有办法在不终止活动会话/重新启动的情况下删除后者导入?
我尝试发出/edit命令,删除导入,单击接受并单击退出,但这并没有成功。
如评论中所述,/reset删除导入,但它也会删除先前在会话中输入的任何其他内容。有没有一种特定的方法可以仅删除导入语句?
我正在研究一个问题,以便在彼此之间存储两个类的引用
例如:
class A {
B b;
A(B b){
this.b = b;}
}
class B {
A a;
B(A a){
this.a = a;}
}
public static void main(String...s){
A a = new A(new B(null));
a.b.a = a;
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我使用以下语句而不是上面的初始化:
A a = new A(new B(a));
Run Code Online (Sandbox Code Playgroud)
我得到了以下错误,这很明显:
Main.java:19: error: variable a might not have been initialised
A a = new A(new B(a));
Run Code Online (Sandbox Code Playgroud)
但是如果我在JShell上尝试相同,它就可以正常工作(只是为了确保variable a从未初始化过,我variable a在执行语句之前检查过,确认它之前没有初始化:
可能是我在这里遗漏了一些东西,但有些人可以帮助我理解为什么在JAVA中执行同一语句有两种不同的行为.
理解这个问题的一个简单方法是允许使用以下语句,Jshell但不允许在正常程序中:
var somevar = somevar;
Run Code Online (Sandbox Code Playgroud)