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,一经查实,立即删除!

相关文章

GameNetController网络控制器

好用的局域网内的网络控制器,稍作更改可连接互联网 using System; using System.Collections; using System.Collections.Generic; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; using LitJson; using UnityEngine; u…

【数据结构】拆分详解 - 堆的应用

堆的应用 1. 堆排序 思路: 建大堆 向下调整建堆,根位置即选出的最大数 排序:交换头尾,向下调整,尾删 把大数移到尾部,调整堆,将排好的大数“删出”堆注意向下调整和尾删顺序不能对调&#xff0c…

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

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

Python 3 使用 read()、readline()、readlines() 函数 读取文件

1 样例文件 example.txt 春晓 孟浩然〔唐代〕 春眠不觉晓,处处闻啼鸟。 夜来风雨声,花落知多少。 2 分别使用 read()、readline()、readlines() 函数 2.1 # read() -------- 一次性读取所有文本,以字符串的形式返回结果。 # read() ----…

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日,滴滴两次发文致歉,称初步确定事故起因是底层系统软件发生故障。 相较于一些网友戏谑的…

vue和react使用上的不同

使用表达式 **react使用js表达式** const name 李四 <h1>你好&#xff0c;我叫{name}</h1> **vue 使用表达式** const name 李四 <div>你好&#xff0c;我叫{{name}}</div>列表渲染 列表渲染 const songs [{ id: 1, name: 痴心绝对 },{ id: 2, n…

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

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

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

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

Todesk 无法登录,无法联网

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

快速掌握Pyqt5的20种输入控件(Input Widgets)

Pyqt5相关文章: 快速掌握Pyqt5的三种主窗口 快速掌握Pyqt5的2种弹簧 快速掌握Pyqt5的5种布局 快速弄懂Pyqt5的5种项目视图&#xff08;Item View&#xff09; 快速弄懂Pyqt5的4种项目部件&#xff08;Item Widget&#xff09; 快速掌握Pyqt5的6种按钮 快速掌握Pyqt5的10种容器&…

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

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

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

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

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

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

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

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

Linux 只能收到 SYN 包 不能回包

如果用户发现云主机不能登录&#xff0c;例如无法远程 22 端口或其他端口&#xff0c;但是更换网络环境正常&#xff0c;服务端抓包发现客户端发包只有 SYN&#xff0c;没有回包&#xff0c;可以执行 netstat -s |grep rejec 查看下是否是 tcp_timestamps 的问题 [roothfgo2 ~…

Java的53个关键字分类及详细说明(包含3个特殊直接量+2个保留字)

文章目录 关键字,特殊直接量&#xff0c;保留字关键字的详细用法说明&#xff08;1&#xff09;访问控制类关键字&#xff08;2&#xff09;修饰符类关键字&#xff08;3&#xff09;程序控制类关键字&#xff08;4&#xff09;错误处理类关键字&#xff08;5&#xff09;包相关…

Python+Requests模拟发送GET请求

模拟发送GET请求 前置条件&#xff1a;导入requests库 一、发送不带参数的get请求 代码如下&#xff1a; 以百度首页为例 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…