java+classpath的理解_Java配置path和classpath的含义详解-Go语言中文社区
新入门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语言中文社区相关推荐
- java.exe 安装程序_java实现可安装的exe程序实例详解
java实现可安装的exe程序实例详解 通过编写Java代码,实现可安装的exe文件的一般思路: 1.在eclipse中创建java项目,然后编写Java代码,将编写好的Java项目导出一个.jar格 ...
- java设计模式观察者模式吗_Java设计模式之观察者模式原理与用法详解
Java设计模式之观察者模式原理与用法详解 本文实例讲述了Java设计模式之观察者模式原理与用法.分享给大家供大家参考,具体如下: 什么是观察者模式 可以这么理解: 观察者模式定义了一种一对多的依赖关 ...
- java list 重复数据_java 查找list中重复数据实例详解
java 查找list中重复数据实例详解 需求: 查找一个List集合中所有重复的数据,重复的数据可能不止一堆,比如:aa, bb, aa, bb, cc , dd, aa这样的数据.如果有重复数据, ...
- java生成字符串数组_Java 生成随机字符串数组的实例详解
Java 生成随机字符串数组的实例详解 利用Collections.sort()方法对泛型为String的List 进行排序.具体要求: 1.创建完List之后,往其中添加十条随机字符串 2.每条字符 ...
- java htmlparser 使用教程_Java解析HTML之HTMLParser使用与详解
HTMLParser将解析过的信息保存为一个树的结构.Node是信息保存的数据类型基础.请看Node的定义:public interface Node extends Cloneable;Node中包 ...
- java int byte数组_Java 中int与byte数组转换详解
1.与运算符的理解(&): 参加运算的两个数据,按二进位进行"与"运算.如果两个相应的二进位都为1,则该位的结果值为1,否则为0.即 0&0=0:0&1=0 ...
- java 设置pdf 编码格式_Java如何设置PDF文档背景色详解
前言 一般生成的PDF文档默认的文档底色为白色,我们可以通过一定方法来更改文档的背景色,以达到文档美化以及保护双眼的作用. 以下内容提供了Java编程来设置PDF背景色的方法.包括: 设置纯色背景 设 ...
- java接口废弃注释_Java注释Override、Deprecated、SuppressWarnings详解
四.如何对注释进行注释 这一节的题目读起来虽然有些绕口,但它所蕴涵的知识却对设计更强大的java程序有很大帮助. 在上一节讨论了自定义注释,由此我们可知注释在J2SE5.0中也和类.接口一样.是程序中 ...
- java 反射 参数 注解_Java编程之反射中的注解详解
"注解"这个词,可谓是在Java编程中出镜率比较高,而且也是一个老生常谈的话题.我们之前在聊Spring相关的东西时,注解是无处不在,之前我们简单的聊过一些"注解&quo ...
最新文章
- Ruby中的设计模式
- 2天训练出15亿参数大模型,国产开源项目力克英伟达Megatron-LM,来自LAMB作者团队...
- 河南省第七届省赛 问题 F: Turing equation 水题
- jQuery选中该复选框来实现/全部取消/未选定/获得的选定值
- 微信小程序自定义组件实现
- C#+Sql数据库备份
- Linux 应用程序开发入门
- 计算机中的字,双字以及存储
- SQL性能优化前期准备-清除缓存、开启IO统计
- 遗传算法的交叉变异详解
- linux服务器管理公司用户,Linux服务器用户账号如何管理
- java验证码技术_java验证码前台技术
- DELMIA软件:机器人抓手工具制作
- Linux的ssh登录命令,Linux SSH登录命令总结
- Spring Cloud入门-Oauth2授权之JWT集成(Hoxton版本)
- 解决应用程序正常初始化(0xc0000135)失败
- 刚培训的java程序员怎么找工作,快来看鸭~
- HinM_COMPILER_cale计划和实现
- bps(bitspersecond)是什么?
- 如何学习手绘插画?这五点很重要!
热门文章
- python 导入其他目录下的模块
- 调试错误:InternalErro(seeabovefortraceback):BlasGEMMlaunchfailed:a.shape=(300,1),b.shape=(1,10),m=300,n=
- Salesforce LWC学习(二) helloWorld程序在VSCode中的实现
- cf1042d 树状数组逆序对+离散化
- Unicode 和 UTF-8 的区别
- tableview 图片缓存
- [Everyday Mathematics]20150226
- Test: 为WLW添加源代码着色插件WindowsLiveWriter.CNBlogs.CodeHighlighter
- sendmessage()模拟鼠标点击
- 13个坏习惯让IT工作者中过劳(转)