染
首页
分类
标签
归档
关于我
管理员
2020-03-19
1814
0
原创
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包
resources.jar:资源包(图片、properties文件);
rt.jar:运行时包;
jsse.jar: Java 安全套接字扩展类库,用于实现加密的 Socket 连接
jce.jar:Java 加密扩展类库,含有很多非对称加密算法在里面,但也是可扩展的。
charsets.jar:Java 字符集,这个类库中包含 Java 所有支持字符集的字符
dnsns.jar:与 DNS 有关
localedata.jar:本地机器语言的数据,比如日期在使用中文时,显示的是“星期四”之类的
sunjce_provider.jar:为JCE 提供的加密安全套件
sunmscapi.jar,sunpkcs11.jar: PKCS#11 的证书工具
还有一些Jar不知道有什么作用就没细查了。
rt.jar 包 目录结构
对于我们来说 最熟悉的jar 莫过于这个了,也可以说是Java开发的基石。
注:
java.* javax.* org.*:
作为J2SE的API公开接口的一部分,与操作系统无关可以在所有Java平台上运行;
不同的jdk版本会保持兼容不会轻易变化,提供API文档及源码(src.zip)。
sun.* jdk.* com.*:
不是API公开接口的一部分,调用这些包的程序并不能确保工作在所有Java平台上,不同的操作系统中的实现可能不相同。
不同的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包里面的升级版或者轻量级。真正开发用到的也就那几个核心的包。
核心
java.io
java.lang
java.net
java.util
常用
java.sql
java.text
java.nio
java.time(新)
java.math
javax.imageio
javax.sql
javax.annotation
java
基础
赞赏
支付宝
微信
作者:
管理员
(联系作者)
发表时间:
2020-03-19 10:27
版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
公众号转载:请在文末添加作者公众号二维码
评论
发布
目录
留言
评论