`
TonyLee0329
  • 浏览: 31262 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

为什么JDK中没有sun.*的类

阅读更多
J2SE API Documents是我们最常用的参考手册,但细心的朋友可能会发现,在“%JAVA_HOME%jrelib t.jar”中包含比API文档更多的类,那么其它的类为什么没有在帮助文档中出现呢?在SUN的JDK FAQ中有一篇“Why Developers Should Not Write Programs That Call ´sun´ Packages”,该文部分地解答了这个问题,我将原文翻译如下

================================================================================

J2SE中的类大致可以划分为以下的各个包:
java.*,javax.*,org.*,sun.*
除了“sun”包,其它各个包都是Java平台的标准实现,并且今后也将被继续支持。一般说来,“sun”之类的包并不包含在Java平台的标准中,它与操作系统相关,在不同的操作系统(如Solaris,Windows,Linux,Mac等等)中的实现也各不相同,并且可能随着J2SE版本不定期变化。因此,直接调用“sun”包的程序代码并不是100%的Java实现。也就是说:
“java.*”包,“javax.*”包,“org.*”包是作为J2SE的API公开接口的一部分,如果程序直接调用这些包中的API,那么程序是可以运行在所有Java平台上,而与操作系统无关;但“sun.*”包并不是API公开接口的一部分,调用“sun”包的程序并不能确保工作在所有Java平台上,事实上,这样的程序并不能工作在今后的Java平台上。
正因为如此,“sun.*”包中的类并没有提供API文档。平台无关性是Java语言最大的优势之一,此外,SUN和Java许可证确保维持了今后API的向上兼容性(以后修改的那些有严重bug的代码除外)。这种兼容性意味着你写好的程序编译成的cl ass文件仍然可以工作在将来的版本当中。
每家实现Java平台的厂商都可以使用他们自己的方式。“sun.*”包中的类是SUN 对Java平台的实现方式,它们工作在Java 2 SDK的下层,这些类未必被其它Java 平台开发商支持。比如你的Java程序如果调用了一个名为“sun.package.Foo”的类,将有可能产生“ClassNotFoundError”的错误,同时你也将失去利用Java的一个主要的优点。
从技术上讲,并不能防止你的程序调用“sun.*”包中的类。在版本的变迁当中,这些类可能会被删除或转移到其它包路径下,而且它的接口(包括名称、标签等)也很有可能发生变化,(根据SUN的观点,我们应当能够通过对“sun.*”包的修改来提高Java平台的性能。)在这种情况下,即便你希望程序仅仅运行在SUN的实现平台下,你仍将承受新的版本给你的系统带来破坏的风险。总之,编写依赖于“sun.*”包的Java程序是不安全的,他们将变得无法移植,无法被很好地支持。
分享到:
评论

相关推荐

    JDK8中sun.misc下UnSafe类源代码 UnSafe.java

    《深入解析JDK8中的sun.misc.UnSafe类》 在Java编程中,sun.misc.UnSafe类是一个非常特殊的存在。这个类在JDK8中扮演着一个核心的角色,它提供了对Java语言规范中未公开的底层操作的访问。尽管UnSafe类并非设计为...

    JDK8中sun.misc包下的UnSafe类

    JDK8中sun.misc包下的UnSafe类,想查看源码的就拿走,没积分的请与我联系!xtfggef@gmail.com

    jdk sun 开头的源码

    在JDK中,"sun"开头的源码包是Oracle(原Sun Microsystems)公司提供的核心API,它们包含了Java平台的许多底层实现,这些源码对于深入理解Java的内部机制至关重要。 "sun"前缀的源码主要涉及以下几个关键领域: 1....

    sun.misc.BASE64Decoder和sun.misc.BASE64Encoder不可用已解决

    冲浪后发现JDK中的lib\tools.jar和JRE中的lib\rt.jar已从Java SE 9中删除,也就是1.8版本后的jdk已经不再支持sun.misc.BASE64Decoder和sun.misc.BASE64Encoder。 这些JAR中可用的类和资源现在以文件中的内部格式存储...

    sun.io.CharToByteConverter支持类

    项目工程中用到jdk1.6相关方法,可以使用,但是升级到jdk1.8以后,编译出现java.lang.NoClassDefFoundError: sun/io/CharToByteConverter错误,后经查询,是jdk1.8版本中已经从sun.io.*中进行去除。网上找来了相关...

    jdk源代码src.zip

    《深入解析JDK8源代码:src.zip中的编程智慧》 在编程的世界里,Java Development Kit(JDK)是开发者的重要工具,它包含了Java运行环境和开发所需的各种库。JDK8作为Java的一个里程碑版本,引入了许多创新特性,如...

    sun java jdk

    随着Java技术的不断发展,Sun Java JDK也在不断地更新和完善,为开发者提供了更加高效、强大的开发工具。 #### 七、社区支持 Sun Java JDK除了官方文档外,还得到了广泛的社区支持。开发者可以通过各种论坛、博客...

    jdk-11.0.20-windows-x64-bin.exe

    10. **JEP 327:废弃 sun.* 包**:进一步减少了对非公开API的依赖,提醒开发者避免使用`sun.*`包中的类和方法,以保证代码的稳定性和兼容性。 11. **JEP 328:改进Javadoc**:Javadoc工具的改进,包括支持HTML5元素...

    jdk1.6 源码(包括sun公司实现的代码)

    Java Development Kit (JDK...综上所述,JDK 1.6的源码不仅揭示了Java平台的内部工作机制,也为开发者提供了一个深入学习Java、提升编程技巧的宝贵资源。通过研究这些源码,开发者可以更好地理解和利用Java的强大功能。

    jdk1.8源码包含sun

    《深入解析JDK1.8源码中的"sun"包》 在Java开发领域,对JDK源码的深入理解是提升技术能力的关键步骤。JDK1.8作为广泛使用的版本,其源码包含了丰富的实现细节,特别是"sun"包,它承载了许多核心功能和内部实现。...

    JDK源码(sun包)

    "sun"包是Oracle JDK中的一个内部包,包含了许多核心的Java系统类和接口,这些类和接口负责实现Java平台的基础功能。虽然在JDK 9及以后的版本中,sun包被标记为非公开和不推荐使用的,但在早期版本如JDK 1.5中,它对...

    JAVA8 完整源码(包含Sun包源码)jdk8u-src.7z

    自己准备的JAVA8 完整源码(包含Sun包源码),120M大小的,jdk自带src.zip大小为20M,包括sum.misc.*包内的源码。这个用7z打包后13.3M大小。 源码源自:https://github.com/openjdk-mirror/jdk.git的jdk8u/jdk8u/...

    JDK7源码 包含rt.jar包下的 sun包源码 sun.security包等源码

    在JDK7中,`sun.security`包涉及到了SSL/TLS网络通信的安全性、JCE(Java Cryptography Extension)的实现、JKS(Java Key Store)以及证书处理等关键功能。通过阅读这些源码,开发者可以深入了解Java如何处理网络...

    JDK_8.0.1310.11_32bit

    根据提供的标题、描述、标签及部分内容,我们可以了解到本主题主要关注的是Java Development Kit(Java开发工具包)版本为8.0.1310.11的32位版本(简称JDK 8 32位)。下面将详细介绍与该版本相关的知识点。 ### 一...

    com.sun.crypto.provider.SunJCE----jar包

    这个类是Java加密扩展(Java Cryptography Extension, JCE)的一部分,由Sun Microsystems(现已被Oracle收购)提供。SunJCE是Java平台标准版(Java SE)的一个服务提供者,它实现了多种加密算法,包括对称加密、非...

    javax.xml.bind jdk1.5缺包

    具体来说,异常信息 "java.lang.ClassNotFoundException: com.sun.xml.bind.v2.ContextFactory" 显示在尝试创建`com.sun.xml.bind.v2.ContextFactory`类的实例时,该类的定义没有在运行时环境中找到。这通常是由于...

    bcprov-jdk16-143.jar和bcprov-jdk15-135.jar

    在jdk中的jre\lib\security修改java.security文件, security.provider.6=com.sun.security.sasl.Provider 下面添加 security.provider.7=org.bouncycastle.jce.provider.BouncyCastleProvider 在\jre\lib\ext中...

    jdk1.8源码,包含sun包

    虽然官方JDK 1.8的源码中不包含`sun.*`包,但通过特定渠道获取这些源码可以帮助开发者理解Java的内部工作机制,比如垃圾收集、类加载器等。然而,除非必要,一般不推荐直接使用`sun.*`包中的类,因为它们的API可能不...

    jdk1.8 sun源码

    在JDK 1.8版本中,虽然已经包含了大部分核心类库的源代码,但某些特定的Sun Microsystems(后被Oracle收购)实现的内部类或模块,如JNI(Java Native Interface)和一些性能优化的代码,通常并不公开。这些内部实现...

    jdk1.8.0src.zip

    JDK 1.8.0是Java开发工具包的一个重要版本,它包含了丰富的类库和API,为开发者提供了强大的编程支持。src.zip文件是JDK源码的压缩包,对于理解和学习Java语言的内部工作原理至关重要。如果在开发过程中无法查看源码...

Global site tag (gtag.js) - Google Analytics