运行一个实例化Socket和ServerSocket的类将显示这个调试输出 。这是默认的(新的):
java -XX:+TraceClassLoading JEP353 | grep Socket[0.033s][info ][class,load] java.net.Socket source: jrt:/java.base[0.035s][info ][class,load] java.net.SocketOptions source: jrt:/java.base[0.035s][info ][class,load] java.net.SocketImpl source: jrt:/java.base[0.039s][info ][class,load] java.net.SocketImpl$$Lambda$1/0x0000000800b50840 source: java.net.SocketImpl[0.042s][info ][class,load] sun.net.PlatformSocketImpl source: jrt:/java.base[0.042s][info ][class,load] sun.nio.ch.NIOSocketImpl source: jrt:/java.base[0.043s][info ][class,load] sun.nio.ch.SocketDispatcher source: jrt:/java.base[0.044s][info ][class,load] java.net.DelegatingSocketImpl source: jrt:/java.base[0.044s][info ][class,load] java.net.SocksSocketImpl source: jrt:/java.base[0.044s][info ][class,load] java.net.ServerSocket source: jrt:/java.base[0.045s][info ][class,load] jdk.internal.access.JavaNetSocketAccess source: jrt:/java.base[0.045s][info ][class,load] java.net.ServerSocket$1 source: jrt:/java.base上面输出的sun.nio.ch.NioSocketImpl就是新提供的实现 。
如果使用旧的实现也是可以的(指定参数jdk.net.usePlainSocketImpl):
$ java -Djdk.net.usePlainSocketImpl -XX:+TraceClassLoading JEP353 | grep Socket[0.037s][info ][class,load] java.net.Socket source: jrt:/java.base[0.039s][info ][class,load] java.net.SocketOptions source: jrt:/java.base[0.039s][info ][class,load] java.net.SocketImpl source: jrt:/java.base[0.043s][info ][class,load] java.net.SocketImpl$$Lambda$1/0x0000000800b50840 source: java.net.SocketImpl[0.046s][info ][class,load] sun.net.PlatformSocketImpl source: jrt:/java.base[0.047s][info ][class,load] java.net.AbstractPlainSocketImpl source: jrt:/java.base[0.047s][info ][class,load] java.net.PlainSocketImpl source: jrt:/java.base[0.047s][info ][class,load] java.net.AbstractPlainSocketImpl$1 source: jrt:/java.base[0.047s][info ][class,load] sun.net.ext.ExtendedSocketOptions source: jrt:/java.base[0.047s][info ][class,load] jdk.net.ExtendedSocketOptions source: jrt:/jdk.net[0.047s][info ][class,load] java.net.SocketOption source: jrt:/java.base[0.047s][info ][class,load] jdk.net.ExtendedSocketOptions$ExtSocketOption source: jrt:/jdk.net[0.047s][info ][class,load] jdk.net.SocketFlow source: jrt:/jdk.net[0.047s][info ][class,load] jdk.net.ExtendedSocketOptions$PlatformSocketOptions source: jrt:/jdk.net[0.047s][info ][class,load] jdk.net.ExtendedSocketOptions$PlatformSocketOptions$1 source: jrt:/jdk.net[0.048s][info ][class,load] jdk.net.linuxSocketOptions source: jrt:/jdk.net[0.048s][info ][class,load] jdk.net.LinuxSocketOptions$$Lambda$2/0x0000000800b51040 source: jdk.net.LinuxSocketOptions[0.049s][info ][class,load] jdk.net.ExtendedSocketOptions$1 source: jrt:/jdk.net[0.049s][info ][class,load] java.net.StandardSocketOptions source: jrt:/java.base[0.049s][info ][class,load] java.net.StandardSocketOptions$StdSocketOption source: jrt:/java.base[0.051s][info ][class,load] sun.net.ext.ExtendedSocketOptions$$Lambda$3/0x0000000800b51440 source: sun.net.ext.ExtendedSocketOptions[0.057s][info ][class,load] java.net.DelegatingSocketImpl source: jrt:/java.base[0.057s][info ][class,load] java.net.SocksSocketImpl source: jrt:/java.base[0.058s][info ][class,load] java.net.ServerSocket source: jrt:/java.base[0.058s][info ][class,load] jdk.internal.access.JavaNetSocketAccess source: jrt:/java.base[0.058s][info ][class,load] java.net.ServerSocket$1 source: jrt:/java.base上面的结果中 , 旧的实现java.net.PlainSocketImpl被用到了 。
Switch Expressions (Preview)
在JDK 12中引入了Switch表达式作为预览特性 。JEP 354修改了这个特性 , 它引入了yield语句 , 用于返回值 。这意味着 , switch表达式(返回值)应该使用yield, switch语句(不返回值)应该使用break 。
在以前 , 我们想要在switch中返回内容 , 还是比较麻烦的 , 一般语法如下:
int i;switch (x) { case "1": i=1; break; case "2": i=2; break; default: i = x.length(); break;}在JDK13中使用以下语法:
int i = switch (x) { case "1" -> 1; case "2" -> 2; default -> { int len = args[1].length(); yield len; }};或者
int i = switch (x) { case "1": yield 1; case "2": yield 2; default: { int len = args[1].length(); yield len; }};在这之后 , switch中就多了一个关键字用于跳出switch块了 , 那就是yield , 他用于返回一个值 。和return的区别在于:return会直接跳出当前循环或者方法 , 而yield只会跳出当前switch块 。
Text Blocks (Preview)
在JDK 12中引入了Raw String Literals特性 , 但在发布之前就放弃了 。这个JEP在引入多行字符串文字(text block)在意义上是类似的 。
text block , 文本块 , 是一个多行字符串文字 , 它避免了对大多数转义序列的需要 , 以可预测的方式自动格式化字符串 , 并在需要时让开发人员控制格式 。
推荐阅读
- 苹果发布各大硬件设备系统升级,主要修复问题
- 淘宝发布不了宝贝怎么办 新开淘宝店铺发布不了产品
- 淘宝开店怎么发布宝贝 淘宝开店怎么上传商品
- 微软|微软Win11发布半年:仍在追赶Win10 没有真正的改进
- 中华茶器具通鉴发布
- 三星|三星发布Galaxy S20 FE 2022款:砍掉耳机 更便宜
- 小米MIX|双机皇:曝小米12 Ultra、MIX Fold 2将同场发布 配置到顶
- 中国茶叶博物馆发布冰茶壶 还原传统茶水冰泡技艺
- Spring Boot集成极光推送Java-SDK
- Java类的加载机制