在同事的电脑上写了个简单的helloworld.java,javac编译生成helloworld.class,再用java helloworld运行的时候提示ClassNotFoundException。(一滴汗)来看看是怎么回事
我们都知道安装jdk后,需要设置环境变量,PATH就不多说了。这里重点说说classpath。
先一起来看一看 java 程序的运行过程. 我们已经知道java是通过java虚拟机来解释运行的, 也就是通过java命令, javac 编译生成的 .class文件就是虚拟机要执行的代码, 称之为字节码(bytecode), 虚拟机通过classloader来装载这些字节码, 也就是通常意义上的类. 这里就有一个问题, classloader 从哪里知道 java 本身的类库及用户自己的类在什么地方呢?
指明classpath有三个方法,有着缺省值.(当前路径),或者要有一个用户指定的变量来表明, 这个变量就是类路径(classpath), 或者在运行的时候传参数给虚拟机.
运行命令:java -classpath d:\mylib;%classpath% com.MyClass
CLASSPATH为java加载类(class or lib)路径,一般在环境变量中声明设为:.;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar (要加.表示当前路径)
此时如果你只是运行简单的helloworld程序,那么可以在.class文件的当前路径下运行命令 java com.MyClass 即可。classloader会先去机器的CLASSPATH找到目标类。
理解了原理,我来说说我遇到的问题,同事声明的CLASSPATH为%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar,少了缺省值.
而我只是运行了 java com.MyClass
显然classloader是加载不了MyClass类的,于是就有了ClassNotFoundException。那么,聪明的你一定知道解决方案了吧
分享到:
相关推荐
主要介绍了Spring配置中的"classpath:"与"classpath*:"的区别,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
关于java的classpath补充,详细说明如何配置classpath,如火热让javac正确编译运行java文件
.classpath
classpath备份
Classpath Variable 解决办法
java classpath 理解 包括 1 在命令行查看classpath 2 在命令行设置classpath 3 classpath理解 4 命令行中直接使用classpath 很经典哦
jdk的classpath路径和环境配置 jdk的classpath路径和环境配置
classpath 和path
自学如何使用框架的工具,项目框架添加classpath文件的
classpath修改,相关jsp页面classpath修改
CLASSPATH="$CLASSPATH:""$jar" done windows : SETLOCAL ENABLEDELAYEDEXPANSION set LIB=xx set CLASSPATH=. FOR %%C IN (LIB\*.jar) DO set CLASSPATH=!CLASSPATH!;%%C echo %CLASSPATH%
Android 4.4.4源码的.classpath文件,主要用于将Android 4.4.4源码的导入到eclipse工具中,提供给需要学习android源码的同学,也自己顺便记录一下,方便查找。
本文详细介绍了path与classpath,以及它们之间的区别。
Java环境配置与设置JAVA_HOME_CLASSPATH_PATH的目的
详细讲解了java classpath 的详细过程,让你不在为配置java环境而烦恼,讲的非常好!word格式的!
本人在学习java的过程中深受classpath的折磨,为了让初学者少走弯路,我将这些经验总结了一番,总结了多种classpath的基本使用情况和常见的一些问题,以及解决方案和原理,供大家参考
Jamvm是一个c语言编写的开源的java虚拟机,它使用GNU classpath作为java类库
用于处理PDF,或将PDF转换为jpg图片格式时用到的dll