美文网首页Java
JShell工具和CLASSPATH环境属性

JShell工具和CLASSPATH环境属性

作者: Miracle001 | 来源:发表于2019-05-13 11:28 被阅读0次
    JShell工具
    Shell:脚本程序的意思,
    在很多编程语言里面为了方便使用者进行代码的开发,都会提供有Shell交互式编程环境。
    
    有些时候可能只是为了进行一些简短的程序验证,
    但是在Java里面就必须编写很多的结构代码才可以实现,
    所有为了解决这个困惑,提供有jshell指令,直接运行即可。
    
    命令行执行jshell,直接进入jshell交互式:
    D:\fgqjava>jshell
    |  欢迎使用 JShell -- 版本 12.0.1
    |  要大致了解该版本, 请键入: /help intro
    
    jshell> "Hello World !"
    $1 ==> "Hello World !"
    
    jshell> 1 + 1
    $2 ==> 2
    
    除了直接在jshell命令中进行程序的编写之外,也可以将一些内容直接交由一些文件来进行保存。
    
    范例:定义一个程序文件:"d:\fgq.txt"
    editplus编辑fgq.txt文件,写入以下两句代码,保存
    System.out.println("Hello FGQ !");
    System.out.println("www.fgq.com");
    
    希望可以直接在jshell里面执行本程序。
    
    jshell> /open d:/fgq.txt
    Hello FGQ !
    www.fgq.com
    
    jshell> /exit
    |  再见
    
    D:\fgqjava>
    
    
    现在可以发现就只需要编写核心结构的代码即可,减少了对于结构化的需求。
    使用/exit退出此交互式界面。
    
    可用性不高(受到其他语言的压力),以后验证函数可以使用jshell,
    以后讲课还是用完整的代码结构进行说明。
    
    CLASSPATH环境属性
    CLASSPATH如果要完整的进行解释需要好多的知识,
    所以本次只是对 CLASSPATH的概念做出一个先期的介绍。
    
    现在假设在d:\fgqjava目录下提供有一个Hello.class的字节码文件;
    假设当前用户所在的目录为"d:\fgqjava",
    那么在这样的情况下可以直接使用Java命令进行Hello.class字节码文件的解释。
    
    
    代码如下:
    public class Hello {
        public static void main(String args[]) {
            System.out.println("Hello World !") ;
        }
    }
    
    命令行执行:
    D:\fgqjava>dir
     驱动器 D 中的卷是 本地磁盘
     卷的序列号是 A6E8-533E
    
     D:\fgqjava 的目录
    
    2019/05/13/周一  10:20    <DIR>          .
    2019/05/13/周一  10:20    <DIR>          ..
    2019/05/13/周一  10:19               112 Hello.java
    2019/05/09/周四  16:31               177 Hello.java.bak
                   2 个文件            289 字节
                   2 个目录 217,989,181,440 可用字节
    
    D:\fgqjava>javac Hello.java
    
    D:\fgqjava>dir
     驱动器 D 中的卷是 本地磁盘
     卷的序列号是 A6E8-533E
    
     D:\fgqjava 的目录
    
    2019/05/13/周一  10:20    <DIR>          .
    2019/05/13/周一  10:20    <DIR>          ..
    2019/05/13/周一  10:20               417 Hello.class
    2019/05/13/周一  10:19               112 Hello.java
    2019/05/09/周四  16:31               177 Hello.java.bak
                   3 个文件            706 字节
                   2 个目录 217,989,181,440 可用字节
    
    D:\fgqjava>java Hello
    Hello World !
    
    -------------------------------------------------------------------------
    但是如果现在脱离了这个目录,
    将当前目录修改为了 c:\(c盘目录下没有Hello.class字节码文件),
    如果再次执行程序解释,这个时候会出现如下错误提示信息:ClassNotFoundException
    
    因为当前目录中没有字节码,
    那么现在的需求是:可以在不同的目录中都执行 d:\fgqjava\Hello.class 文件。
    所以在这样的处理要求下就只能依靠 CLASSPATH 环境属性来完成。
    范例:定义 CLASSPATH 环境属性
    SET CLASSPATH=d:\fgqjava
    
    
    D:\fgqjava>c:
    
    C:\Users\Administrator>java Hello
    错误: 找不到或无法加载主类 Hello(1.8只能看到此处)
    原因: java.lang.ClassNotFoundException: Hello(1.9才看到)
    
    C:\Users\Administrator>SET CLASSPATH=d:\fgqjava
    
    C:\Users\Administrator>java Hello
    Hello World !
    
    -------------------------------------------------------------------------
    
    当设置了 CLASSPATH 之后,
    此时在Java程序解释的时候会自动通过 CLASSPATH 所设置的路径进行类的加载,
    所以得出的结论:JVM 解释程序时需要得到 CLASSPATH 的支持。
    
    但是有个问题,发现默认情况下所有解释的类都是从当前所在的目录中加载的,
    所以得出的结论: CLASSPATH 默认设置为当前所在目录加载类文件。
    
    很明显如果到处去设置 CLASSPATH 就会造成整个系统操作的混乱,
    那么从正常的角度讲,对于 CLASSPATH 还是应该采用默认设置方式,
    所以如果这个时候要想只通过当前目录加载,则可以将 CLASSPATH 设置为 "."。
    范例:从当前所在路径加载类
    SET CLASSPATH=.
    
    
    C:\Users\Administrator>SET CLASSPATH=.
    
    C:\Users\Administrator>java Hello
    错误: 找不到或无法加载主类 Hello
    原因: java.lang.ClassNotFoundException: Hello
    
    设置为"."后,只能通过当前路径(d:\fgqjava)加载
    
    C:\Users\Administrator>d:
    
    D:\fgqjava>java Hello
    Hello World !
    
    -------------------------------------------------------------------------
    
    在一些时候如果你安装了一些与Java开发的程序软件的时候,
    它有可能会自动的修改默认的 CLASSPATH ,也就是说这个"."的配置会消失。
    这种情况下就必须利用命令自己重新设置回来。
    
    但是需要注意的是,现在的 CLASSPATH 是在一个命令行下的配置,
    如果该命令行关闭了,那么相关的属性配置也将消失,
    所以最好的做法是将其定义为全局属性,则可以直接在系统中追加有一个属性信息。
    
    右键点击计算机-->属性-->高级系统设置-->环境变量--
    -->在"用户变量"里面,点击"新建"设置变量信息
    如下图
    设置完成后,一直点击"确定"即可
    
    1 2
    面试题:PATH和CLASSPATH区别?
    PATH:
        是操作系统提供的路径配置,定义所有可执行程序的路径;
    CLASSPATH:
        是由JRE提供的,用于定义Java程序解释时类加载路径,
        默认设置的为当前所在的目录加载,
        可以通过 "SET CLASSPATH=路径"的命令形式来进行我们的定义;
        关系:JVM --> CLASSPATH 定义的路径 --> 加载字节码文件。
    

    相关文章

      网友评论

        本文标题:JShell工具和CLASSPATH环境属性

        本文链接:https://www.haomeiwen.com/subject/ijqgoqtx.html