java中rt.jar详解

什么是rt.jar?

rt.jar代表runtime JAR,并且包含引导类(bootstrap classes)——来自Core Java API的所有类。很多Java开发都不知道什么是rt.jar?经常混淆rt.jar文件的作用,或疑惑在Java中为什么使用rt.jar文件?

Windows和Linux中,rt.jar位于JRE的lib目录下。JDK 1.7之前,MacOSX中叫classes.jar,从Java 7开始也改为rt.jar。很多开发尝试把自己的类放进rt.jar中,来解决与类路径相关的问题,但最好不要这样做,因为rt.jar包含了JVM信任的class文件,JVM加载时不会对其他class文件进行严格的安全检查。

在本文中,我们将讨论与rt.jar相关的内容。对刚接触Java而且不熟悉JAR文件的开发来说,rt.jar是一个类似zip的压缩文件,精确称为“Java archive”(Jar),存储了Java class文件和程序所需的全部资源。它还可以包含mainfest文件,还可以包含Main-Class条目,变成可执行JAR,使用java -jar命令来运行。

  • rt.jar代表runtime,包含所有核心Java 运行环境的已编译calss文件。
  • 必须在类路径中包含rt.jar,否则您无权访问核心类,例如 java.lang.String,java.lang.Thread,java.util.ArrayList或java.io.InputStream等,以及所有Java API中的其他类。 可以使用IDE打开并查看rt.jar中的内容, 它不仅包含所有Java API,还包含com包中指定的内部类。

 

  • 在windows中,rt.jar位于$ JAVA_HOME / jre / lib下。 即使没有安装JDK并且只安装JRE,也会在完全相同的位置看到它,在$ JAVA_HOME / lib目录中找不到rt.jar。 顺便提一句,在MacOSX上,它被称为classes.jarand,位于/ System / Library / Frameworks // Classes目录下。 下面的截图中,可以看到rt.jar位于Windows 中JRE的lib目录中。
  • rt.jar是所有Java包所在的位置。例如,需要从java.util.concurrentpackage引用类,比如 ConcurrentHashMap,JVM会从rt.jar中查找它,从而使程序能够正确运行。
  • 另一个Java开发常问的问题,在哪里可以找到rt.jar中包含的类的源码呢?安装了JDK的可以在$ JAVA_HOME / src.zip文件中找到所有源码。BTW,sun.* 源码也包含在src.zip中,但这是专有的闭源Oracle代码。 建议在Eclipse中添加这个JAR文件,只需键入Ctrl + T和类名就可以查看任何JDK类的源码,其余部分将由Eclipse的Java类型搜索功能处理。
  • 关于rt.jar一个很重要的事就是,JVM知道这个JAR文件中的所有类,这意味着JVM在从任何位置加载时都不会执行检查。 之所以这样做是由于各种性能原因,这就是为什么这些class由bootstrap或primodial类加载器加载的原因。 所以最好不要尝试将自己类文件包含在rt.jar中,Java官方也不建议这样做。
  • 如果对Java平台使用的不同二进制文件和JAR文件感到好奇,看下图,JDK有三个主文件夹bin,lib和jre。 bin目录包含所有二进制文件,可执 java.exe运行Java程序,javac.exe编译Java程序。lib目录包含tools.jar和dt.jar。 jre文件夹中也包含了bin和lib目录。 rt.jar就在这里的lib目录中。 BTW,如果想全面理解每个文件和文件夹的功能,请查看Oracle官方介绍,非常全面和具体。
  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值