Java SE 13 新增特性

ES13新特性 在ES13中我们还可以给类定义静态成员和静态私有函数。类的静态方法可以使用this关键字访问其他的私有或者公有的普通成员。ES13中也允许在类中通过static关键字定义一系列静态代码块,这些代码块只会在类被创造的时候执行一次。这其实有点像一些其他的如C#和Java等面向对象的编程语言的静态构造函数的用法。 阅读详情

源码

源仓库: Github:java_new_features
镜像仓库: GitCode:java_new_features

新版 Switch 使用方式

switch 语句增加了 yield 关键字表示返回值,这个特性在 Java SE 13 中是预览特性,在 Java SE 14 正式引入。代码如下:

注: 如果你用 Java SE 12 运行上述代码,需要指定 --enable-preview 参数.

<pre class="prettyprint hljs typescript" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">package git.snippets.jdk13;

/**
 * switch yield功能
 * jdk13 实验性功能
 * 到jdk14 正式使用
 * @author <a href="mailto:410486047@qq.com">Grey</a>
 * @date 2021/11/29
 * @since 13
 */
public class SwitchYield {
    public static void main(String[] args) {
        String t = test("apple");
        System.out.println(t);
        String m = test("abc");
        System.out.println(m);
    }

    private static String test(String c) {
        return switch (c) {
            case "apple", "Apple":
                yield "苹果";
            case "banana":
                yield "香蕉";
            default:
                yield "无法识别";
        };
    }
}

输出结果

<pre class="hljs" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 0.75em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">苹果
无法识别

文本块(预览功能)

为了定义一个多行字符串,我们习惯于使用转义序列来处理字符串中包含的换行和双引号。例如,一个SQL语句看起来像这样

<pre class="prettyprint hljs vbscript" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">String sql =
    "SELECT id, firstName, lastName FROM Employee\n"
        + "WHERE departmentId = \"IT\"\n"
        + "ORDER BY lastName, firstName";
String content = "{\n"
                + "    \"upperSummary\": null,\n"
                + "    \"sensitiveTypeList\": null,\n"
                + "    \"gmtModified\": \"2011-08-05 10:50:09\",\n"
                + "    \"lowerGraph\": null,\n"
                + "    \"signature\": \"\",\n"
                + "    \"appName\": \"xxx\",\n"
                + "    \"lowerSummary\": null,\n"
                + "    \"gmtCreate\": \"2011-08-05 10:50:09\",\n"
                + "    \"type\": \"CALL\",\n"
                + "    \"name\": \"xxxx\",\n"
                + "    \"subType\": \"yyy\",\n"
                + "    \"id\": 1,\n"
                + "    \"projectId\": 1,\n"
                + "    \"status\": 1\n"
                + "}";

JDK Enhancement Proposal 允许我们以更可读的方式编写这样的字符串。

<pre class="prettyprint hljs sql" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">String sql = """
    SELECT id, firstName, lastName FROM Employee
    WHERE departmentId = "IT"
    ORDER BY lastName, firstName""";
String content2 = """
        {
        "upperSummary": null,
        "sensitiveTypeList": null,
        "gmtModified": "2011-08-05 10:50:09",
        "lowerGraph": null,
        "signature": "",
        "appName": "xxx",
        "lowerSummary": null,
        "gmtCreate": "2011-08-05 10:50:09",
        "type": "CALL",
        "name": "xxxx",
        "subType": "yyy",
        "id": 1,
        "projectId": 1,
        "status": 1
    }
                 """;

文本块在 Java SE 13 属于预览功能,在 Java SE 15 中正式启用

Socket API 新实现方式

java.net.Socket 和 java.net.ServerSocket 类早在 Java 1.0 时就已经引入了,它们的实现的 Java 代码和 C 语言代码的混合,维护和调试都十分不易;而且这个实现还存在并发问题,有时候排查起来也很困难。

因此,在 Java 13 中引入了新的实现方式,使用了新的实现 NioSocketImpl 来代替老旧的 PlainSocketImpl 实现。用户随时可以通过 -Djdk.net.usePlainSocketImpl 参数切换回老的实现方式,以兼容意外情况。代码如下

<pre class="prettyprint hljs java" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">package git.snippets.jdk13;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 新版Socket API 使用了新的实现 NioSocketImpl 来代替老旧的 PlainSocketImpl 实现。
 * 需要增加-XX:+TraceClassLoading参数
 *
 * @author <a href="mailto:410486047@qq.com">Grey</a>
 * @date 2022/8/20
 * @since 13
 */
public class NewSocketAPI {
    public static void main(String[] args) {
        try (ServerSocket serverSocket = new ServerSocket(8000)) {
            boolean running = true;
            while (running) {
                Socket clientSocket = serverSocket.accept();
                //do something with clientSocket
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

使用 Java 13 运行,通过参数 -XX:+TraceClassLoading 追踪加载的类,日志中可以看到 NioSocketImpl。

<pre class="prettyprint hljs markdown" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">[0.099s][info ][class,load] java.util.Properties$LineReader source: shared objects file
[0.099s][info ][class,load] java.io.FileInputStream$1 source: shared objects file
[0.100s][info ][class,load] sun.net.PlatformSocketImpl source: jrt:/java.base
[0.100s][info ][class,load] sun.nio.ch.NioSocketImpl source: jrt:/java.base
[0.100s][info ][class,load] sun.nio.ch.NativeDispatcher source: jrt:/java.base
[0.100s][info ][class,load] sun.nio.ch.SocketDispatcher source: jrt:/java.base

但在 Java 12 并不是 NioSocketImpl。

<pre class="prettyprint hljs markdown" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">[0.120s][info ][class,load] java.util.concurrent.ConcurrentSkipListMap$Node source: shared objects file
[0.120s][info ][class,load] java.net.SocketImpl source: jrt:/java.base
[0.120s][info ][class,load] java.net.AbstractPlainSocketImpl source: jrt:/java.base
[0.120s][info ][class,load] java.net.PlainSocketImpl source: jrt:/java.base
[0.120s][info ][class,load] java.net.SocksSocketImpl source: jrt:/java.base

ZGC: 取消提交未使用的内存

ZGC 是 Java SE 11 中引入的一个实验性垃圾收集器,它承诺在10毫秒或更短的时间内实现 stop-the-world 。

JDK Enhancement Proposal 扩展了 ZGC 的功能,以便在特定时间后将未使用的堆内存返回给操作系统。

使用 -XX:ZUncommitDelay ,你可以指定ZGC返回未使用内存的时间,单位是秒。默认情况下,这个值是300秒。

该功能默认是启用的,可以用 -XX:-ZUncommit 来禁用。

ZGC 将在 Java SE 15 中达到生产状态。

动态 CDS 档案

Java SE 10 中引入了应用类数据共享--一个允许创建所谓共享存档文件的功能。这个文件包含了所使用平台的 JVM 所要求的二进制形式的应用类。该文件通过内存映射的 I/O 映射到 JVM 的内存中。

直到现在,创建这个文件还相对复杂。首先,我们必须在应用程序的测试运行期间转储一个类列表。只有在第二步,我们才能从这个列表中生成共享档案。

<pre class="prettyprint hljs groovy" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">java -Xshare:off -XX:+UseAppCDS
    -XX:DumpLoadedClassList=helloworld.lst
    -cp target/helloworld.jar eu.happycoders.appcds.Main

java -Xshare:dump -XX:+UseAppCDS
    -XX:SharedClassListFile=helloworld.lst
    -XX:SharedArchiveFile=helloworld.jsa
    -cp target/helloworld.jar

JDK Enhancement Proposal 简化了这个过程。从 Java SE 13 开始,你可以指定 -XX:ArchiveClassesAtExit 参数,在应用程序执行结束时生成共享存档。不再需要额外的参数 -Xshare:on 和 -XX:+UseAppCDS 了。

<pre class="prettyprint hljs nginx" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">java -XX:ArchiveClassesAtExit=helloworld.jsa
    -cp target/helloworld.jar eu.happycoders.appcds.Main

创建的共享存档也比以前小得多。因为它现在只包含应用程序的类。

从 Java SE 13 开始,共享存档的使用方法如下。

<pre class="prettyprint hljs nginx" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, &quot;Courier New&quot;, monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">java -XX:SharedArchiveFile=helloworld.jsa
    -cp target/helloworld.jar eu.happycoders.appcds.Main<
拯救你的备份数据!STM32F407 RTC Tamper功能防篡改设计指南 本文详细介绍了STM32F407 RTC Tamper功能在物联网数据安全中的应用,包括硬件触发、数据清除和时间戳记录等核心机制。通过实战案例和代码示例,展示了如何构建多层次的防御体系,确保敏感数据在物理入侵时自动擦除并记录精确时间戳,适用于智能门锁、工业传感器等高安全需求场景。 阅读详情

相关推荐

告别ArcGIS小红叉:从‘无法验证登录信息’到成功连接在线资源的完整排错记录

本文详细记录了从Windows便签的网络错误到ArcGIS连接问题的完整排错过程。通过分析代理服务器、DNS配置和系统网络设置,解决了ArcGIS无法验证登录信息的问题,提供了实用的网络优化方案和技术排错思路。

weixin_26800111的博客 390

通俗易懂的Java12&Java13新特性教程

2019年9月17日,国际知名的OpenJDK开源社区发布了Java编程语言环境的最新版本OpenJDK13。我们第一时间推出针对于Java 13的新特性。另外,6个月前,Oracle发布了Java 12版本,二者一脉相承,这里一并深入解析。本教程涉及Java 12 和 Java 13新特性的方方面面,主要体现在:1. Java语法层面的变化:switch表达式、yield关键字、Text Block等;2. API层面的更新:JVM常量API、String及Files新增方法、新版Socket底层实现;3. 对G1 Mixed GC、ZGC的改进,新的Shenandoah GC 进行了细致讲解。同时为了更好的理解GC机制,还强调了STW、 热点代码、低延迟与吞吐量优先、GC多种分类场景进行了深入剖析;4. 对微基准测试套件、CDS文件等进行介绍。此外,授课老师还从多个方面对是否升级以及升级的注意事项提供建设性意见。最后高屋建瓴地对JDK的版本升级走向、Oracle及第三方大厂在其中的支持,提供了有力见解。

SAP 成本分摊逻辑与案例(含具体数据)

摘要: SAP成本分摊通过**分配(Allocation)与分摊(Assessment)**两种方式,将间接成本中心费用按预设规则(如人数、工时、比例等)结转至直接成本对象。分配保留原始成本要素(如电费、工资),适用于需明细追踪的场景;分摊则打包为次级成本要素(如管理费用),简化核算。实操案例涵盖行政费用分配(按人数)、水电车间分摊(按工时)、机修作业分摊(作业成本法)及内部订单结算,系统通过KSV1/KSU1配置循环规则,KSV5/KSU5执行结转。关键点在于选择匹配业务的分摊基础,合理配置次级成本要素,

金牌架构师 551

java中switch条件语句的用法、switch的三种语法、switch支持的参数类型

java中switch条件语句的用法、switch的三种语法、switch支持的参数类型

weixin_49114503的博客 3万+

锂电池SOC估计 | 基于LSTM长短期记忆神经网络的锂电池SOC估计(附matlab完整代码)

锂电池SOC估计 | 基于LSTM长短期记忆神经网络的锂电池SOC估计(附matlab完整代码)

前程算法屋的博客 1023

YOLOv11改进策略【Backbone/主干网络】|替换HGNetV2骨干,包含RT-DETR中的l、x模型

本文记录的是基于HGNetv2的YOLOv11目标检测改进方法研究。本文利用HGNetv2替换YOLOv11的骨干网络,HGNetv2 通过其 GPU 推理友好的 3×3 标准卷积和层次化 HG Block 结构,能够为骨干网络提供高效且完整的特征提取能力。并且其中的和可在降低计算量的同时丰富特征表达,增强对多尺度目标特征的捕获能力,进而提高模型精度。本文配置了原论文中rtdetr-lrtdetr-x,以满足不同算力和检测精度的需求。

Limiiiing的博客 671

java中switch语句的应用

根据版本,在java14开始, switch语句有了一个很大的调整, 这就让swicth语句有了更多的操作和选择,在代码上,更加的简便灵活.

qq_42822701的博客 1441

LPDDR5 学习笔记01:功能概述

LPDDR5/LPDDR5X SDRAM设备采用8/16DQ通道架构,支持2Gb-32Gb容量。通过CK命令时钟和更快的WCK数据时钟协同工作,7个CA引脚传输控制信息,支持2:1或4:1的WCK:CK比例。设备提供BG/8B/16B三种存储模式选择,分别支持不同数据速率(最高8.533Gbps)和突发长度。采用0.5V VDDQ电源电压,实现高速双倍数据速率传输,并通过差分WCK时钟完成数据采样。读写采用突发访问机制,需先激活命令再执行读写操作。新型LPDDR5X仅支持BG和16B模式,优化了高速性能。

一只豌豆象的博客 2202

盘点Java中switch的三种用法方式

本文主要介绍了Java中switch的三种用法方式小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧从java14开始, switch语句有了一个很大的调整, 这就让swicth语句有了更多的操作和选择,在代码上,更加的简便灵活.

xinyuerr的博客 1333

[SystemC]SystemC中的模块和程序

SystemC 中的层次结构是使用类 sc_module 创建的。sc_module 可以直接使用,也可以使用宏 SC_MODULE “隐藏”。上面的示例 SC_MODULE 创建了一个名为 nand2 的 sc_module 类对象。它的输出纯粹是输入值的函数。因此,模型可以使用最简单的 SystemC 进程,即 SC_METHOD。摘要:本节包含一个完整的简单设计,用于演示 SystemC 中模块和流程的使用。同样,重要的是要注意这不是典型的设计风格 - 但它很好而且易于理解。为什么要看模块和流程?

元直的博客 1868

DAB协议解读ETSI TS 103 461

数字信号广播( Digital Audio Broadcasting 简称DAB)是继AM、FM传统模拟广播之后的第三代广播--数字信号广播,它提供了接近CD质量的声音,广播及商机无限的附加数据服务,具有抗噪声、抗干扰、抗电波传播衰落、适合高速移动接收等优点,保证固定、携带及移动时接收信号的质量。DAB的原始版本使用MP2音频编解码器。该系统的升级版本于2007年2月发布,称为DAB+,它使用基于改进的离散余弦变换(MDCT)的HE-AACv2(AAC+)音频编解码器。

qflook的博客 4477

Java 基础知识之 switch 语句和 yield 关键字

本文讲解 Java 中 switch 关键字的用法,包括其传统用法和 Java 12 之后新添加的 switch 表达式,并演示了 yield 关键字。

李斯维的博客空间 1792

WINCC7.3破解文件

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

Java SE 14 新增特性

这个功能在 Java SE 14 中是预览功能。switch 表达式在 Java SE 12 和 Java SE 13 中一直是预览功能,现在在 Java SE 14 中成为正式功能。在 Java SE 14 后,优化了 NPE 的报错提示,在 Java SE 14 下执行,报错信息如下。在Java SE 14 中,Text Blocks 仍处于预览阶段,并增加了一些新功能,增加了。Records 到 Java SE 16 正式发布,在 Java SE 14 中是预览功能。

Practitioner 526

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Java SE 15 新增特性

如果没有一个密封的类,编译器就不能合理地确定所有可能的子类都被我们的 if-else 语句所覆盖。隐藏类的目标是允许在运行时创建不能被发现的类。像这样的类通常有一个很短的生命周期,因此,隐藏类被设计成在加载和卸载时都很高效。instanceof 类型匹配功能在 Java SE 14 中进行了预览,Java SE 15 旨在继续其预览状态,没有新的增强功能。请注意,当前版本的 Java 确实允许创建类似于隐藏类的匿名类。这种有限的、详尽的层次结构是使用密封类的一大好处。然而,默认的垃圾收集器仍然是 G1。

Practitioner 357

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

JDK17语法新增特性

2.⼀些新增的特性1.前⾔从springboot3.0开始,已经不⽀持JDK8了。参考资料,来⾃官⽅博客:available?从3.0开始,转变为JDK17。官⽅维护的版本都是SpringBoot3.X的了, 但是之前的版本也是可以⽤的, 只是官⽅不再进⾏功能更新了综上所述,选⽤ Java 17,概括起来主要有下⾯⼏个主要原因1.JDK 17 是 LTS (⻓期⽀持版),可以免费商⽤到 2029 年。⽽且将前⾯⼏个过渡版(JDK 9-JDK 16)去其糟粕,取其精华的版本;2.

2302_79269413的博客 967

【前端】ES13:ES13新特性

一个类可以定义任意多的静态代码块,这些代码块会和穿插在它们之间的静态成员变量一起按照定义的顺序在类初始化的时候执行一次。这个属性可以帮助我们为错误添加更多的上下文信息,从而帮助使用者们更好地定位错误。这其实有点像一些其他的如C#和Java等面向对象的编程语言的静态构造函数的用法。只能用在ES6模块,不能用在CommonJS模块。我们还可以给类定义静态成员和静态私有函数。关键字定义一系列静态代码块,这些代码块只会在类被创造的时候。关键字访问其他的私有或者公有静态成员。关键字来访问父类的属性。

weixin_45980065的博客 845

java13页_Java 13 新特性及实战案例

近期 Java 界好消息频传。先是 Java 13 发布,接着 Eclipse 也发布了新版本表示支持新版本的Java 特性。 本文介绍了 Java 13 的新特性并展示了相关的示例。2019年9月17日,Java 13 正式发布。特性如下。Java 13 新特性此版本带来了以下几大新特性:JEP 350,Dynamic CDS Archives:扩展应用程序类-数据共享,以允许在 Java 应用...

weixin_39774491的博客 124

Java 9 ← 2017,2019 → Java 13 ,来看看Java两年来的变化

距离 2019 年结束,只剩下 10 几天了。你做好准备迎接 2020 年了吗? 一到年底,人就特别容易陷入回忆和比较之中,比如说这几天, 的对比挑战就火了! 这个话题登上了微博的热搜榜,也刷爆了朋友圈,人们纷纷晒出自己2017和2019的照片对比。 作为一个技术宅,我也做了一个对比: 2017 年 9 月 21 日,Java 9 正式发布,并且在2017年8月,JCP执行委员会提出将J...

HollisChuang's Blog 2万+

Java1.0-13各版本特性

不知道你有没有想过这些问题: 为什么 JDK1.4 与 JDK 5.0 的命名规则不一样?JDK 8 增加了哪些新特性?现在最新的 Java 版本是多少? 一直都是写业务代码,都没研究过 Java 的曾经与现在。为了提高下自己的职业素养,查了资料: JDK 1995 年 发布了 Beta 版,1996 年 1 月 发布了 1.0 版本,直到 2019 年 9 月发布了 JDK 13,J...

ConstXiong 690

java各版本 新特性_Java9到Java13各版本新特性代码全部详解(全网独家原创)

Java现在已经发展到了Java13了(正式版本),相信很多朋友还对各个版本还不是很熟悉,这里面专门把Java9到Java13各个版本的一些新特性做了一些详细讲解。我在网上也找了很多,但基本都是官方文档的CV,没有任何代码演示,而且官方的示例代码也不是很好找得到,官方API目前还是Java10,官方文档真是坑啊。所以我在这里专门写了一篇文章,主要针对平时开发与有关的功能Java9到Java13各个...

weixin_39923157的博客 304

java8到java17的主要新增语法特性

java10开始的java.util.List、java.util.Map 、java.util.Set 新加了copyOf方法用于复制集合返回一个不可变集合。java10开始新增了var关键字,用于局部变量的声明(即类变量不能使用var),它会根据周围的上下文自动检测变量的数据类型。2.var 不能与泛型类型一起使用,如:var al = new ArrayList();即初始化后里面的数据就固定了,不能再使用add、remove往里面再添加值和删除值。1.var 不能在实例和类全局变量声明中使用。...

西凉的悲伤博客 3424

【Java SE专栏索引】28篇全热榜好文轻松拿捏Java SE

本专栏包含Java SE全部内容,博主一篇篇用心码完,在博主学习Java SE的路上整理和总结的,希望会对大家有所帮助,博主还会持续输出高质量文章,您的关注是博主最大的动力!

小鳴人的博客 2301
上一篇: 想要成为架构师?这份《Java性能调优宝典》助你一臂之力
下一篇: 面对Java出现异常,应该怎么做才是正确的?
Java_ttcd
博客等级 码龄4年 198粉丝 190原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值