- 浏览: 43703 次
- 性别:
文章分类
最新评论
本文转自:http://blog.sina.com.cn/s/blog_5198c7370100cxsk.html
java中的path,classpath经常容易引起混淆,现做以下总结:
首先是JAVA_HOME环境变量,我们先来掌握这个环境变量的设置内容,JAVA_HOME这个环境变量的设置内容是JDK的安装目录,比如说您的JDK安装在d:\jdk1.6.0这个目录下,请您查看一下这个目录下是不是有一个子目录bin,bin目录中是不是有java.exe这个文件,如果是,那么您的JAVA_HOME环境变量的内容应该为d:\jdk1.6.0。那么我们设置这个环境变量的作用是什么呢?就单独的java开发而言,这个环境变量并没有任何作用,这就是很多根据书上的描述设置好之后,把一本书学完也没有用到这个变量,所以很是不理解。
其实JAVA_HOME变量最好还是设置一下,首先,我们为了能够编译和运行java程序,需要在PATH环境变量中把java.exe所在的目录设置为PATH变量的一部分,目的是为了能够通过命令行运行javac和java命令成为可能,当你在命令行中输入javac ...或者java ...的时候,如果提示你一个错误:'javac' 不是内部命令或外部命令,也不是可运行的程序或批处理文件。这时候说明操作系统没有找到你通过命令行输入的javac这个命令,为什么呢?因为操作系统并不知道你的javac.exe这个文件在哪里,所以无法执行对应的文件。那么为了能够让操作系统找到这个可执行文件,我们就需要把javac.exe这个可执行文件所在的目录作为PATH环境变量的一部分设置起来,这样当你在命令行输入一个命令的时候,操作系统就会自动搜索PATH变量中所指定的所有目录了。在Windows系统中PATH变量中的所有路径采用分号分割,如果在Linux系统中采用冒号分割。另外说明一点,如果你设置好了环境变量,在命令行中还是出现同样的错误,那么有两种可能,一种就是你的设置不正确,另一种就是你的设置没有生效,一般你可以关闭命令行窗口再重新打开就可以了。这对这个设置,以刚才的目录为例,那么PATH变量中的内容就是...;d:\jdk1.6.0\bin,这时候我们可以借用已经设定过的JAVA_HOME,将PATH的内容修改为:...;%JAVA_HOME%\bin,这样的设置有一定的好处,当你的系统中重新安装JDK,并改变过目录的话,你只要修改JAVA_HOME的内容就可以了,PATH则不需要修改。此外,JAVA_HOME变量还会有一些其他用途,比如Eclipse这个IDE,它本身是由java程序编写的,那么在运行的时候必然需要虚拟机的存在,所以Eclipse在启动时需要查找虚拟机,如果有JAVA_HOME这个变量,那么Eclipse就会利用这个变量找到虚拟机的路径。所以虽然开始JAVA_HOME环境变量可以不设置,但是还是建议大家为以后考虑而设置上。
我们继续来谈论CLASSPATH的问题,很多书上在讲解java程序的时候建议大家设置CLASSPATH这个环境变量,我们这里不建议大家设置。原因我们会在稍后的时候看到。讲到CLASSPATH,我们首先来看编写java程序时一直在用的两个命令javac和java。
javac的命令语法是这样的:
javac <选项> <源文件>
我们常用的情况是这样的:
javac -classpath <类路径> <要编译的java源文件>
这里的类路径输入什么呢?这里的类路径是指要编译的java源文件中所用的非java的基础API中的类在那个目录下,路径可以是多个目录,用分号隔开来。比如说我们要编译App.java这个文件,而这个文件中用到了com.util这个包中的MyDate这个类,现在我们假设MyDate这个类存在目录是:d:\mylib\com\util\MyDate.class,那么我们如何编译App这个类呢?我们的命令如下:
javac -classpath d:\mylib App.java
注意这里的classpath的内容,我们只是指定路径到package所在目录,并不能把package一起指定进去,而且MyDate.class必须在com\util这个目录中,因为这个类定义了package为com.util。好了现在你对javac中的classpath明白了吗?
我们再来看java这个命令,这个命令的语法是这样的:
java [选项] 类 [参数]
比如说以上面的例子,我们假设App这个类位于com.app这个package中,它的存放目录是:d:\dev\myapp\com\app\App.class,那么我们该如何运行这个类呢?命令如下:
java -classpath d:\dev\myapp;d:\mylib com.app.App
从命令中我们可以看到,在classpath后面我们指定两个目录,分别是App这个类的package所在的目录和MyDate这个类的package所在的目录,这里的类路径要给定的是要运行的类和这个类用到的所有类的package所在的目录,多个目录之间用分号隔离开来,最后指定要运行的类的时候必须加上package。
好了到这里你应该彻底掌握了编译java程序和运行java程序的诀窍了吧。如果我们在系统环境变量中设置了CLASSPATH的话,在命令行中通过java运行的时候如果再不指定CLASSPATH参数,那么就会导致java虚拟机只是按照CLASSPATH环境变量中的目录搜索类,而不在你的当前目录下搜索类,结果自然会出现Exception in thread "main" java.lang.NoClassDefFoundError,所以当你看到这个错误的时候请查看一下你的系统环境变量,如果没有设置CLASSPATH,那么在检查一下你的当前目录。为了确保万无一失,按照上面讲述的例子进行操作是不会发生任何错误。
--------------------------------------------------------------
附:本地工作环境配置
JAVA_HOME:
D:\Program Files\Java\jdk1.6.0_13
Path:
%M2_HOME%\bin;%JAVA_HOME%\bin;d:\oracle\product\10.2.0\db_1\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;d:\Program Files\Tencent\QQPCMgr\6.5.2121.201;D:\Program Files\TortoiseSVN\bin;C:\Program Files\Microsoft SQL Server\80\Tools\Binn\;C:\Program Files\Microsoft SQL Server\90\Tools\binn\
CLASSPATH:
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\jsr173_1.0_api.jar
M2_HOME:
D:\apache-maven-3.0.4
ORACLE_BASE:
D:\oracle
ORACLE_HOME:
D:\oracle\product\10.2.0\db_1\
发表评论
-
【J2SE】Map.Entry 类使用简介
2012-05-10 11:12 494本文转自:http://www.cnblogs.com/guo ... -
【J2SE】Static Nested Class、Inner Class、Anonymous Inner Class
2012-05-05 11:58 0本文转自:http://blog.csdn.net/welco ... -
【J2SE】Anonymous Inner Class (匿名内部类)
2012-05-05 11:56 0本文转自:http://www.iteye ... -
【J2SE】生成者、消费者问题
2012-05-05 11:04 821本文转自:《Java JDK 实例宝典》 解决生产者消费者问 ... -
【J2SE】Java 运行时异常
2012-05-05 10:39 0本文转自:http://amyer.ite ... -
【J2SE】再谈线程:生产者与消费者
2012-05-04 23:36 0本文转自:http://www.blogjava.net/li ... -
【J2SE】Java线程:并发协作-生产者消费者模型
2012-05-04 23:34 0本文转自:http://lavasoft.blog.51cto ... -
【J2SE】线程7种状态的相互转换
2012-05-04 22:48 664本文转自:http://www.blogj ... -
【J2SE】详解java类的生命周期
2012-05-12 21:23 657本文转自:http://www.2cto.com/kf/20 ... -
Java文件操作大全
2012-05-02 13:29 0本文转自:http://www.blog ... -
【基础】Java Annotation详解
2012-05-02 11:50 0本文转自:http://www.blogjava.net/c ... -
【J2SE】Java JDBC数据库连接池总结
2012-05-03 23:21 866本文转自:http://www.blogj ... -
【基础】JAVA中String与StringBuffer的区别
2012-05-01 20:28 0String和StringBuffer的区别,网上资料可以说是 ... -
【J2SE】Java常见异常小结
2012-05-12 21:22 743本文重在Java中异常机制 ... -
【基础】Java异常处理及异常机制介绍
2012-05-01 19:54 0当出现程序无法控制的外部环境问题(用户提供的文件不存在,文件内 ... -
【基础】Java中finalize()
2012-05-01 19:39 0垃圾回收器要回收对象的时候,首先要调用这个类的finalize ... -
【基础】finally的一些测试
2012-05-01 16:37 0finally是在执行returen的中间执行。 pac ... -
【J2SE】Java 反射机制简述
2012-05-03 23:19 645本文转自:http://zk1878.iteye.com/b ... -
【J2SE】Java中生成对象的4方式
2012-05-01 12:46 0本文转自:http://blog.sina.com.cn/s/ ... -
【J2SE】Anonymous Inner Class 匿名内部类
2012-04-27 19:05 745本文转自: public class T ...
相关推荐
java学习总结1 -- j2se 项目环境: jdk8 字符集:UTF-8 开发工具:Eclipse 包括内容: basic 基本语法 oop 面向对象 api 常用api及工具类 javadoc javaDoc的使用 debug 代码调试方法 datastructure 基本数据结构 ...
(J2SE平台Java程序设计)阶段测试题,(J2SE平台Java程序设计)阶段测试题,(J2SE平台Java程序设计)阶段测试题,(J2SE平台Java程序设计)阶段测试题
Java j2se QQ 毕业论文
java 入门教程 课件 j2se java 入门教程 课件 j2se java 入门教程 课件 j2se java 入门教程 课件 j2se
java基础(j2se代码)java基础(j2se代码)java基础(j2se代码)java基础(j2se代码)java基础(j2se代码)java基础(j2se代码)java基础(j2se代码)
实验1 JAVA开发环境J2SE实验报告.doc
如何才算掌握Java(J2SE篇 如何才算掌握Java(J2SE篇
最新中文J2SE API 不是你骂我 <br>共4个文件。。。。上传中
最新中文J2SE API 不是你骂我 <br>共4个文件。。。。上传中
Java-J2SE学习笔记Java-J2SE学习笔记Java-J2SE学习笔记Java-J2SE学习笔记Java-J2SE学习笔记Java-J2SE学习笔记Java-J2SE学习笔记Java-J2SE学习笔记
java零基础自学之 J2SE 之 面向对象编程 java零基础自学之 J2SE 之 面向对象编程
j2se 非常好的java基础知识整理
尚学堂马士兵j2se课程的全部源代码,针对每章知识点的小例题
其中有Java源代码,还有发布的程序,点击直接即可运行。对于J2SE的学习非常有帮助。
资源名称:Java-J2se、J2ee开发全程视频教程和源码(87集)资源目录:【】Java-J2se-J2ee全程教程(01-10)【】Java-J2se-J2ee全程教程(11-20)【】Java-J2se-J2ee全程教程(21-30)【】Java-J2se-J2ee全程教程(31...
是myeclipse课本源码,里面有详细的注解。希望能给大家带来帮助
JAVA参考大全.J2SE
内容概要:华为牛客网的Java测试题,算法测试题的第一页的解题源码 使用人群:应届毕业生 在校大学生 初级中级高级开发 适用场景及目标:借鉴 参考,有些算法还是有价值,都是一个一个字母敲出来的 其他:只代表个人...
J2SE_Java_Api是j2se开发使用的api
JAVA参考大全.J2SE.5EDITION