Java中使用com.sun相關jar包出現編譯錯誤,但是運行沒有錯誤的解決方法和原因


【解決方法】
如果你用的是Eclipse
在preference->java->complier->errors/warning->deprecated and restricted API把 Forbidden reference 的Error改成warning 即可

【原因】
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程序是不 安全的,他們將變得無法移植,無法被很好地支持。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM