为什么程序员不应调用“sun”包?
2011-11-21 16:55
633 查看
J2SE API Documents是我们最常用的参考手册,但细心的朋友可能会发现,在“%JAVA_HOME%\jre\lib\rt.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的一个主要的优点。
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基础-Java-编程开发
- 为什么程序员不应调用“sun”包?(译文)
- 为什么程序员不应调用“sun”包?支持包的类别
- 从JDK 1.7开始,java程序员不能够调用JDK系统包中以sun开头引入的类
- 从JDK 1.7开始,java程序员不能够调用JDK系统包中以sun开头的类
- 为什么流行程序员35岁定律,我说干一辈子没问题
- scjp(sun 认证 java 程序员),下面来谈谈我的复习方法
- 为什么调用glPushMatrix()和glPopMatrix()
- TWinControl.DefaultHandler里的CallWindowProc(FDefWndProc)还挺有深意的,TButton对WM_PAINT消息的处理就是靠它来处理的(以前不明白为什么总是要调用inherited,其实就是没有明白TWinControl.DefaultHandler的真正用处,而且还很有用)
- 为什么程序员不擅长估算时间?
- 为什么程序员应该少写代码
- 为什么说伊利丹是程序员?
- 为什么有些程序员会觉得自己已经很厉害了呢?
- 为什么要用索引,索引怎么使用,怎么查看索引被调用了?
- 为什么调用glPushMatrix()和glPopMatrix()
- 为什么调用 FragmentPagerAdapter.notifyDataSetChanged() 并不能更新其 Fragment?
- 程序员为什么不写单元测试?
- 为什么优秀的程序员既懒又笨程序员