自从2017年jdk9发布以来,JPMS似乎成了标配,但之后已经出了两个LTS版本(11和17),jdk8依然很坚挺,我想为什么jdk8还能如此盛行,各种缘由离不了JPMS,JPMS出来这么久我都没听说过rt.jar,我很惭愧,所以我想乘着JDK8盛行之时好好撸一撸它,只怕:此情可待成追忆,只是当时已惘然。

我要搞清楚的问题:

  • 什么是rt.jar?为什么要撸它。

一、什么是rt.jar?为什么要撸它。

rt.jar的存在由来已久,甚至可以追溯到它起源的时候,至少我知道的JDK7和8是有它的。

我之所以会忽略它,是因为我只关心源码的类和包,比如String类在java.lang包下。

rt.jar代表运行时jar(runtime.jar),包含引导类,我指的是来自核心JavaAPI的所有类。我发现很多Java程序员不知道什么是rt.jar?而且经常会被rt.jar文件的角色弄糊涂,或者为什么我们在Java中使用rt.jar文件?毫不奇怪,这个名字有点神秘。该文件始终位于JRE的lib目录中,至少在Windows和Linux中是这样。在MacOSX中,它位于不同的位置,也有不同的名称,即classes.jar,但这只是在JDK1.7之前。从Java7发布以来,苹果已经停止了Java的分发,如果您单独安装,它将与rt.jar同名。

许多开发人员认为将他们的类包含在rt.jar中以解决与类路径相关的问题,但这不是一个好主意。千万不要弄乱rt.jar,它包含JVM信任的类文件,并且在加载时没有对其他类文件进行严格的安全检查。

在本文中,我们将从Java世界了解一些关于这个神奇罐子的有趣的事情。对于那些不熟悉JAR文件的Java新手来说,JAR文件是一个类似zip的文件,确切地说是Java归档文件,它存储Java类文件和程序所需的任何资源。它还可以包含一个清单文件,其中可以包含使其成为可执行JAR的主类条目,可以使用java -jar命令运行该文件。

Java中关于rt.jar的要点

1.jar代表runtime,包含核心Java运行时环境的所有编译类文件。

2.您必须在类路径中包含rt.jar,否则您无法访问核心类,例如java.lang.String、java.lang.Thread、java.util.Array List或java.io.Input Stream以及java API中的所有其他类。通过使用Win-RAR或Win-Zip客户端打开rt.jar,您实际上可以看到它内部的内容。您可以看到,它不仅包含所有JavaAPI,还包含com包中指定的内部类。

3.在windows中,rt.jar将始终位于$JAVA_HOME/jre/lib下,其中$JAVA_HOME表示JDK安装目录。即使您不安装JDK而只安装JRE,您也会在完全相同的位置看到它,在$JAVA_HOME/lib目录中找不到rt.jar。顺便说一句,在MacOSX上它被称为classes.jar,位于/System/Library/Frameworks//classes目录下

在下面的屏幕截图中,您可以看到rt.jar位于Windows10中JRE的lib目录中。

4.rt.jar是所有Java包所在的位置。例如,如果类文件需要引用java.util.concurrent包中的类,例如concurrentHashMap,那么JVM将在rt.jar中查找它,从而使它能够正确运行。

5.Java程序员要问的另一个问题是,在哪里可以找到rt.jar中包含的类的源代码?好的,如果您安装了JDK,而不是JRE,那么您可以在$JAVA_HOME/src.zip文件中找到所有源代码。顺便说一句,sun.*源代码也包含在src.zip中,但这是Oracle专有的封闭源代码。我还建议您在Eclipse中包含这个JAR文件,这样您只需键入Ctrl +T和类名就可以查看任何JDK类的源代码,其余的将由Eclipse的Java类型搜索功能来处理。

6.关于rt.jar最重要的一点是,JVM知道这个jar文件中的所有类,这意味着JVM不会在从任何其他位置加载任何其他jar时执行所有检查。这是由于各种性能原因造成的,这就是为什么这些类由引导或原始类加载器加载。不要试图在rt.jar中包含类文件,因为Java不建议这样做。它也会损害任何安全性。

7.如果您对Java平台使用的不同二进制文件和JAR文件感到好奇,请查看此图。您可以看到JDK有三个主要文件夹bin、lib和jre。bin目录包含所有二进制可执行文件,例如运行java程序的java.exe、编译java程序的javac.exe等。lib包含tools.jar和dt.jar。jre文件夹再次包含bin和lib目录。它位于这个lib目录rt.jar中。

顺便说一下,要完整解释这些文件和文件夹的作用,请查看Oracle的官方页面。它们是非常全面和描述性的。

这就是Java中rt.jar文件的全部内容。现在您知道rt.jar的目的是什么,以及为什么不应该弄乱它。您可以在$JAVA_HOME/jre/lib目录中找到这个JAR文件,我鼓励您自己查看。

JDK8盛行之时,我却连rt.jar都不知道在哪?相关推荐

  1. 第98讲:使用SBT开发时动手解决rt.jar中CharSequence is broken等问题学习笔记

    第98讲:使用SBT开发时动手解决rt.jar中CharSequence is broken等问题学习笔记 几乎所有从IDEA官网上下载安装在win上,采用默认方式自动运行的都 会遇到这个问题. er ...

  2. Access restriction required library rt.jar

    在JAVA项目开发中,使用到了BASE64Decoder,但编辑运行时却会出现以下错误:Access restriction required library rt.jar,这里就详细的说明一下如何解 ...

  3. Maven 编译使用 rt.jar

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/catoop/article/details/63251628 项目在使用mvn clean pack ...

  4. Dockerfile文件创建centos:7,配置JDK8的环境变量,与运行springboot的jar包,的镜像

    DockerFile文件创建centos:7 配置JDK8的环境变量 与运行springboot的jar包 准备文件 一:官网下载Linux的JDK包 https://www.oracle.com/j ...

  5. java string rt_如何使jvm加载我的java.lang.String而不是rt.jar中的那个

    我认真研究了Java类加载器.现在,我想编写一个与rt.jar中的类之一具有相同的包名称和类名称的类.例如,我自己编写一个java.lang.String类,以及如何打破父级委托模型以使jvm加载我的 ...

  6. Jmeter读取Excel,BeanShell取样器调用rt.jar和jxl.jar

    将rt.jar和jxl.jar,放在\apache-jmeter-5.0\lib\ext下面 import java.io.*; import java.util.ArrayList; import ...

  7. 解决IEDA编译java项目出现 library root ,编译缺少 rt.jar jce.jar

    解决IEDA编译java项目出现 library root ,编译缺少 rt.jar jce.jar 问题 编译项目时,提示找不到rt.jar,编译添加后,出现缺少jce.jar,maven依赖项显示 ...

  8. php上传图片限制类型,php,_使用php的图片上传类进行图片上传,总是提示:上传文件时出错 : 未允许类型 。都是默认的配置,php - phpStudy...

    使用php的图片上传类进行图片上传,总是提示:上传文件时出错 : 未允许类型 .都是默认的配置 使用php的图片上传类进行图片上传,总是提示:上传文件时出错 : 未允许类型 .都是默认的配置 $upl ...

  9. 构造方法与重载:定义一个网络用户类,信息有用户 ID、用户密码、 email 地址。在建立类的实例时把以上三个信息都作为构造函数的参数输入

    构造方法与重载:定义一个网络用户类,信息有用户 ID.用户密码. email 地址.在建立类的实例时把以上三个信息都作为构造函数的参数输入, 其中用户 ID 和用户密码时必须缺省时 email地址是用 ...

最新文章

  1. 工业机器人原来可以这么酷,马斯克和中国美的都对它青睐有加
  2. 计算机机房规范管理,计算机中心机房建设及管理规范.doc
  3. 将pdf转为html,使用pdfdom将pdf转为html
  4. 重温java中的String,StringBuffer,StringBuilder类
  5. SELECT ANY DICTIONARY
  6. 免费的FTP linux 服务器中文,linux ftp服务器的搭建和中文字体乱码的解决
  7. SAP Spartacus如何为不同的environment设置不同的baseUrl
  8. java source folder作用_java项目把源码放到folder里,不是source folder,这个java代码还能被调用吗?...
  9. 大数据-MapReduce计算框架
  10. oracle rac升级补丁及中间的错误提示
  11. Ubuntu系统挂载U盘
  12. matlab中xlsread无法打开文件,Matlab xlsread打开文件并清理
  13. Idea复制文件一直updating indices
  14. 虚拟机VMware安装Windows7保姆级教程
  15. centos使用xfreerdp登录报错
  16. 2021直播电商下半场,“网易严选们”为何成主播良港?
  17. 如何Troubleshooting当Java Application发生死锁或Hangs
  18. 【Java】Java中的常用工具类(排名前 16)
  19. 张志华-统计机器学习-随机变量
  20. 差商近似1阶导数matlab,常微分方程的解法 (一): 常微分方程的离散化 :差商近似导数、数值积分方法、Taylor 多项式近似...

热门文章

  1. php textarea 默认值,html中的textarea属性大全(设置默认值 高度自适应 获取内容 限制输入字数 placeholder)...
  2. 3分钟告诉你,智能弱电为啥要学云计算!
  3. [音乐] The Mass(魔界传奇) (转)
  4. android vsync,Android vsync
  5. yanshee机器人代码
  6. 采用JSPGenCMS实现12380举报网站管理
  7. java控制pdf大小吗_Wicked_PDF / wkhtmltopdf不同控制器中pdf的不同字体和页面宽度大小...
  8. 报错 DOTWEEN ► Max Tweens reached: capacity has automatically been increased from 200/50 to 500/50.
  9. JAVA运算符与循环结构
  10. 低代码,是个伪命题吗?