问题引入:
作为Java的初学者,今天在学习package过程中遇到这样的问题:跟着网上的教程,在管理员窗口中使用javac -d . Study.java进行带路径编译,这样在当前文件夹(我的是C:\javatest)中就生成了相应路径的文件夹,按照我的Study.java中写的package com.kk,就会生成com\kk\Study.class这样的路径。然后老师执行java com.kk.Study就可以运行了,而我却显示了如下报错:
PS C:\javatest> java com.kk.Study 错误: 找不到或无法加载主类 com.kk.Study 原因: java.lang.ClassNotFoundException: com.kk.Study
而后使用指定路径命令java -cp . com.kk.Study却能顺利执行
问题分析:
运行java -cp . com.kk.Study成功执行时,表明这个类文件路径是没有问题的,使用指定路径命令java -cp类路径选项指定了当前目录作为搜索路径,这样Java虚拟机能够找到并加载这个类。
然而,当没有指定-cp选项时,就会碰到ClassNotFoundException。说明在尝试通过java com.kk.Study来运行程序时,Java虚拟机没有使用当前目录作为默认的类路径,或者类路径被其他设置覆盖了。也就是说它不能直接找到这个路径。问题出现在系统环境变量的编辑上。
问题解决:
网上查阅了以下也没有找到相关解决方案,系统环境的配置似乎没有问题。忽然想到,我们常常用"."表示当前文件夹,那能不能通过直接在系统环境变量中直接添加"."来表示在任何的当前路径下都能直接使用Java指令呢?没想到真的能行:
在CLASSPATH中添加了"."这一路径,之后在任何“当前路径”便都可以直接跑Java指令了。
显然这只是问题的某一种解决方法,不过笔者暂时没空去深究了,毕竟这样的解决方法也是十分方便。