记一次解决cmd中执行java提示"找不到或没法加载主类"的问题 记一次解决cmd中执行java提示"找不到或没法加载主类"的问题

今天遇到一个问题:在cmd命令行中,用javac编译java文件能够成功,可是用java执行却提示“找不到或没法加载主类”。现将该问题的缘由以及解决办法记录一下。html

先理解一下系统变量path和classpath的做用。java

path:可执行命令的搜索路径,在该路径下搜索能够运行的程序或批处理文件。
  命令行中输入一个命令,则会在path配置的目录中查找该命令,若是存在则调用该程序运行,若是不存在则提示“ 'XXX' 不是内部或外部命令,也不是可运行的程序或批处理文件。”
  若是要想在cmd中执行java,则须要把java.exe 配置在path系统变量中。因为cmd会搜索path中目录下的文件,所以在实际配置的时候,只须要把../jre/bin 配置到path中便可。这样,在执行java时,操做系统便会自动在../jre/bin 目录下搜索java.exe 可执行程序了。jvm

classpath: 类文件(*.class/*.jar)的存储路径。
  java 命令执行时,会读取classpath中配置的目录,而后在该目录下去搜索将要执行的.class文件。若是未搜索到,则会报“找不到或没法加载主类”错误,若是搜索到,则继续运行。
  例如:执行命令 java Hello;
    则java程序会去在classpath配置的全部目录和文件中取搜索Hello.class文件,找到以后会把该class文件加载到jvm中,为后面的运行作准备。
  classpath这个系统变量只是为java使用的,其余程序不会使用该变量。post

如上所说,java执行时,会在classpath中搜索 XXX.class 文件,若是找不到则报出"找不到或没法加载主类"的错误。那么在cmd运行的时候,咱们会随意的在某个目录下面javac编译,而后java运行程序,那么,该目录未配置到classpath中,java程序又是如何找到该目录的呢?url

还记得配置classpath的时候,有一个".;"的配置项吗?其表明的就是执行java命令是的所在目录,也便是当前目录。这样便是把当前目录加入了classpath,所以java执行的时候,会在当前目录中搜索XXX.class 的。spa

注意,当配置 .; 的时候,必定要注意前面是否是还有其余配置。classpath中多个目录要以;分割,而这里的"."是一个配置项,表明的当前目录,因此,若是"."前面有其余的配置项,则前面一样须要加入";"。
  例如:
    "."前面有其余配置项,则这样配: ...\bin;.;%JAVA_HOME%\bin.......
    "."前面无其余配置项(也便是classpath是以.开始的),则这样配:   .;%JAVA_HOME%\bin.......
  注意,在配置的时候必定要肯定究竟是";.;"仍是".;", 不然若是配成...\bin.;%JAVA_HOME%\bin.......则就会发生:可以javac编译成功,可是java却没法执行成功的错误。操作系统

 另:用户变量会覆盖掉系统变量命令行

  环境变量不区分大小写htm

===============================================blog

原文连接:记一次解决cmd中执行java提示"找不到或没法加载主类"的问题 转载请注明出处!

===============================================

---end--

相关文章
相关标签/搜索