类路径是什么意思_4.6类路径

4.6类路径

4.6.1什么是类路径

       前面我们讨论过包,知道字节码文件最终都会被放到和包名相匹配的树状结构子目录中。例如上一节的例子:

4d39465c6e0e1b50eb748c5c931207e8.png

  其实类还有一种存放方式,就是可以归档到一个jar文件中,jar文件其实就是把字节码文件连同子目录一同归档到一个压缩文件中。jar文件是使用zip格式压缩的,我们可以使用zip程序来查看和解压jar文件。其实Java自带的类库就是jar文件。例如JRE安装目录jre/lib和jre/lib/ext下就有很多jar。我们看一下jre/lib/rt.jar的结构:

f79b78ac41d9543581b91d30ad38bc52.png

我们看到,无论是单独存放还是归档jar,都有一个基目录(黑色部分),上面2个图的基目录分别为:

D:\Java大失叔\workspace\BaseJava\bin

C:\Program Files\Java\jre1.8.0_261\lib

我们采用基目录+包树状结构,就可以定位到某个类,例如:

D:\Java大失叔\workspace\BaseJava\bin\com\javadss\javase\ch04\PackageTest.class

C:\Program Files\Java\jre1.8.0_261\lib\java\lang\System.class

这里的基目录,就是类路径,英文叫classpath。类路径就是java编译器或JVM用来定位类的基目录,类路径可以有多个,是一组路径的集合。无论是编译还是运行,都需要设置类路径,类路径的形式和操作系统相关。

在Windows环境下,采用分号(;)分隔,如果路径中含有空格,需要用引号(“”)括起来,形式如下:

D:\Java大失叔\workspace\BaseJava\bin; “C:\Program Files\Java\jre1.8.0_261\lib”;

在Linux环境下,采用冒号(:)分隔,形式如下:

usr/local/bin:usr/dss/java/bin

4.6.2编译

  我们假设有3个类:A、B、C。main方法在C中,C中访问了A和B,同时还访问了java.lang.System类。它们的结构如下:

 5cdd32395e9a42d48dffe6148e7ef821.png

其中A和B是空类,C类的代码如下:

package com.javadss.javase.ch04.ccc;  import com.javadss.javase.ch04.aaa.A;import com.javadss.javase.ch04.bbb.B;  public class C {    public static void main(String[] args) {        A a = new A();        B b = new B();        System.out.println("classpath");    }}

现在我们用命令行来编译A、B、C,还记得编译命令吗?编译命令如下:

javac -d 编译后class的路径 源文件

则编译命令如下:

javac -d D:\Java大失叔\workspace\BaseJava\bin D:\Java大失叔\workspace\BaseJava\src\com\javadss\javase\ch04\aaa\A.java

javac -d D:\Java大失叔\workspace\BaseJava\bin D:\Java大失叔\workspace\BaseJava\src\com\javadss\javase\ch04\bbb\B.java

javac -d D:\Java大失叔\workspace\BaseJava\bin D:\Java大失叔\workspace\BaseJava\src\com\javadss\javase\ch04\ccc\C.java

编译A、B的时候没有问题,但是编译C的时候,遇到了问题,报错:

c37abec6165a808852bf640dac273f6a.png

这是因为C类中引用了A和B,但是编译命令中没有指定A和B的绝对路径,因此会报错“程序包不存在”、“找不到符号”这些错误。我们可以在命令行中增加-classpath或-cp选项,设置A和B的类路径,设置后的命令如下:

javac -cp D:\Java大失叔\workspace\BaseJava\bin -d D:\Java大失叔\workspace\BaseJava\bin D:\Java大失叔\workspace\BaseJava\src\com\javadss\javase\ch04\ccc\C.java

再次执行,编译成功。有的同学可能要问了,C中也引用了java.lang.System类,为什么不用设置System类的类路径呢?这是因为System属于JDK的类库,javac编译时,会默认搜寻JDK的类路径。

       当我们的程序引用了很多类,这些类分散在不同的地方,就需要把所有的类路径都写到命令行中,比如类路径为:

D:\Java大失叔\workspace\BaseJava\bin;.;“C:\Program Files\Java\jre1.8.0_261\lib”;

注意,中间有一个“.”,这个表示当前目录。当我们这样写的时候会导致命令行非常长,我们可以用设置环境变量classpath的方式来减少命令行的长度,设置环境变量的具体形式和操作系统有关,Windows命令格式如下:

set classpath=类路径集合

例如:

set classpath= D:\Java大失叔\workspace\BaseJava\bin; “C:\Program Files\Java\jre1.8.0_261\lib”;

我们在命令行窗口中执行上述命令后,在窗口关闭之前,所有的编译命令都不需要用-cp选项来设置类路径了。网上有很多网文或教程中,都喜欢在系统环境变量中设置classpath,这是笔者不推荐的。推荐的几种做法是

  1. 在命令行中用-classpath或-cp选项

  2. 在命令行中设置classpath环境变量

  3. 编写shell脚本,将设置classpath环境变量和编译命令一起写入脚本

事实上,编译器会按照下面方式搜寻类:

  • 从JDK的类库中搜寻

  • 从当前目录下搜寻

  • 从classpath环境变量中搜寻

  • 从classpath选项中搜寻

如果搜寻类的时候发现了一个以上的同一个类,就会产生编译错误。

  另外,编译器还会做很多其他工作,例如编译器在搜寻类的时候,还会查看源文件,如果发现被引用的类的源文件比类文件新,还会自动的重新编译源文件。

4.6.3运行

       用命令行运行程序和编译类似,我们也需要用-classpath或-cp选项指定类路径,常用的命令格式为:

java -classpath 类路径 包含main方法的类的完整类名

我们来运行上面的例子C类,则命令行如下:

javac -cp D:\Java大失叔\workspace\BaseJava\bin com.javadss.javase.ch04.ccc.C

同样,对于JDK的核心类库,我们不需要显示的加到类路径中。当然,我们也可以用设置classpath环境变量的方法预先设置,然后执行运行命令的时候可以不用加上-classpath选项了。

       这里需要注意一点,对于编译器来说,总是会搜寻当前目录(换句话说,会默认把当前目录加入到类路径),但是虚拟机JVM仅仅在不设置classpath环境变量,也不加-classpath或-cp选项的时候,才会把当前目录加入到类路径中。

weixin_39562928
关注 关注
  • 14
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java路项目的发布路径
信息技术的博客
07-13 193
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% //项目的发布路径,例如: /rabc String path = request.getContextPath(); System.out.println(path); /* 全路径,形式如下: http://127.0.0.1:8001/rbac/ ...
什么叫做classpath(路径
dsl
02-03 9850
1、路径 就是项目的src下。 2、获取路径下的资源 使用加载器: Demo.class.getClassLoader()...
编程必备:如何在Java中设置路径和工作目录
最新发布
2401_83707780的博客
03-26 1642
在 Java 编程中,路径(Classpath)和工作目录(Working Directory)是两个非常重要的概念,它们对于程序的编译和运行至关重要。我将分别对这两个概念进行详细的介绍,并解释它们在 Java 开发中的作用和重要性。路径(Classpath)路径是 Java 运行时环境用来查找和包的一个参数。简而言之,它是环境变量的一部分,指定了 JVM(Java虚拟机)搜索定义的位置。路径可以指向几种不同的数据源:可以是目录(其中包含了编译后的.class。
JAVA技术文章: 使用JWhich工具管理CLASSPATH
键者天行
01-17 5796
从表面上看,Java的classpath(路径)很简单,但一直以来它都是一个产生问题和混乱的根源。本文介绍classpath的基本知识、可能产生的问题,并提供了一个简单的classpath管理工具。 和Java路径(classpath)打交道的过程中,开发者偶尔会遇到麻烦。这是因为,装载器实际装入的是哪一个有时并不显而易见,当应用程序的classpath包含大量的和目录时,情况尤其严重。
发布到路径下是什么意思_院校专业组和专业+院校分别是什么意思?有什么区别?...
weixin_32688333的博客
01-13 274
2021年,我国将会有8个省份会迎来第一次“3+1+2”模式的新高考。不过,虽然它们采用的都是相同模式的新高考,但这些省市在志愿的设置上其实并不完全相同,而是分为了"院校专业组”和“专业()+院校”两种。本文将会告诉大家这两种志愿设置方式分别是什么意思,也会帮大家分析一下它们之间有什么区别。对此了解还不是很清楚的考生及家长,一定要认真阅读这篇文章哦。一、院校专业组和专业()+院校分别是什么意思...
讯客分信息网站系统源码 v4.6
04-04
11.伪静态规则功能 静态路径重写跟纯静态一样路径 方便搜索引擎抓取 12.便民导航功能 可以加入便民连接也可以做文字广告位 或者站内重点信息引导功能无 13.底部单页文件管理 关于我们 免责申明 广告管理 帮助中心 ...
gradle-4.6-all.zip
12-04
放到.gradle目下的wrapper/dists/gradle-4.6-all/xxxxxxxx/的目录下
4.6章节测验1
08-03
单分支选择结构(if语句)用于当满足某个条件时执行特定代码,双分支选择结构(if-else语句)则提供了两种可能的执行路径。多分支选择结构(如switch语句)则允许更多的条件分支。此外,选择结构还可以嵌套,使得...
基于多机器人协作的未知环境下路径探索研究
07-13
1.4基于多机器人协作的路径探索综述…………………………………………19 1.4.1协作探索的定义………………………………………………………………19 1.4.2协作探索的国内外研究现状…………………………………………...
路径的理解
liulang68的博客
11-18 370
默认访问的就是resources的路径下面的内容
java 路径路径的区分
weixin_33752045的博客
05-11 430
2019独角兽企业重金招聘Python工程师标准>>> ...
Java的路径讲解以及参数-cp的用法
不断成长的我
11-09 3096
ClassPathjava 是通过 java虚拟机来解释运行的, 也就是通过 java 命令。 javac 编译生成的 .class文件就是虚拟机要执行的代码,,称之为字节码(bytecode), 虚拟机通过 classloader来装载这些字节码, 也就是通常意义上的. 这里就有一个问题, classloader 从哪里知道 java 本身的库及用户自己的在什么地方呢? 或者有着缺省值(当
java设置路径_Java 什么是路径,该如何设置?
weixin_42352453的博客
02-13 1314
小编典典使用Java进行编程时,可以通过在源文件的顶部放置似的代码来使其他对正在编写的可用:import org.javaguy.coolframework.MyClass;或者有时你通过说“批量导入”内容:import org.javaguy.coolframework.*;因此,稍后在你的程序中你说:MyClass mine = new MyClass();Java虚拟机将知道在哪里可以...
Class.class获取包路径,路径
daimengs的博客
06-06 9826
 // 获取包路径 private static String getPackageName(Object obj) {  return obj.getClass().getPackage().getName(); } // 获取名 private static String getClassName(Object obj) {  return obj.getClass().getSimpleN...
JAVA路径
热门推荐
datouuupp的专栏
03-04 1万+
Java 路径Java 路径告诉 java 解释器和 javac 编译器去哪里找它们要执行或导入的(您可能注意到的那些 *.class 文件)可以存储在目录或 jar 文件中,或者存储在两者的组合中,但是只有在它们位于路径中的某个地方时,Java 编译器或解释器才可以找到它们。在 Windows 中,路径中的多个项是用分号分隔( ;)的,而在 UNIX 中,这些项是用冒号分隔( :)
路径读取(加载)配置文件
QQ1012421396的博客
03-18 7468
加载读取资源文件时路径问题 不管是java项目还是web项目,用路径读取配置文件通用性大,移植性好。如下: InputStream in = JdbcUtil.class.getResourceAsStream("/db.properties"); properties.load(in); 方式1:点 . 代表java的命令运行的目录(不推荐) 在java项目下, 点
s7-1200_plc_easy_plusv4.6
11-15
s7-1200_plc_easy_plusv4.6是西门子推出的一款简易易用的PLC编程软件,它能够与S7-1200系列PLC进行无缝集成,帮助用户轻松快速地进行工业自动化控制系统的编程和调试。该软件具有直观的界面和丰富的功能模块,使得初学者和专业工程师都能够轻松上手并高效完成工作任务。 s7-1200_plc_easy_plusv4.6具有强大的在线监视和调试功能,用户可以通过实时监控PLC的运行状态和变量数值,快速定位和修复程序中的问题。同时,该软件还支持多种编程语言,包括梯形图和结构化文本,用户可以根据自己的习惯和需求选择合适的编程方式。 除此之外,s7-1200_plc_easy_plusv4.6还提供了丰富的资源库和示例程序,用户可以快速找到所需的函数块和程序模板,以加快开发进度和降低错误风险。另外,该软件还支持与其他西门子自动化设备的无缝集成,如触摸屏、传感器和执行器等,为用户提供了更为便利的编程和控制体验。 综合来说,s7-1200_plc_easy_plusv4.6是一款功能丰富、操作简便的PLC编程软件,适用于各种规模的工业自动化项目,能够帮助用户提高生产效率、降低成本、提升产品质量。希望通过这款软件,用户能够更轻松地实现他们的自动化控制任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • 2个recordset合并_河北省合并村庄一览表,将5000村庄合并成1000个! 20670
  • 快速锁屏电脑快捷键_电脑锁屏快捷键,教你一键锁屏! 10975
  • mobaxterm mac版本_Snip,Mac上又一款免费好用的截图软件! 8163
  • 1万粉的小红书kol报价_小红书粉丝推广一次多少钱,小红书营销 5506
  • 点击延迟_Win10桌面点击右键延迟卡顿?两招解决! 5056

大家在看

  • Java高级架构师课程(总共133门课程,1580GB) 539
  • 零基础STM32单片机编程入门(二)GPIO详解及驱动LED灯实战含源码视频 1012
  • SP5271 XOINC - A Coin Game 题解
  • 五行优化算法-东方文化的魅力
  • 彩虹易支付系统原版开源源码_2024年6月 263

最新文章

  • fastdfs实现文件服务器,FastDFS:配置 Nginx FastDFS实现文件服务器(四)
  • 连不上虚拟机的mqtt服务器,【MQTT】在Ubuntu下搭建MQTT服务器
  • 七雄争霸手机版怎么登陆服务器未响应,七雄争霸手游
2021年162篇
2020年246篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

PHP网站源码坂田seo网站优化布吉网站制作惠州百姓网标王推广深圳seo排名石岩营销型网站建设大运关键词排名永湖营销网站罗湖网络推广同乐网站建设石岩百度关键词包年推广吉祥推广网站大芬百度网站优化排名福永网站开发荷坳营销型网站建设光明百度网站优化排名宝安模板推广同乐百度seo丹竹头网站推广方案福田阿里店铺运营吉祥建站广州网站推广工具东莞网页设计南澳网站seo优化福田SEO按天计费南澳网站优化排名同乐品牌网站设计南山网站优化软件木棉湾百搜标王大芬关键词排名大浪网络广告推广歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化