A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 123412 中级黑马   /  2015-3-12 13:51  /  727 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

你们说:为什么我们在DOS命令框中编译和运行文件的时候,java和javac之前的路径总是.java文件(即源文件)的路径呢?在这里给大家回忆一下,java和javac是两个可执行文件,按理说,只要我们的path配置好了,那么我们就可以在任意目录下进行运行这两个可执行文件。
那这个问题的答案呢?是这样的:当我们的path配置好了,我们是可以在任意目录下运行java和javac这两个可执行文件了,但是我们的目的不是仅仅运行这两个程序,我们的目的是要通过javac来编译.java文件(即源文件),通过java来运行.class文件(即字节码文件),所以说系统在此时找的是四个文件即javac.exe,.java文件,java.exe,.class文件,依次查找,第一个文件javac.exe和第三个文件java.exe由于我们在path中配置了,所以说可以找到,那么第二个文件.java文件呢?系统在查找这个.java文件时,我特别试了一下,系统只在当前路径下查找该文件,如果在当前路径下找不到,那么就会报错。所以说在在javac.exe编译.java文件是,其当前路径必须是.java的存储路径,否则就会报错。至于为什么java.exe运行.class文件的当前路径也是该路径呢?这个是为了方便下一次编译。首先系统可以找到java.exe文件,原因已说过;而系统在查找.class文件时,其顺序是这样的,先在classpath中查找,再找不到的情况下,如果classpath中的路径后边有分号即“;”(不推荐这样做),则再在当前目录下查找,否则是不查找当前路径的,因为我们已经在classpath中设置了.class文件的路径了(和.java文件的路径是一样的),所以说系统可以在classpath中找到.class文件的地址。因为在查找java.exe和.class文件时均不用查找当前路径,就可以找到,所以说,java.exe运行.class文件的当前路径是谁都可以!!!!!这样做纯属是为了下一次编译的时候不用再换路径了。


在这里给大家说一个小技巧,如果大家不想因.java的文件的存放位置也就是.class文件的存放位置发生改变,从而不断的重新设置classpath的话,可以将classpath的值设置为".;"(含义:当系统查找.class文件时,在当前路径下查找。)就可以了,

7 个回复

倒序浏览
{:2_42:}{:2_42:}{:2_42:}{:2_42:}
回复 使用道具 举报
path和classpath 分别有什么用
回复 使用道具 举报
突然世界晴 发表于 2015-3-12 17:08
path和classpath 分别有什么用

path是系统路径,如果而classpath则是.class文件的路径,当系统要查找的文件是可执行文件时,那么系统首先是到当前目录查找文件,其次就是到path中查找;而系统在查找.class文件时,则直接到系统环境变量classapth中查找,如果你的classpath中的路径最后有个分号即;的话,那么系统在classpath中的路径查找完了之后,没找大的话,还会到当前路径下查找。如果没有;的话,那么系统就仅仅查找classpath中的路径,查完之后,就不在到当前目录下查找了。
这是我的理解。
回复 使用道具 举报
123412 发表于 2015-3-12 17:28
path是系统路径,如果而classpath则是.class文件的路径,当系统要查找的文件是可执行文件时,那么系统首 ...

如果我没有设置classpath呢
回复 使用道具 举报
受用了,感谢分享!!!
回复 使用道具 举报
123412 中级黑马 2015-3-12 21:33:02
7#
突然世界晴 发表于 2015-3-12 19:54
如果我没有设置classpath呢

如果你没有设置classpath的话,那么系统会在当前路径下查找你的.class文件
回复 使用道具 举报
殷俊 高级黑马 2015-3-12 22:10:47
8#
这可以算是学Java知识之前环境配置的小难点了,嘿嘿,讲的很仔细啊,受用了,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马