最近查看JDK源码时,无意间发现几个类在陌生包:com.sun.*、sun.*、org.*。
一.jre库包含的jar文件
以jdk1.6为例,有resources.jar、rt.jar、jsse.jar、jce.jar、charsets.jar、dnsns.jar、localedata.jar等共10个jar文件,其中resource.jar为资源包(图片、properties文件);rt.jar为运行时包,子包结构如下图:
二.java.*、javax.*包,org.*包
1.作为J2SE的API公开接口的一部分,与操作系统无关可以在所有Java平台上运行;
2.不同的jdk版本会保持兼容不会轻易变化,提供API文档及源码(src.zip)。
三.sun.*包
1.不是API公开接口的一部分,调用sun包的程序并不能确保工作在所有Java平台上,不同的操作系统中的实现可能不相同。
2.不同的jdk版本sun包中的类也可能不定期的变化,因此sun.*包中的类没有提供API文档及源码。
注意:平台无关性是Java语言最大的优势之一,从技术上讲,并不能防止你的程序调用sun.*包中的类。在JDK版本的变迁当中,这些类可能会被删除或转移到其它包路径下,而且它的接口(包括名称、标签等)也很有可能发生变化,在这种情况下,即便你希望程序仅仅运行在SUN的实现平台下,你仍将承受新的版本给你的系统带来破坏的风险。总之,编写依赖于sun.*包的Java程序是不安全的,他们将变得无法移植、破坏了程序的平台无法性、也无法被JDK各版本所兼容。
四.sun.*包中的类如何查看源码
1.如果只是查看单个类源码,推荐一个网站进行搜索查看,可以很方便的查看API及源码,网站地址:http://www.docjar.com/
2.如果希望在Eclipse中关联源码,可以下载的Open JDK,从中获取sun源码包,下载地址:
Open JDK6:http://download.java.net/openjdk/jdk6/
Open JDK7:http://download.java.net/openjdk/jdk7/
Open JDK8:http://download.java.net/openjdk/jdk8/