Java

JShell工具和CLASSPATH环境属性

2019-05-13  本文已影响0人  Miracle001
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 定义的路径 --> 加载字节码文件。
上一篇下一篇

猜你喜欢

热点阅读