毕业了,从毕设答辩的前几周(6月初)到现在(7月中)又过了好久,这之间没学过一点东西。从6月初疯狂写论文、查重,到20号答辩,然后紧接着参加毕业典礼,然后又和同学告别,哪还有心思学习,嘻嘻。现在来到单位一周,想着整理下思绪吧。我发现软件这些知识,只要有一段时间没学习,就感觉特别生疏了。回到最初学习java的场景,追本溯源,思考下以前没怎么想过、现在如果不解决就浑身蓝瘦的问题。
1. 为什么我们在安装了JDK之后,在安装目录中会有两个版本的jre文件呢?
分别如下:
D:\Program Files\Java\jdk1.8.0_181\jre
D:\Program Files\Java\jre1.8.0_181
-
专用JRE
安装 JDK 时,会安装一个专用 JRE,并且您可以选择安装一个公共副本。需要专用 JRE 才能运行 JDK 中包含的工具。也就是说当你使用jdk时,它会使用jdk文件下的jre。专用 JRE 没有注册表设置,并且完全包含在仅对 JDK 已知的 Java 目录位置(通常位于 D:\Program Files\Java\jdk1.8.0_181\jre)中。 -
公共 JRE
公共 JRE 可由其他 Java 应用程序使用(这里的应用程序是指已经做好的软件,不是正在开发的字节码),并且包含在 JDK 外部(通常位于 D:\Program Files\Java\jre1.8.0_181)。公共 JRE 会注册到 Windows 注册表(位于 HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft)中。公共 JRE 可以使用“添加/删除程序”进行删除,并且还会注册到浏览器。
我们知道运行JAVA程序的时候,只需要适合用JRE就能够运行了,而并不需要使用JDK中的开发工具(如javac java等等),公共JRE就是为运行加载到计算机中的JAVA程序来提供运行环境的,也就是说,如果我们并不需要开发JAVA程序,而仅仅是运行他人的已有的JAVA程序的时候,仅仅安装这个在 JDK外部的JRE文件就足够了,但是如果我们需要开发JAVA程序,那么就必须安装JDK,JDK中包含专用JRE和开发工具,这些开发工具需要专用JRE才能够使用,也就说专用JRE是为我们开发JAVA程序准备的同时要注意,这两个JRE文件中的内容是有区别的,所以不能够简单的进行替换。注意平时所说的“java自动更新”根本不是所安装的JDK版本的更新,它指的是这个公用JRE运行时环境的更新,这个更新为的是让你的计算机能够使用最新版本正常的运行一些网站或则Web应用等等当中的java程序,如果不及时更新的话,可能我们在浏览一些网页或者web应用时,不能够正常的交互和显示,这与JDK没有任何的关系,很多人认为“java的自动更新”指的是JDK版本的自动更新,这就大错特错了。所以如果我们要想升级JDK的版本,只能够从官网中下载最新版本的JDK,重新安装。、
2. java安装目录下为什么有三个lib文件夹?
分别位于:
D:\Program Files\Java\jdk1.8.0_181\lib
D:\Program Files\Java\jdk1.8.0_181\jre\lib
D:\Program Files\Java\jre1.8.0_181\lib
经过验证,把servlet-api.jar包拷贝进入jdk下的jre下的lib下的ext目录后,import语句顺利通过编译!即:D:\Program Files\Java\jdk1.8.0_181\jre\lib\ext。其他从外部导入的jar包,都放在这个目录下。例如:在工程中导入mysql驱动jar包“mysql-connector-java-8.0.13.jar”也放在该目录下。
总结:
- JDK下的lib包括java开发环境的jar包,是给JDK用的,例如JDK下有一些工具,可能要用该目录中的文件。例如,编译器等。
- JRE下的lib只是运行java程序的jar包(这里类比外部jre),是为JVM运行时候用的。包括所有的标准类库,和扩展类。
- JDK下的JRE下的lib是开发环境中(这里类比jdk下的jre),运行时需要的jar包。最典型的就是导入的外部驱动jar包。因为编译时,系统找的是jdk下的jre。而不是最外层的jre。