为什么程序员不应调用“sun”包?-Java基础-Java-编程开发

解析JDK1.8中隐藏的“sun“包源码秘密 在JDK1.8的源码中,“sun”包是一个特殊的存在,它并非Java标准API的一部分,而是Sun公司为了提供Java平台的一些底层实现和特定功能而设计。这些包通常属于非公开API,没有稳定的保证,但它们在一些特定场景下提供了不可或缺的作用。反射API主要集中在包中。该包中提供了以下几类组件:Class:表示一个类的类型信息,是反射的起点。Field:表示类的字段信息,用于获取和设置字段的值。Method:表示类的方法信息,用于获取方法描述符、参数类型、返回类型以及执行方法。 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

J2SEAPIDocuments是我们最常用的参考手册,但细心的朋友可能会发现,在“%JAVA_HOME%/jre/lib/rt.jar”中包含比API文档更多的类,那么其它的类为什么没有在帮助文档中出现呢?在SUN的JDKFAQ中有一篇“WhyDevelopersShouldNotWriteProgramsThatCall'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的代码除外)。这种兼容性意味着你写好的程序编译成的class文件仍然可以工作在将来的版本当中。

每家实现Java平台的厂商都可以使用他们自己的方式。“sun.*”包中的类是SUN对Java平台的实现方式,它们工作在Java2SDK的下层,这些类未必被其它Java平台开发商支持。比如你的Java程序如果调用了一个名为“sun.package.Foo”的类,将有可能产生“ClassNotFoundError”的错误,同时你也将失去利用Java的一个主要的优点。

从技术上讲,并不能防止你的程序调用“sun.*”包中的类。在版本的变迁当中,这些类可能会被删除或转移到其它包路径下,而且它的接口(包括名称、标签等)也很有可能发生变化,(根据SUN的观点,我们应当能够通过对“sun.*”包的修改来提高Java平台的性能。)在这种情况下,即便你希望程序仅仅运行在SUN的实现平台下,你仍将承受新的版本给你的系统带来破坏的风险。总之,编写依赖于“sun.*”包的Java程序是不安全的,他们将变得无法移植,无法被很好地支持。

全面掌握Java编程与Sun认证:经典教材11本 本文还有配套的精品资源,点击获取 简介:这套书涵盖了Java编程和Sun Microsystems(现Oracle)的认证考试重点,旨在帮助Java开发人员备考并通过Sun的Java认证,提升专业技能。书籍内容包含分布式编程、JavaBeans、JSP技术、以及针对Sun Certified Java Programmer考试的复习材料,适合希望在Java领域建立扎实基础的... 阅读详情

相关推荐

避开SiC MOSFET驱动设计的3个大坑:电流/电阻/电压配置全指南

本文深入解析SiC MOSFET驱动设计中的三大关键参数:驱动电流、栅极电阻和工作电压,揭示常见设计误区与优化方案。通过实际案例与数据对比,指导工程师避开第三代电力电子半导体应用中的典型陷阱,提升系统可靠性与效率。特别针对驱动电源配置、栅极电阻选型等核心问题提供可落地的解决方案。

weixin_29214199的博客 385

为什么程序员不应调用“sun”包?

J2SE API Documents是我们最常用的参考手册,但细心的朋友可能会发现,在“%JAVA_HOME%\jre\lib\rt.jar”中包含比API文档更多的类,那么其它的类为什么没有在帮助文档中出现呢?在SUN的JDK FAQ中有一篇“Why Developers Should Not Write Programs That Call 'sun' Packages”,该文部分地

blueling51的专栏 2294

基于halcon的HSV颜色匹配实例

HSV颜色识别原图代码结果 原图 代码 dev_update_off () dev_close_window () *颜色数组 FuseColors := ['Orange','Red','Blue','Yellow','Green'] *画笔颜色数组 DisplayColors := ['coral','red','blue','goldenrod','forest green'] * HSV模型中H分量: Orange 10-30, Red 0-10,Blue 125-162,Yellow 3

qq_39467811的博客 3544

为什么程序员不应调用“sun”包?(译文)

jungleford如是说J2SE API Documents是我们最常用的参考手册,但细心的朋友可能会发现,在“%JAVA_HOME%/jre/lib/rt.jar”中包含比API文档更多的类,那么其它的类为什么没有在帮助文档中出现呢?在SUN的JDK FAQ中有一篇“Why Developers Should Not Write Programs That Call sun Package

Jungleford's Home 优快云 分舵 1278

应急响应之windows日志分析工具logparser使用

windows日志分析工具logparser使用介绍

u013930899的博客 8126

使用cartographer纯定位替换amcl定位

经过实际使用,发现cartographer定位对于重定位的表现比amcl好。如果机器人的起始位置离原点较远,amcl很难自行重定位到正确的位置,只能手动修改初始位置。然而cartographer定位的表现则很好,在行驶一段距离或原地旋转一段时间后能够正确重定位。

XJ_75的博客 8313

为什么程序员不应调用“sun”包?支持包的类别

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

pastora的专栏 1185

ResNet改进(51):基于轴向注意力机制的改进ResNet模型

本文介绍了一种结合轴向注意力机制的改进ResNet模型。 通过在传统CNN中引入轴向注意力,我们能够在保持计算效率的同时,增强模型对图像全局上下文的理解能力。这种混合架构结合了CNN的局部特征提取优势和注意力机制的全局建模能力,在图像识别任务中表现出色。 轴向注意力机制的应用不仅限于ResNet,也可以灵活地集成到其他CNN架构中。 未来可以探索更多注意力变体,或将其应用于特定领域任务,如医学图像分析、自动驾驶等需要精确空间理解的场景。 希望本文能帮助你理解如何将注意力机制与传统CNN结合,为你的计

2401_82355416的博客 359

为什么开发者写程序时不应该调用‘sun’包

为什么程序员不应调用“sun”包 J2SE API Documents是我们最常用的参考手册,但细心的朋友可能会发现,在“%Java_HOME%/jre/lib/rt.jar”中包含比API文档更多的类,那么其它的类为什么没有在帮助文档中出现呢?在SUN的JDK FAQ中有一篇“Why Developers Should Not Write Programs That Call

snakeytm的专栏 419

多周期路径约束(set_multicycle_path )

1.由慢到快的多周期约束 如下图所示,发射时钟周期是接受时钟周期的4倍。默认情况下,按照1T原则来进行静态时序分析和布局布线的。即建立时间是在发射沿后的第一个捕获沿检查,而保持时间是同一时刻下源时钟和捕获时钟的触发边沿下检查的(建立时间检查边沿的前一个触发沿)。 但是这样导致的问题就是该路径过于苛刻,为了满足这条路径的要求,不得不放弃其他路径。或者根本没办法保证这个默认的约束。总之最终造成...

Arist. 5507

【Mode Management】AUTOSAR架构下RH850-F1KM芯片深度休眠配置实践

AUTOSAR架构下RH850-F1KM芯片深度休眠配置实践

qq_36056498的博客 1091

Java程序员的认证--SUN认证

文章目录作用考试项目 导语:SUN认证是给网络设计界建立的一套认证标准,Sun公司推出了Java以及Solaris技术认证方案。 作用 对于企业而言,可以借助这项认证作为招聘人才的评判标准,或是作为衡量员工技术水准的依据;在个人方面,通过这些认证也可以证明个人的技术能力。 考试项目 Java认证考试 该认证主要面对Java程序员。同时,该认证是业界唯一经Sun授权的Java认证,考试内容涉及所有Java相关知识、编程概念及applet开发技巧。Sun认证Java程序员考试旨在观察您通过应用软件分配进行复杂编

Prince_96的博客 2381

基于Simulink的占空比调制DTC降低转矩脉动

修改传统SVPWM模块,输入占空比d和有效矢量索引,计算Ton​=d∗Tc​、Toff​=(1−d)∗Tc​,生成对称PWM波形(替代开关表直接输出)。:低速时(n<500rpm)减小dmax​=0.6(避免磁链畸变),高速时(n>2000rpm)增大dmax​=0.8(提升动态响应);kT​/kψ​:转矩/磁链误差增益(需整定,如kT​=0.02/(N⋅m),kψ​=0.1/Wb);(θ为电压矢量与磁链夹角)。② SVM-DTC(占空比计算模块启用,d0​=0.5,kT​=0.02,kψ​=0.1)。

amy_mhd的博客 87

java sun包无法引用_【转载】为什么不建议调用sun包,如何通过其他方法确定调用者...

获取调用者信息的方法一般的,我们可以通过堆栈信息获取调用当前方法的类名和方法名// 通过堆栈信息获取调用当前方法的类名和方法名String className = “”;String methodName = “”;Class clazz = null;StackTraceElement[] elements = new Throwable().getStackTrace();for (int i...

weixin_29285605的博客 721

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java程序员的认证Sun Certified JAVA Programmer(SCJP)

Java程序员的认证Sun Certified JAVA Programmer(SCJP) 课程:SL-275 JAVA语言编程    本课程使学员掌握如何使用标准JAVA Development Kit,V1.1 (JDK) 开发应用程序和applets。在本课程中您将学会JAVA 语言的语法。 如何使用JAVA 来创建图形用户接口 (GUI), 事件处理机制, 例外处理, 通过设计与开

y_navy的专栏 3715

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

java sun.audio包_解决import sun包时error

错误情景:import sun.net.dns.ResolverConfiguration;import sun.net.util.IPAddressUtil;编译器提示Error解决方案:如果你用的是Eclipse在preference->java->complier->errors/warning->deprecated and restricted API把 Forb...

weixin_42511255的博客 2507

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

参加Sun认证Java程序员_sun认证java程序员笔试经验

sun认证java程序员笔试经验SCJP测验Java程序设计概念及能力,内容偏重于Java语法及JDK的内容;SCJD则进一步测试用Java开发应用程序的能力,考试者必须先完成一个程序的设计方案,再回答与此方案相关的一些问题。下文是CN人才网小编整理的sun认证java程序员笔试经验,欢迎阅读参考!sun认证java程序员笔试经验如下:考试方式: 全英文试题,以电脑作答,在授权的Prometric...

weixin_30806145的博客 521

sun java认证考试大纲_sun认证java程序员考试大纲

sun认证java程序员考试大纲SUN认证对于企业而言,可以借助这项认证作为招聘人才的评判标准,或是作为衡量员工技术水准的依据。以下是小编整理的关于sun认证java程序员考试大纲,希望大家认真阅读!课程目标:通过学习该课程学员可以具有以下能力:1、 理解面向对象编程思想。2、 熟悉掌握运用Java进行面向对象的编程。3、 能够使用Java编程语言进行基于文本和图形界面的应用设计。4、 理解和掌握...

weixin_30768979的博客 233

Oracle为什么收购SUN公司浅谈

市场上的商用开发体系共分为四层,分别是操作系统,数据库,中间件和编程语言。Oracle一直视微软为竞争对手,为了完成对微软的对等体系竞争,所以在编程语言方面收购了SUN公司,将Java纳入自身旗下。这远比重新开发推广一门语言划算得多。(但千禧年后微软一直视谷歌为竞争对手)          体系结构             Oracle              Microsoft ...

ohmysweetheart的博客 7010

Sun 认证 Java程序员

如何实现“Sun 认证 Java程序员” 整体流程 journey title Sun 认证 Java程序员流程 section 开始 开始 --> 注册账号 section 实习 注册账号 --> 参加培训 section 考试 ...

weixin_32775495的博客 291

sun认证 java怎么考_Sun认证Java程序员考试技巧分享

SCJD则可以看做是高级的Java技术培训认证,其要求和难度都要高于SCJP,而且,如果你计划获得SCJD认证,须先获得SCJP认证资格。下面是小编整理的关于Sun认证Java程序员考试技巧分享,欢迎大家参考!1)Java 2 Plat Form考试科目是310-025,有59题,及格线是61%,即答对36题。考试时间是90分钟。特别令人厌恶的是考试前有个Agreement,连你读它的时间也被计算...

weixin_29498577的博客 2328

java sun包无法引用_为什么不建议调用sun包,如何通过其他方法确定调用者

获取调用者信息的方法一般的,我们可以通过堆栈信息获取调用当前方法的类名和方法名123456789101112131415// 通过堆栈信息获取调用当前方法的类名和方法名String className = "";String methodName = "";Class clazz = null;StackTraceElement[] elements = new Throwable().getSt...

weixin_35703897的博客 1372

java 8 sun包 源代码_java sun包下的源码

由于JDK的src.zip里面没有sun包的源码,所以要在IDEA里面查看sun包下的源码的时候只能看到通过反编译得到的代码,反编译得到的代码没有注释,而且很多局部变量名都变成了var1,var2这样子,看起来不太舒适。如果只是想随便看一看,可以直接在github或者OpenJDK上查看,但是这样看还是比较麻烦的,因为这样在网页上看不能像在IDE一样点击某个类然后跳转到某个类的源码。那么有没有办法...

weixin_39758048的博客 854
上一篇: 中国年历算法和程式-Java基础-Java-编程开发
下一篇: 一个中专生的程序员之路-Java基础-Java-编程开发
java169
博客等级 码龄18年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值