网站菜单

Java中的rt.jar包

Java / JDK / JRE中的rt.jar是什么? 为什么重要?

rt.jar代表runtime JAR

并且包含引导类(bootstrap classes)——来自Core Java API的所有类。

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是一个类似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包中指定的内部类。
rt.jar包下的目录
在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在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目录中。

  • 转载于Google

相关推荐

JDK1.8(六) 反射

(一)什么是反射 除了基本类型外,所有的数据类型全部都是class 因此,每加载一个Class,就会创建一个实例对象,而一个Class实例中就记录了这个对象的所有信息。包括接口,所有方法,字段,父类等…

JDK1.8(五) 断言与日志

(一)断言 断言的作用: 断言(Assertion)是一种调试程序的方式。在Java中,使用assert关键字来实现断言。 断言可以用于开发和调试阶段: assert x >= 0 : &quo…