原创

JDK那些事儿


JDK那些事儿

JDK(Java Development ToolKit),包含了Java运行环境(JRE)和开发工具(编译器,调试器,javadoc等)。

JDK 的版本

  • Sun JDK Oracle JDK 和 Open JDK

  • Sun JDK 是Sun公司还没被Oracle收购的时候 JDK名字的叫法
  • Oracle JDK 顾名思义是Oracle公司旗下的,而Open JDK 是Sun在2006年末把Java开源而形成的项目。Oracle JDK 和 Open JDK 主要区别在于:*OpenJDK采用GPL V2协议,而Oracle JDK则采用JRL协议。*二者虽然都是开放源代码的,但是在使用上的不同在于GPL V2允许在商业上使用,而JRL只允许个人研究使用;OpenJDK源代码不完整:这个很容易想到,在采用GPL协议的OpenJDK中,Oracle JDK的一部分源代码因为产权的问题无法开放给OpenJDK使用,其中最主要的部份就是JMX中的可选元件SNMP部份的代码;Open JDK只包含最精简的JDK(也就是说没有Oracle JDK Deployment(部署)功能:主要包括:Browser Plugin、Java Web Start、以及Java控制面板)

一张典型的JDK体系图

图片

一张典型的JDK目录结构图

图片

JDK 主要目录的作用:以Windows下 JDK8为例

  • bin:Java工具的可执行文件,包括: java、Java编译器javac、反编译.class文件javap、密钥管理工具keytool、Java文档工具javadoc等。
  • COPYRIGHT:版权信息。
  • LICENSE: 使用的协议信息。
  • db:JDK依赖的数据库。
  • include:.h头文件,C语言开发时用到的头文件。
  • lib: JDK依赖类库,经常看到的dt.jar和tools.jar在这个目录下。
  • src.zip:Java类库源码,包括了rt.jar库中的关键部分;除了Java类库,还包含了启动器(launcher)的源码(C语言实现)。
  • jre:Java运行环境。
  • jre8: JDK8 新增的 具体作用可不明(或参照jre?)
  • javafx-src.zip:JavaFx 的 Jar包源码,这是JDK8新增的。

Jre库大致包含了以下jar包

  1. resources.jar:资源包(图片、properties文件);
  2. rt.jar:运行时包;
  3. jsse.jar: Java 安全套接字扩展类库,用于实现加密的 Socket 连接
  4. jce.jar:Java 加密扩展类库,含有很多非对称加密算法在里面,但也是可扩展的。
  5. charsets.jar:Java 字符集,这个类库中包含 Java 所有支持字符集的字符
  6. dnsns.jar:与 DNS 有关
  7. localedata.jar:本地机器语言的数据,比如日期在使用中文时,显示的是“星期四”之类的
  8. sunjce_provider.jar:为JCE 提供的加密安全套件
  9. sunmscapi.jar,sunpkcs11.jar: PKCS#11 的证书工具
  10. 还有一些Jar不知道有什么作用就没细查了。

rt.jar 包 目录结构

对于我们来说 最熟悉的jar 莫过于这个了,也可以说是Java开发的基石。

图片

注:

  • java.* javax.* org.*:

  1. 作为J2SE的API公开接口的一部分,与操作系统无关可以在所有Java平台上运行;
  2. 不同的jdk版本会保持兼容不会轻易变化,提供API文档及源码(src.zip)。
  • sun.* jdk.* com.*:

  1. 不是API公开接口的一部分,调用这些包的程序并不能确保工作在所有Java平台上,不同的操作系统中的实现可能不相同。
  2. 不同的jdk版本这些包中的类也可能不定期的变化,因此这些包中的类没有提供API文档及源码。

总结:平台无关性是Java语言最大的优势之一,依赖于java.* javax.* org.*包的Java程序是不安全的,他们将变得无法移植、破坏了程序的平台无法性、也无法被JDK各版本所兼容,我们尽量少用就行了。

rt.jar 包 Java包目录结构

图片

  • java.applet: applet是运行在嵌入到网页 浏览器内的应用小程序,现在已经过时。
  • java.awt: Abstract Window ToolKit (抽象窗口工具包),java的GUI界面包,已经过时,官方都用JavaFx代替了。
  • java.beans: java bean操作相关的包,具体不太懂。
  • java.io: 输入/输出操作相关的包。包括文件类File,FileReader/FileWriter,InputStream/OutputStream等等。
  • java.lang: 听名字就很浪,java的基础包,包含了java开发的基础类和一些基本的方法。用这个包不需要导包。
  • java.math: 数学及科学计算相关的包,比较重要的类:执行任意精度整数 (BigInteger) 和任意精度小数(BigDecimal) 。
  • java.net: java网络通讯相关的包。比如socket,http连接HttpURLConnection等等。
  • java.nio: 面向缓冲区,non-blocking IO(非阻塞的IO)包,反正这个包很重要!
  • java.rmi:Java远程方法调用,即Java RMI(Java Remote Method Invocation),并不是通常意义上的RMI,如RPC框架,不太懂。
  • java.security:安全框架提供类和接口。通过该包中的Java实现,能够完成消息摘要算法的实现(消息摘要处理的MessageDigest、DigestInputStream和DigestOutputStream类),不太懂。
  • java.sql: JDBC相关包,用来连接数据库用的。
  • java.text: 用来提供类和接口处理文本、日期、数字和消息的方式独立的自然语言。比如说格式化日期、数字和消息,分析,搜索和排序字符串什么的。
  • java.time: (JDK8新增),包含了所有关于时钟(Clock),本地日期(LocalDate)、本地时间(LocalTime)、本地日期时间(LocalDateTime)、时区(ZonedDateTime)和持续时间(Duration)的类。这个挺重要的。
  • java.util: Java 工具包,这个包就厉害了。包含 collection集合、事件模型、日期和时间设施、国际化和各种实用工具类(正则表达式,解压缩。。。)反正这个包巨重要。

rt.jar 包 Javax包目录结构

图片

  • 说一下自己认识的,其他的就跳过了。

  • javax.annotation: java 原生注解相关的包。
  • javax.imageio:Java 图像 I/O API 的主包。比如我们后台生成的验证码写出到浏览器
  • javax.jws: JDK 自带 JAX-WS(JWS)发布WebService的包,好像现在也没人用了。
  • javax.management: JNDI( Java Naming and Directory Interface )相关包,Java平台的一个标准扩展,提供了一组接口、类和关于命名空间的概念。JDNI是provider-based的技术,暴露了一个 API和一个服务供应接口(SPI)。 具体不太懂。
  • javax.net: 作用基本同java.net包,不过区别在于提供了安全套接字协议 SSL(Secure Socket Layer) 相关包。
  • javax.print: Java打印功能包之一,但是基本没用过。
  • javax.rmi: 作用基本同java.rmi包,区别在于也实现了SSL协议。
  • javax.script: Java与JavaScript交互的包,基本没用过。
  • javax.security: 作用基本同java.security,具体不太懂。
  • javax.sql: 升级版java.sql包,引入了新的JDBC新的特性。
  • javax.swing: 轻量级java.awt包,已过时,JavaFx都没啥人用你还指望别人用这个?
  • javax.xml: Java与XML交互的基础包,现在用的少了。

总的来看,rt.jar包里面有很多过时以及基本上用不到的包。java包是比较老一点的包,javax包是新一点的包,里面的大多数包都是java包里面的升级版或者轻量级。真正开发用到的也就那几个核心的包。

  • 核心

  1. java.io

  2. java.lang

  3. java.net

  4. java.util

  • 常用

  1. java.sql

  2. java.text

  3. java.nio

  4. java.time(新)

  5. java.math

  6. javax.imageio

  7. javax.sql

  8. javax.annotation

java
基础
  • 作者:管理员(联系作者)
  • 发表时间:2020-03-19 10:27
  • 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
  • 公众号转载:请在文末添加作者公众号二维码
  • 微信公众号

    评论

    留言