​ 新入门java的同学经常会问我path和classpath是什么意思,尤其会问classpath是什么意思,为什么只配置一个.就可以。下面以windows系统为例,做一个系统讲解。包含超详细实验数据,实验平台为windows10 + java 8.

1 path的含义

​ path是windows使用的系统环境变量,其作用是记录一些可运行的软件(例如java.exe, javac.exe)所在的位置,使得当我们可以方便快捷的打开这些软件。例如下图powershell中键入命令java -version

​ 此时,powershell就会在当前目录(即C:UsersadminDesktop)下寻找java.exe这个程序,如果没找到,powershell就会访问环境变量path,从path所记录的位置中从前到后一个一个去找java.exe这个软件,如果都找不到,就会报错java 不是可执行命令。

​ 所以我们需要配置环境变量,将java.exe所在目录(例如C:Program FilesJavajdk1.8.0_102bin)配置到path中去,之后powershell就会在 C:Program FilesJavajdk1.8.0_102bin这个目录中找到java.exe这个软件,然后运行它,输出上图所示的结果。

​ 以上即是我们配置path环境变量的意义所在。

​ 最后简要说明一下:-version 是作为参数传给java.exe这个软件,意思是告诉java输出当前版本号。命令行的结构都是这样的 可执行软件 参数1 参数2 …,,第一个是软件名,后面的都是参数。

2 classpath的含义

​ classpath与path功能差不多,path指定的是windows上可运行的软件(一半xx.exe)的位置, classpath值java专用的,它指定的就是java中运行的文件(xx.class)的位置. 下面解释为什么只配置一个.就可以。

​ .是一种相对目录表示法,表示当前目录,与之对应的..表示当前目录的父目录。 什么是当前目录?以powershell为例解释,如下图:

第一行:当前目录是C:UsersadminDesktopa,执行cd命令切换到父目录C:UsersadminDesktop;

第二行:当前目录是C:UsersadminDesktop,执行命令cd切换到父目录C:Usersadmin

第三行:当前目录是C:Usersadmin,执行cd命令切换到当前目录C:Usersadmin

了解了当前目录之后,说说classpath配置的.到底是什么含义,如下图:

​ 当前目录C:UsersadminDesktopa下有Main.class这个文件(.class是可执行文件,.java是源码)。

​ 当我们执行java Main这条命令,首先如上面解释,powershell根据path的配置找到java.exe运行它,java.exe运行后,接受参数Main,然后他就去访问classpath以寻找对应可执行Main.class文件,访问classpath之后发现配置的第一个目录是.,前面说过.代表当前目录,而现在的当前目录是C:UsersadminDesktopa, 所以就在该目录下寻找Main.class文件,然后该目录下正好有Main.class这个文件,java就去执行这个文件输出对应结果。

​ 之后我们切换到父目录执行相同命令,注意现在的当前目录是C:UsersadminDesktop,然而在该目录下没有Main.class这个文件,所以就会抛出错误。

​ 以上就是配置classpath的作用了。

3 加深对classpath的理解

​ 现在我们修改环境变量classpath,如下图:

​ 我们将.换成.a,其意义根据前面的介绍就是当前目录下的a目录。

​ 现在我们来执行前面的java Main命令,如下图:

​ 首先,与前面相同,当前目录C:UsersadminDesktopa下有Main.class这个文件。

​ 当我们执行java Main这条命令,首先如上面解释,powershell根据path的配置找到java.exe运行它,java.exe运行后,接受参数Main,然后他就去访问classpath以寻找对应可执行Main.class文件,访问classpath之后发现配置的第一个目录是.a,前面说过.a代表当前目录下的a目录,而现在的当前目录是C:UsersadminDesktopa, 那么./a就表示C:UsersadminDesktopaa,然而没有该目录,所以就会报出错误。

​ 之后我们切换到父目录执行相同命令,注意现在的当前目录是C:UsersadminDesktop,然后该目录下正好有a目录,a目录下正好有Main.class这个文件,所以java程序找到了它,然后执行,输出结果。

​ 希望你对以上结果有正确的理解,此外关于classpath还有很多有趣的情况,我不介绍了,我希望你熟悉了之后可以自己尝试,但现在不要,否则破坏了环境来问我就增加无谓的工作量。

以后我们可以将一些常用的库配置到classpath,比如配置mybatis: classpath=.; C:Program FilesMybatis,使得我们可以在任何目录都可以引用这些库,就像前面我们虽然在C:UsersadminDesktop目录下,却可以使用C:UsersadminDesktopa目录下的class文件(其实使用IDE之后,这些都不用管,提出来供大家了解)

4 附件: Main.java

public class Main {

public static void main(String[] args) {

System.out.println("a/main");

}

}

java+classpath的理解_Java配置path和classpath的含义详解-Go语言中文社区相关推荐

  1. java.exe 安装程序_java实现可安装的exe程序实例详解

    java实现可安装的exe程序实例详解 通过编写Java代码,实现可安装的exe文件的一般思路: 1.在eclipse中创建java项目,然后编写Java代码,将编写好的Java项目导出一个.jar格 ...

  2. java设计模式观察者模式吗_Java设计模式之观察者模式原理与用法详解

    Java设计模式之观察者模式原理与用法详解 本文实例讲述了Java设计模式之观察者模式原理与用法.分享给大家供大家参考,具体如下: 什么是观察者模式 可以这么理解: 观察者模式定义了一种一对多的依赖关 ...

  3. java list 重复数据_java 查找list中重复数据实例详解

    java 查找list中重复数据实例详解 需求: 查找一个List集合中所有重复的数据,重复的数据可能不止一堆,比如:aa, bb, aa, bb, cc , dd, aa这样的数据.如果有重复数据, ...

  4. java生成字符串数组_Java 生成随机字符串数组的实例详解

    Java 生成随机字符串数组的实例详解 利用Collections.sort()方法对泛型为String的List 进行排序.具体要求: 1.创建完List之后,往其中添加十条随机字符串 2.每条字符 ...

  5. java htmlparser 使用教程_Java解析HTML之HTMLParser使用与详解

    HTMLParser将解析过的信息保存为一个树的结构.Node是信息保存的数据类型基础.请看Node的定义:public interface Node extends Cloneable;Node中包 ...

  6. java int byte数组_Java 中int与byte数组转换详解

    1.与运算符的理解(&): 参加运算的两个数据,按二进位进行"与"运算.如果两个相应的二进位都为1,则该位的结果值为1,否则为0.即 0&0=0:0&1=0 ...

  7. java 设置pdf 编码格式_Java如何设置PDF文档背景色详解

    前言 一般生成的PDF文档默认的文档底色为白色,我们可以通过一定方法来更改文档的背景色,以达到文档美化以及保护双眼的作用. 以下内容提供了Java编程来设置PDF背景色的方法.包括: 设置纯色背景 设 ...

  8. java接口废弃注释_Java注释Override、Deprecated、SuppressWarnings详解

    四.如何对注释进行注释 这一节的题目读起来虽然有些绕口,但它所蕴涵的知识却对设计更强大的java程序有很大帮助. 在上一节讨论了自定义注释,由此我们可知注释在J2SE5.0中也和类.接口一样.是程序中 ...

  9. java 反射 参数 注解_Java编程之反射中的注解详解

    "注解"这个词,可谓是在Java编程中出镜率比较高,而且也是一个老生常谈的话题.我们之前在聊Spring相关的东西时,注解是无处不在,之前我们简单的聊过一些"注解&quo ...

最新文章

  1. Ruby中的设计模式
  2. 2天训练出15亿参数大模型,国产开源项目力克英伟达Megatron-LM,来自LAMB作者团队...
  3. 河南省第七届省赛 问题 F: Turing equation 水题
  4. jQuery选中该复选框来实现/全部取消/未选定/获得的选定值
  5. 微信小程序自定义组件实现
  6. C#+Sql数据库备份
  7. Linux 应用程序开发入门
  8. 计算机中的字,双字以及存储
  9. SQL性能优化前期准备-清除缓存、开启IO统计
  10. 遗传算法的交叉变异详解
  11. linux服务器管理公司用户,Linux服务器用户账号如何管理
  12. java验证码技术_java验证码前台技术
  13. DELMIA软件:机器人抓手工具制作
  14. Linux的ssh登录命令,Linux SSH登录命令总结
  15. Spring Cloud入门-Oauth2授权之JWT集成(Hoxton版本)
  16. 解决应用程序正常初始化(0xc0000135)失败
  17. 刚培训的java程序员怎么找工作,快来看鸭~
  18. HinM_COMPILER_cale计划和实现
  19. bps(bitspersecond)是什么?
  20. 如何学习手绘插画?这五点很重要!

热门文章

  1. python 导入其他目录下的模块
  2. 调试错误:InternalErro(seeabovefortraceback):BlasGEMMlaunchfailed:a.shape=(300,1),b.shape=(1,10),m=300,n=
  3. Salesforce LWC学习(二) helloWorld程序在VSCode中的实现
  4. cf1042d 树状数组逆序对+离散化
  5. Unicode 和 UTF-8 的区别
  6. tableview 图片缓存
  7. [Everyday Mathematics]20150226
  8. Test: 为WLW添加源代码着色插件WindowsLiveWriter.CNBlogs.CodeHighlighter
  9. sendmessage()模拟鼠标点击
  10. 13个坏习惯让IT工作者中过劳(转)