Linux   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何在JShell中运行作为片段添加的整个Java文件?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我尝试安装JDK 9 Early access version 172来玩J SHell. 当我尝试打开一个简单的java文件并在将其添加为片段后执行它时,它只显示了修改后的类Test并增加了片段编号.你能帮我理解我哪里出错了吗? | Welcome to JSHell -- Version 9-ea | For an introduction type: /Help intro jsHel
我尝试安装JDK 9 Early access version 172来玩J Shell.
当我尝试打开一个简单的java文件并在将其添加为片段后执行它时,它只显示修改后的类Test并增加了片段编号.你能帮我理解我哪里出错了吗?

|  Welcome to JSHell -- Version 9-ea
|  For an introduction type: /Help intro

jsHell> /open G:\kavitha\Test.java

jsHell> /list

   1 : public class Test{
        public static void main(String[] args){
                 int i = 1;
                 int j = 2;
             System.out.println("Sum of 1 and 2 is : " + (i+j));
        }
       }

jsHell> /1
public class Test{
        public static void main(String[] args){
                 int i = 1;
                 int j = 2;
             System.out.println("Sum of 1 and 2 is : " + (i+j));
        }
}
|  modified class Test

jsHell> /list

   2 : public class Test{
        public static void main(String[] args){
                 int i = 1;
                 int j = 2;
             System.out.println("Sum of 1 and 2 is : " + (i+j));
        }
       }

解决方法

/ open只加载文件,之后你必须告诉jsHell你想要执行什么.

例:

jsHell> /open Test.java

jsHell> /list

   1 : class Test {
           public static void main(String[] args) {
               System.out.println("Hello Kavitha");
           }
           int rollDice() {
               return 1 + (int)(6 * Math.random());
           }
       }

jsHell> Test.main(new String[0])
Hello Kavitha

jsHell> new test().rollDice()
$3 ==> 3

这里我已经执行了main方法,但我也可以根据需要使用加载的类,创建新实例,调用方法等.

快捷方式/< id>重新运行该ID的代码段.在您的情况下,代码片段1仅加载类并且不执行任何操作,因此通过执行/ 1您重新加载相同的类,同样不再执行它.

运行上面的示例后,/ 2将重新运行main方法,并且/ 3将重新掷骰子:

jsHell> /3
new test().rollDice()
$4 ==> 1

jsHell> /3
new test().rollDice()
$5 ==> 6

jsHell> /3
new test().rollDice()
$6 ==> 2

附录:/ open&编译,类加载,类初始化

(试图澄清为什么/ open没有执行你的类的主要方法,并表明它是有道理的)

当您/打开文件时,JSHell将添加文件内容,就像您将其键入sHell一样.

然后它将编译代码段,但如果有的话,它将不会是initialize个类.

(我不确定是否会加载类,这是初始化之前的步骤,很难说,看到this post试图探索JSHell的内部,它显示了JSHell中的类名是如何转换为用户,并且尝试查看已加载的类列表失败 – 但这比编译和初始化更重要

如果我打开包含以下内容的SnippetWithError.txt:

System.out.println("Hey")
class Foo { int n=33; } bar

(是的,它不需要是一个java文件,它实际上是你在sHell中包含的一堆文本用于评估)

jsHell> /open SnippetWithError.txt
Hey
|  Error:
|  cAnnot find symbol
|    symbol:   variable bar
|   bar
|   ^-^

看到它打印“嘿”,它包括类Foo:

jsHell> new Foo().n
$2 ==> 33

因此,JSHell在你/ open时编译,它执行语句,但是如果某些语句是类或方法声明,它不会执行那些,它甚至不会初始化类.

请参阅下面如何将导入计入历史记录中的单独语句,然后类声明在其自己的语句中(#3):

jsHell> /open HasStaticInitBlock.java

jsHell> /list

1 : import java.time.Duration;
2 : import java.time.Instant;
3 : class HasStaticInitBlock {
        static Instant t0 = Instant.Now();
        static {
            System.out.println("Class initialized at " + t0);
        }
        static Duration timeSinceInit() {
            return Duration.between(t0,Instant.Now());
        }
    }

jsHell> HasStaticInitBlock.timeSinceInit()
Class initialized at 2017-06-07T06:49:06.746185Z
$4 ==> PT0.040414S

jsHell> HasStaticInitBlock.timeSinceInit()
$5 ==> PT2.343019S

只在需要时才执行类初始化.

@H_874_85@

大佬总结

以上是大佬教程为你收集整理的如何在JShell中运行作为片段添加的整个Java文件?全部内容,希望文章能够帮你解决如何在JShell中运行作为片段添加的整个Java文件?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。