本篇内容介绍了“java8到java17 api有哪些改动”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
先从jdk8到9的改动部分
java.applet 这个没啥人用不用咋说了,弃用部分api
java.awt 大部分api改动,详细方法不怎么用不贴了.
新增java.awt.desktop 一些桌面的操作,屏幕,睡眠,拖动,Ui等
一些新的ui,事件,焦点,图片,任务栏,一些删除等.Robot用的多点,新增个多重屏幕
Java.beans 新增了@BeanProperty@JavaBean 注释信息之类
Java.io 这个常用点
InputStream新增了readAllBytes(),直接读取字节不用再搞工具类了,不过太大的流还是不建议,readNBytes方法可以给定字节读取,建议。transferTo可以直接复制输出流 。
OutputStreamWriter新增了append方法直接追加字符串挺实用。
其他相应子类及输出流也有新增一些方法,不怎么常用比如过滤配置等
java.lang.annotation下加了枚举MODULE,主要对应模块
java.lang.instrument Instrumentation新增了isModifiableModule模块是否支持修改,redefineModule重新定义模块。
java.lang.invoke包 MethodHandle和MethodHandles下新增很多方法,加的东西有点多不写。
新增了StringConcatFactory,字符串常量池用于创建一些优化字符串串联的方法。
实用部分就是反射里很多能通过句柄搞到。新增了VarHandle,这个支持各种变量操作访问,内存屏障排序都很实用,写的人挺多的自己搜不扯了。个人建议使用这个包下的api到时替代反射,到时采用aot编译机器码不用反射的配置了。
java.lang.management ThreadInfo新增了优先级和守护线程标志
java.lang.module 模块化的包没啥好说的,模块化都靠它,基本上java9的类加载和8之前的是个大改动,扩展类退出舞台主要是平台类加载器,不谈细节最实用的部分就是采用模块化jre可以小很多内存占用少了。
java.lang.ref 新增了Cleaner,对象清理的,使用虚引用和引用队列在对象从最强到最弱变化时通知清理。Cleaner.Cleanable 实现接口里的clean方法可以取消调用清理。
java.lang.reflect 反射里AccessibleObject 新增canAccess方法可以判断下是否可访问对象trySetAccessible方法尝试设置标记。Constructor,Field,Method都新增了setAccessible。
Proxy的两个静态方法弃用
java.lang 这个包最重要稍微详细点。很多启用基本上包装类型的new都别用了,多了模块
Deprecated注解新增了forRemoval(),since(),表示删除和启用版本
Byte,short 新增了compareUnsigned 比较 0x == y0x < y0x > y
Character.新增许多字符集单码常量太多不贴了
ClassLoader 新增许多实用方法,获取包,加载器,平台,资源等,主要还是模块化的更改
Class 新增了根据模块获取类,获取包,获取模块,弃用了newInstance()建议构造器。
Compiler jit编译器差异太大,弃用了
Integer Long 新增了parseInt, parseUnsignedInt (CharSequence, int, int, int),long对应long
Math 新增7个实用方法floorDiv,floorMod,fma(double和float),multiply Exact,Full,High
Module,ModuleLayer,ModuleLayer.Controller,Package 模块相关的
ProcessBuilder 新增了DISCARD的枚举和startPipeline 启用流链接
Process 新增children()子进程 ,descendants()快照,info()信息快照,onExit()终止流程,
pid()返回进程id,supportsNormalTermination()终止的判断 toHandle()返回句柄。挺实用。
Runtime.Version javase版本字符串。
StackWalker 新增类,线程快照堆栈打印挺方便
String 新增chars 字符内流,codePoints 代码内流。char数组byet数组,细节优化挺多,比如+这些优化更好,主说api不说细节。
System 新增了getLogger的两个方法。主要是日志jvm日志也纳入进来了。指定下module配合java.logging可以指定slf4j,我就用他实现个简单日志观测jvm更方便。
Thread 新增个构造方法,新增了onSpinWait()告诉cpu我是循环中,提高自选效率,实用.
java.math BigInteger,BigDecimal 四舍五入,平方根这些方法
java.net.spi java.net包内的提供商扩展,定制些url协议之类的比较方便。
java.net 认证,代理,tcp,udp,ip这些新增很多实用的配置参数方法,方便获取。
java.nio 各种buffer新增重置流缓冲区标记等等更方便了。
java.rmi.server UnicastRemoteObject新增了exportObject。直接导出不用jndi那么麻烦了
java.security 新增太多了。SecureRandom用的多点加了几个实用方法。
java.security.acl Acl这些被Policy 替代了,弃用了
java.security.cert 新增URICertStoreParameters,RFC 5280定义的uri向算法实现提供必要参数
java.security.spec 大部分算法过期删除,新增几个方法。
java.sql 这个jdbc相关用的多
DriverManager 新增drivers方法获取驱动流
ConnectionBuilder 连接的构建
Connection 新增几个默认方法 请求前后的方法,设置分片验证等
DatabaseMetaData 新增supportsSharding检索是否支持分片。其他几个是分片接口不写了
java.time 对java8的日期新增几个实用方法
java.util.concurrent.atomic 这个虽然重要新增太多了,增强了很多方法。
java.util.concurrent 这个同上方法不贴了仅说下新类。
Flow。里边好几个订阅发布接口,不需要rxjava这些了。
SubmissionPublisher。异步向当前订阅者提交(非空)项目,直到其关闭
java.util.jar 删除了Pack200里属性监听,
JarFile新增baseVersion,getVersion,isMultiRelease,runtimeVersion 写框架多版本java jar实用
java.util.logging 上边简单提了,挺多增强
java.util.regex Matcher新增replaceAll replaceFirst appendTail appendReplacement 增强
results匹配的结果流
java.util.spi 主要新增下面三个,比如开发javac,jar,jlink之类用到
ToolProvider 命令行工具的接口,以提供一种在不一定启动新 VM 的情况下调用的方法
ResourceBundleProvider 用于加载指定模块的资源捆绑包的提供商界面
AbstractResourceBundleProvider 基本抽象类
java.util.stream 新增多个方法,流这边更好用了。
java.util.zip 删除俩方法,新增CRC32C类,扩展ZipEntry的get/setTimeLocal
java.util 新增挺多方法,比如集合队列map等支持流的函数,太重要挑几个用最多的吧
Arrays compare,compareUnsigned,equals,mismatch 各种类型增强
Objects requireNonNullElse 为空返回第二个
Properties 添加很多实用方法,主要是重写了hashtable的相关方法。
Scanner 正则匹配这些,findAll(Pattern/string) tokens()
ServiceLoader 新增Provider findFirst()stream()load(ModuleLayer, Class) 。扩展spi比较实用
List,Map,Set 最实用的静态方法of(),创建太方便了。不过注意是只读的。
Enumeration asIterator() 这个也实用,直接返回迭代
javax.accessibility 新增了AccessibilityProvider 屏幕这些访问
javax.annotation.processing 新增@Generated 标记生成源码注释RoundEnvironment 新增俩方法
javax.crypto ExemptionMechanism删除了finalize
javax.imageio 弃用部分方法 新增javax.imageio.plugins.tiff 处理tiff格式图片api
javax.lang.model 新增部分接口 主要模块部分的新增接口方法
javax.management 部分方法移除新增 新增@ConstructorParameters 运行时判断参数名
javax.naming 一个方法删除和弃用
javax.net.ssl 新增部分属性和弃用
javax.sql 大部分接口增强,比如DataSource,XADataSource,日志创建这些
javax.swing 太多增强 不过界面用的少不扯了
javax.tools 大部分增强,比如StandardJavaFileManager根据path这些获取很方便
javax.xml 删除了部分api
其他nashorn增强es6(15被干掉),默认切换g1,doc增强,aot,jsheel等太多改变,主要看实用api不扯那些
java10更改部分
java.io 方法增强ByteArrayOutputStream字符串指定编码,
PrintStream,PrintWriter 打印到文件,实用.比如指定setOut后可以不看控制台直接按编码写入文件
Reader 新增了transferTo(Writer)
java.lang.invoke
MethodType 新增了lastParameterType()返回最后类型,没有就是void
java.lang jdk9新增的几个类被干掉了,多处方法启用删除新增 大多不重要
java.net URLDecoder/Encoder 新增了对应方法的Charset,可以少写俩捕获异常
java.nio Channels新增一newread/write方法 FileStore新增了getBlockSize()获取块大小
java.security 部分弃用及新方法
java.time 新增几个方法
java.util.concurrent StampedLock增强4个判断方法 FutureTask重写了tostring
java.util.jar/spi/stream 个别类新增一两个方法不重要
java.util 新增一些默认方法,List/Map/set新增了copyOf,可以方法的复制了
java.management RuntimeMXBean加了pid,ThreadMXBean加了俩获取线程信息的方法.个人扩展该模块可以省不少jps,ps,top,jstat查了
其他大部分模块新增个别常量方法
java11更改部分
java.io reader,write,input,out这些的相关类及子类一些9开始的方法扩展方法添加修复之类
java.lang.invoke 新增ConstantBootstraps,动态计算各种常量,实用
java.lang.ref Reference新增了clone方法 ,引用复制方便了
java.lang 这个包肯定重要还是大致写下,部分弃用删除如Thread的stop/destroy和runtime的
Character内部类新增部分编码常量,新增int的toString方法
Class getNestHost嵌套类访问getNestMembers包含的类数组,isNestmateOf 是不是类里的一家人
StringBuffer/Builder 新增compareTo直接比较sb
String 新增isBlank/lines/repeat/strip/stripLeading/stripTrailing 实用方法看名字就知道
CharSequence 新增compare方法比较返回
java.nio.fileFiles新增readString和writeString Path新增了of 。这些太实用了
ByteBuffer等几个基础类型的buffer新增了mismatch
java.security 大部分api新增一些方法和个别弃用删除
java.util.concurrent PriorityBlockingQueue扩展几个方法,TimeUnit加了个convert(Duration)
java.util.function Predicate加了个not
java.util.regex Pattern新增了asMatchPredicate 创建谓词
java.util.zip Deflater和Inflater新增了bytebuffer的三四个方法
java.util 几个类新增的isEmpty等ArrayList.hashcode和equals方法重写了,
Collection加个toArray(IntFunction)
javax.crypto.spec 新增ChaCha20ParameterSpec ChaCha20的算法javax.security.auth Policy删了
java.corba 被删掉了
java.desktop 挺多更改新增方法,桌面不提了
java.sql javax.transaction.xa改为java.transaction.xa
java.xml.crypto 部分增强
java.xml.ws,java.xml.bind 被删除了,用到就从maven那里下载下吧
新增http的客户端,支持http2这些,可以不用其他http包了
Java
Java12-17 17正式版还得4个月用11以上得人也少合并说吧,finalize方法部分大多删除不贴了
java.io
@Serial 表示注释字段或方法是Java 对象序列化规范定义的序列化机制的一部分,14添加
CharArrayReader 添加read(CharBuffer)
Console charset()获取字符集
InputStreamReader 新增read(CharBuffer)
InputStream 新增skipNBytes 可跳过字节长 jdk12添加
PrintStream 新增write,writeBytes(byte[]) 写入字节数组 14添加
java.lang.annotation ElementType新增了RECORD_COMPONENT 记录类得
java.lang.constant 常量包不用说了.适用于字节代码读取和编写 API、引导、字节代码内在 API 以及编译时间或链接时间程序分析工具
java.lang.invoke 多个类和方法得增强,弃用等,主要句柄这块儿
java.lang.ref Reference新增refersTo(Object),测试是否引用对象,jdk16新增
java.lang.reflect
RecordComponent 新增record类的反射组件
InvocationHandler 新增invokeDefault静态方法。直接根据方法调用代理对象,实用
AnnotatedType 新增获取注解的三个方法
java.lang.runtime 这个包对java语言提供低级别的运行时支持,jdk14新增
ObjectMethods类 Java 编译器可以使用这些方法来实现比如object类下的各种方法重写,实用
java.lang 基础类型新增describeConstable()实例描述符
Character 新增许多字符集
ClassNotFoundException等很多异常的getCause()被删除了,trycatch里得注意下
NullPointerException 更新了getMessage()和fillInStackTrace()
Class 新增了隐藏类,密封类,记录类,内部类,数组,等得相关方法
Math 新增absExact方法对int,long,绝对精确整数超出最大最小异常,jdk15
Record 这个不用说了Lombok可以不用了,注意可序列化readObject和writeObject被忽略
String 新增formatted格式化字符,indent 缩进 ,resolveConstantDesc,常量描述符
stripIndent 删除头尾空格 transform 允许把函数应用到该字符 translateEscapes 转义序列化
Thread 虚拟线程得方法看loom项目邮件一直在各种测试估计能赶上17.跟go的goroutine差不多
java.net
DatagramSocket 新增了joinGroup和leaveGroup加入或离开组,jdk17新增
URLDecoder里删除了URLDecoder()
SecureCacheResponse 新增了getSSLSession jdk12
UnixDomainSocketAddress 新增的Unix域套接字。本机进程通信效率最高,只复制数据。jdk16新增,windows也支持
java.nio.channels
SelectorProvider新增openServerSocketChannel,openSocketChannel
ServerSocketChannel,SocketChannel新增open(ProtocolFamily)
java.nio.file FileSystems新增newFileSystem 根据path,Files新增mismatch返回不匹配位置
java.nio 各种Buffer新增一些缓存区设置获取共享压缩清除等
java.security 一些证书更新弃用删除方法等
java.text 新增CompactNumberFormat LDML的紧凑数字格式规范,其他添加获取他的方法
java.time 日文字体等格式简单修改
java.util.concurrent.locks LockSupport 新增setCurrentBlocker通过getBlocker当前线程的返回对象
java.util.concurrent
ThreadLocalRandom删除nextGaussian新增nextFloat,还有三makeDouble/int/longsSpliterator
CompletionStage新增5个默认方法,CompletableFuture也自动继承
ForkJoinPool 新增invokeAny(2个)和invokeAll
java.util.random 随机数生成的通用API的类和接口.jdk17新增的重写的包
java.util.stream 流接口新增multimap方法,跟c++的一样,是关联式容器,Stream还新增toList
java.util
HashSet toArray有改动
HexFormat 字节,字符和十六进制编码的字符串之间进行转换的工具类 jdk17
Objects,Random,NoSuchElementException新增几个方法,SplittableRandom删除几个新增几个
javax.crypto Cipher重写了tostring
javax.net.ssl HttpsURLConnection新增了getSSLSession()方法,上边有个
javax.annotation.processing ProcessingEnvironment新增isPreviewEnabled(),是不是预览版
javax.lang.model 各种模型更新,细节挺多每个版本必须改的东西,比如加上新版本的串
javax.tools ToolProvider的ToolProvider()方法删除
java.util.logging LogRecord新增了getLongThreadID用于晚点替换getThreadID
java.management.rmi 挺多内容删除
javax.naming.ldap.spi ldapv3版本的扩展包
java.net.http HttpRequest新增了newBuilder(2个) HttpRequest.BodyPublishers新增concat
javax.xml DocumentBuilderFactory和SAXParserFactory新增了命名空间支持
awt,swing的各种更改就不说了,剔除多个如nashorn之类用的少的模块,删除aot,jit,macos下增强
没啥结语,jdk16开始启用了c++14,像 Vector API 开发人员需要了解HotSpot的自动矢量化支持及其局限性.panama项目还有对外部存储,c/c++的api直接访问,从8升级你怕了吗.
“java8到java17 api有哪些改动”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。