java类库的废弃API

java语言一直在进化,java类库也越来越庞大,给人的感觉是一直在做加法。

有没有做减法呢?当然也有,一些是设计失误需要撤回的,如可能引起线程安全问题的Thread.stop()等方法;还有是随着时代发展而被淘汰的,比如曾被寄予厚望的Applet。

java类库中这些废弃的内容有没有地方统一归档,方便我们的查找?假如我们要升级java版本,而找出当前代码中使用了哪些新版本废弃的API,就能让准备更加充分。

答案是有的。

java9之后的java API文档,贴心地单独为废弃的内容做了一个页面。如java 21版本对应的链接是 Deprecated List (Java SE 21 & JDK 21)。

顶上有个过滤功能,可以按特定版本来分别过滤该版本废弃了哪些,其中的others选项包含了11之前所有版本的废弃内容。

接下来是目录,根据类型分为接口、(非异常)类、异常类、字段、方法、常量、枚举常量这七种。而最上面的终将废弃( Terminally Deprecated),和下面的七种并不是并列关系,而是将下面七种类型中最终会被删除的部分提取(复制)出来,单独放在这里。

为什么这样做?因为废弃的含义分为两种,一种是后续版本要删除的(即终将废弃),如果你的代码使用了这样的API,如果后续升级类库,你的代码就可能无法通过编译。而另一种是不会删除的API,但不建议你使用,后续版本也会保留,升级类库不会编译失败。作为类库的用户,显然更关注第一种,所以就单独放了一份。(更多可参考 JEP 277: Enhanced Deprecation)

接下来就是具体的内容,分别是名称、版本号和描述,并支持按名称或版本号进行排序。按版本号排序很实用,描述的内容也值得参考,里面会提供废弃的原因,是否有替代品等信息。

简单地浏览一部分:

终将废弃并删除的

java.lang.Thread.stop() 等

还有resume、suspend 以及 ThreadGroup类对应的方法。早在1.2就废弃了。

参考 Java Thread Primitive Deprecation (Java SE 21 & JDK 21) (oracle.com)icon-default.png?t=N7T8https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/doc-files/threadPrimitiveDeprecation.html

java.applet.Applet等

java9废弃,早就没人用了

java.lang.Boolean(boolean) 等构造函数

还有Byte、Character、Double等基本类型的包装类,它们的构造函数都在java 9废弃了。改用静态工厂方法,可以参考 Effective Java 的第一条建议。

java.lang.Object.finalize()

一直没存在感的方法终于在java 9 废弃了,减少了记忆学习的负担。虽然这里建议改用 Cleaner,但 Effective Java 3 第八条告诉我们,Cleaner最好也别去碰。

javax.security.cert.Certificate 等

其实是转正了,包名从 javax... 换成了 java.security.cert 。可见网络安全的地位从可选变成了必选。java 9 废弃。

java.lang.SecurityManager 及其相关

java 17废弃。这安全也是当年java的一大卖点,现在也没落了。

这个的确很少用,页面中给出了废弃原因的链接: JEP 411。

主要就是说,一是用于客户端代码安全,但Servlet早就没人用了;二是用于服务端代码安全,可实际上基本没什么人用。

java类库越来越大,要管的东西太多,我们维护起来太累,放弃了。

另外2020年CWE的top 25安全漏洞,Security Manager有19个都管不了,还要它干嘛?(感觉这个有点强词夺理,也没指望人一个机制能解决所有层面上的漏洞)

发明了20多年,但业界太少人用了,除了少量软件如ElasticSearch和Tomcat。

甚至.NET都不支持了,java废弃它的理由就更充分啦。

废弃但不删除的

java.util.Observer 接口 和 java.util.Observable 类

java9 废弃,理由是功能太局限。

如果要更丰富的事件模型,用 java.beans包。如果要可靠有序,用 java.util.concurrent 包。如果要用响应式流风格编程,用 Flow API。

java.util.Date.getDate() 等方法

从1.1版本起就废弃了。

废弃的有 get/set 年月日时分秒等方法,以及转换成字符串的方法。废弃的原因是这些api不支持国际化。所以要获取年月日等信息,要用Calendar类;而格式化或者日期解析,要用 DateFormat类。

Date类本身剩下的非废弃方法就两三个,只能用于比大小,功能非常有限,感觉类似于废弃。构造函数只剩两个,一个是无参,根据当前时间构造对象,另一个是long毫秒数为参数。还有个java 8加入的静态工厂方法,根据Instant对象生成Date对象。

java.lang.Class.newInstance() 方法

java 9废弃。这个方法用来调用某个类的无参构造器,如果构造器有异常,则newInstance方法会原样抛出来。但newInstance方法本身只声明了两个 checked 异常:InstantiationException 和 IllegalAccessException。这个和java语言规定的“方法必须声明所有自己可能抛出的checked异常”就矛盾了,等于绕过了编译器的校验。

建议改用 Constructor.newInstance  方法,它会把构造器的异常包装成 InvocationTargetException 抛出来,而且也在方法中声明了。

java.lang.Runtime.exec(String)等方法

java 18废弃。并不是所有exec都废弃了,只是废弃了其中几个容易出问题的:

java.lang.Thread.getId()

java19废弃。因为它不是final,可能被覆写。现在加final又太迟了。建议改用 Thread.threadId()。

java.util.Locale的构造器

所有构造器全部在java 19废弃了。替代方式有很多,比如 Local.Builder,还有两个静态工厂方法,或者常量,以及匹配/过滤/查找等方法。

java.net.URL的构造器

所有构造器全部在java 20废弃了。改用URI或URL的一些静态工厂方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/189358.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cocos 关于多个摄像机,动态添加节点的显示问题,需要动态修改layer。(跟随摄像机滚动)(神坑官网也不说明一下)

参考文章:Cocos 3.x 层级Layer - 简书 2D镜头跟随应该怎么实现呢 - Creator 3.x - Cocos中文社区 关于多个摄像机,动态添加节点的显示问题,需要动态修改layer? 场景:在制作摄像机跟随角色移动功能时,新增…

1.qml-3D入门讲解介绍

本章我们来学习QML 3D教程,QML 3D能够支持windows linux等多平台跨平台并且显示效果大部分一致,非常方便,学习的qt版本最低为qt6.5。 要使用qml 3D类,需要导入QtQuick3D模块。 这是使用空间渲染器和场景图的 QML 前端。目前&…

SQL Server 2016(分离和附加数据库)

1、实验环境。 基于上一个实验《SQL Server(创建数据库)》 2、需求描述。 class数据库的数据文件和事务日志文件都位于C:\db_class目录下。现在需要把class数据库的数据文件和事务日志文件分开存放,数据文件class.mdf存放于原位置&#xff0…

网传滴滴系统崩了,是因为k8s版本升级错误?

11月27日晚间,滴滴因系统故障导致App服务异常登上热搜,不仅无法显示定位、无法打车,有司机的后台还显示收入超690亿。28日和29日,滴滴两次发文致歉,称初步确定事故起因是底层系统软件发生故障。 相较于一些网友戏谑的…

Android 应用程序无响应定位ANR原因

废话不多说,直接上方案: 第一步: 执行adb命令 adb bugreport /Users/mac/Desktop/anr 解压后FS/data/anr下就会有相关anr文件 /Users/mac/Desktop/anr 是电脑存储文件的路径,可以随便定义,这个没有影响。我的电脑是…

人工智能-优化算法之学习率调度器

学习率调度器 到目前为止,我们主要关注如何更新权重向量的优化算法,而不是它们的更新速率。 然而,调整学习率通常与实际算法同样重要,有如下几方面需要考虑: 首先,学习率的大小很重要。如果它太大&#xf…

Todesk 无法登录,无法联网

前言 我习惯用todesk远程ubuntu,但是突然发现掉线了,但是ssh还能连接 问题查找 1.ping 一下主机ip 2.ssh连接后,ping 一下百度,查看是否外网正常 3.输入一下命令 ps -ef | grep todesk #查看todesk 进程 sudo kill -9 ....…

HTML5 的全局属性 hidden 和 display:none 的关系

目录 1,hidden 和 display:none 的关系2,其他隐藏元素的方式2.1,语意上的隐藏2.2,视觉上的隐藏 1,hidden 和 display:none 的关系 hidden - MDN 参考 一句话总结:hidden 是HTML5 新增的全局布尔属性&…

Centos7使用阿里云镜像加速服务安装Docker

文章目录 一、前提说明二、安装docker1、创建docker文件夹2、安装所需的软件包3、设置Docker仓库4、安装docker5、启动验证使用阿里云镜像加速服务 三、卸载docker 一、前提说明 需要先安装好虚拟机,可以查看这篇https://blog.csdn.net/qq_36433289/article/detail…

Python批处理PDF文件,PDF附件轻松批量提取

PDF附件是指在PDF文档中嵌入的其他文件,如图像、表格、音频、视频或其他文档。这些附件可以与PDF文档一起存储、传输和共享,为文档提供了更丰富的内容和更多的功能。通过添加附件,我们可以将相关文件和信息捆绑在一起,使其更易于管…

Verilog 入门(五)数据流模型化

文章目录 连续赋值语句时延 连续赋值用于数据流行为建模;相反,过程赋值用于顺序行为建模。组合逻辑电路的行为最好使用连续赋值语句建模。 连续赋值语句 连续赋值语句将值赋给线网(连续赋值不能为寄存器赋值),它的格式…

Python+Requests模拟发送GET请求

模拟发送GET请求 前置条件:导入requests库 一、发送不带参数的get请求 代码如下: 以百度首页为例 import requests# 发送get请求 response requests.get(url"http://www.baidu.com") print(response.content.decode("utf-8"))…

Drift plus penalty 漂移加惩罚Part2——性能分析

文章目录 正文Performance analysisAverage penalty analysis 平均惩罚分析Average queue size analysis 平均队列大小分析Probability 1 convergenceApplication to queues with finite capacityTreatment of queueing systemsConvex functions of time averages Delay tradeo…

SSR是什么?Vue中怎么实现?

一、是什么 概念 SSR是指服务器端渲染(Server-Side Rendering),是一种将客户端和服务器端合并的 Web 应用程序渲染技术。在 SSR 中,应用程序的 UI 在服务器端渲染完成后,再将整个渲染好的 HTML、CSS 和 JavaScript 发…

使用WalletConnect Web3Modal v3 链接钱包基础教程

我使用的是vueethers 官方文档:WalletConnect 1.安装 yarn add web3modal/ethers ethers 或者 npm install web3modal/ethers ethers2.引用 新建一个js文件,在main.js中引入,初始化配置sdk import {createWeb3Modal,defaultConfig, } from…

CMMI认证含金量高吗

一、CMMI认证含金量解答 CMMI,即能力成熟度模型集成,是由美国卡内基梅隆大学软件工程研究所开发的一种评估企业软件开发过程成熟度的模型。CMMI认证的含金量究竟高不高呢?答案是肯定的。CMMI认证被誉为软件开发行业的“金牌标准”&#xff0…

力扣题:字符的统计-12.2

力扣题-12.2 [力扣刷题攻略] Re:从零开始的力扣刷题生活 力扣题1:423. 从英文中重建数字 解题思想:有的单词通过一个字母就可以确定,依次确定即可 class Solution(object):def originalDigits(self, s):""":typ…

okhttp系列-拦截器的执行顺序

1.将拦截器添加到ArrayList final class RealCall implements Call {Response getResponseWithInterceptorChain() throws IOException {//将Interceptor添加到ArrayListList<Interceptor> interceptors new ArrayList<>();interceptors.addAll(client.intercept…

03-IDEA集成Git,初始化本地库,添加远程仓库,提交,拉取,推送,分支的快捷操作

IDEA集成Git 创建Git忽略文件 不同的IDE开发工具有不同的特点文件,这些文件与项目的实际功能无关且不参与服务器上的部署运行, 把它们忽略掉能够屏蔽之间的差异 局部忽略配置文件: 在本地仓库的根目录即项目根目录下直接创建.gitignore文件, 以文件后缀或目录名的方式忽略指定…

双远心镜头:让视觉检测更精准、高效!

工业镜头是视觉系统中的重要组件&#xff0c;工业镜头的选型影响着整个系统的成像效果。在做视觉检测时&#xff0c;会遇到无法检测空间物体、无法控制视场变化、无法控制图像扭曲、对比度低、畸变大、反光等问题&#xff0c;这时普通的工业镜头并不能有效地解决问题&#xff0…