Java 17 & Java 11:新功能探索与改进措施知多少?

2023-12-16

7是Java编程语言的最新 LTS(长期支持)版本,于 2021年9月14日发布。如果您目前使用的是Java11,那么也许是时候考虑迁移到 Java 17啦,方便我们体验新功能以及了解新版本的改善措施。在本文中,我们将讨论 Java 17 中的新功能,尽管此处讨论的某些功能是在Java 11升级到Java 17的版本中引入的。

【参考文献】

文章: Java 17 vs Java 11: Exploring the Latest Features and Improvements

作者: Rahul Gite

上述译文仅供参考,具体内容请查看上面链接,解释权归原作者所有。

【关于TalkX】

TalkX是一款基于GPT实现的IDE智能开发插件,专注于编程领域,是开发者在日常编码中提高编码效率及质量的辅助工具,TalkX常用的功能包括但不限于:解释代码、中英翻译、性能检查、安全检查、样式检查、优化并改进、提高可读性、清理代码、生成测试用例、有趣的图表生成以及语音助手托克斯等。

TalkX建立了全球加速网络,不需要考虑网络环境,响应速度快,界面效果和交互体验更流畅。并为用户提供了Open AI的密钥,不需要自备ApiKey,不需要自备账号,不需要魔法。

TalkX产品支持:JetBrains (包括 IntelliJ IDEA、PyCharm、WebStorm、Android Studio)、HBuilder、VS Code、Goland.

为什么要从 Java 11 迁移?

虽然 Java 11 也是一个 LTS 版本,并且被许多应用程序所使用,但我们可能会出于一些主要原因而转向 Java 17。

结束对 Java 11 的支持:Java 11 的支持将持续到 2023 年 9 月,扩展支持将持续到 2026 年 9 月。这意味着支持结束后,我们将没有补丁(甚至没有安全补丁)。

Spring 6:Spring 的最新版本 Spring 6 将需要 Java 17 才能运行,由于有许多库与它们一起工作,因此它们也将迁移到 Java 17。如果您的应用程序依赖于 Spring 框架,您一定要考虑迁移到 Java 17。

Java 17 的免费 Oracle JDK:Java 17 是根据新的 NFTC(甲骨文不收费条款和条件)许可证发布的。因此,在生产和商业用途中再次允许免费使用 Oracle JDK 版本(Java 11 则不允许)。

Java 17 有哪些新功能?

Java 17 引入了多项改进和新功能,这些功能将得到长期支持。

文本块(Text Blocks)

Java 引入了文本块,使代码更具可读性,并避免了不必要的字符串格式化。现在,我们可以将文本放在三引号之间,并在其中包含多个双引号字符串,而无需使用转义字符。下面是一个示例:


  

arduino

复制代码

private static void jsonBlock() { String text = """ { "name": "John Doe", "age": 45, "address": "Doe Street, 23, Java Town" } """; System.out.println(text); }

正如我们所看到的,这使得编写需要大量使用转义字符的 Json 和类似字符串变得非常容易。

此外,结尾的三个双引号表示文本块的开始或输出中的缩进。在上面的示例中,由于双引号的位置是在最后一个字符后两个空格,因此输出中的每一行都有两个空格。

引入了两个新的转义字符,用于在文本块内部使用,"\s "用于添加空格,""用于删除换行。在编写长 SQL 语句时特别有用。


  

ini

复制代码

private static void sqlStatement() { String sql = """ SELECT id, firstName, lastName\s\ FROM Employee WHERE departmentId = "IT" \ ORDER BY lastName, firstName"""; System.out.println(text); }

改进的开关语句

开关表达式允许您从开关情况下返回值,并在赋值等中使用这些返回值。Java 允许使用运算符->(箭头)而不是:(冒号)来表示返回表达式。在此表达式中使用 switch 返回时不需要 break 关键字,但需要使用默认情况。


  

arduino

复制代码

private static void improvedSwitch(Fruit fruit) { String text = switch (fruit) { case APPLE, PEAR -> { System.out.println("the given fruit was: " + fruit); yield "Common fruit"; } case ORANGE, AVOCADO -> "Exotic fruit"; default -> "Undefined fruit"; }; System.out.println(text); }

如果在 switch 用例中进行了多个操作,我们可以使用一个用例块,并使用 yield 关键字表示返回值。这里的 yield 是一个上下文相关的关键字,也就是说,你可以在函数的其他地方使用变量名 yield。

‘record’ Type

record 类是一种特殊的不可变类,用于替代数据传输对象(DTO)。通常,如果我们想在类或方法中使用 POJO,就必须在声明类的同时定义所有的获取器、设置器、等价和哈希码函数。例如,要在其他地方使用 Fruit 示例类,我们就必须像下面这样定义我们的类:


  

arduino

复制代码

public class Fruit { private String name; private int price; //getters, setters, equals and hashcode methods }

虽然我们可以通过使用 lombok 等库减少大部分模板代码,但我们仍可以借助记录进一步减少模板代码。有了记录,同样的代码就变成了。


  

arduino

复制代码

public static void doSomething() { record Fruit(String name, int price) {} Fruit fruit = new Fruit("Apple", 100); System.out.println(fruit.getPrice()); }

正如我们所见,我们甚至可以定义本地记录对象的方法。记录对象会自动为其所有字段提供 getter、setter、equals 和 hashcode 方法。

记录内部的字段不能更改,只能由声明记录时给出的参数定义,如上图所示(但我们可以定义静态变量)。我们还可以定义一个自定义构造函数来验证字段。建议不要覆盖记录的获取器和设置器,否则会影响记录的不变性。下图是一个包含多个构造函数、静态变量和方法的记录示例:


  

csharp

复制代码

public record Employee(int id, String firstName, String lastName) { static int empToken; // Compact Constructor public Employee { if (id < 100) { throw new IllegalArgumentException( "Employee Id cannot be below 100."); } if (firstName.length() < 2) { throw new IllegalArgumentException( "First name must be 2 characters or more."); } } // Alternative Constructor public Employee(int id, String firstName) { this(id, firstName, null); } // Instance methods public void getFullName() { if (lastName == null) System.out.println(firstName()); else System.out.println(firstName() + " " + lastName()); } // Static methods public static int generateEmployeeToken() { return ++empToken; } }

记录类的其他一些特点是

  1. 可以在记录中使用嵌套类和接口。
  2. 您也可以拥有嵌套记录,这些记录将隐含为静态记录。
  3. 记录可以实现接口
  4. 可以创建通用记录类
  5. 记录可序列化。

有关记录的更多信息,请点击此处:

密封 "类

sealed 类可以让我们更好地控制哪些类可以扩展我们的类。在 Java 11 中,类可以是 final 类,也可以是扩展类。如果想控制哪些类可以扩展超类,可以将所有类放在同一个包中,并赋予超类包可见性。不过,从包外部访问超类已经不可能了。下面的代码就是一个例子:


  

scala

复制代码

public abstract class Fruit { } public final class Apple extends Fruit { } public final class Pear extends Fruit { }


  

scala

复制代码

private static void problemSpace() { Apple apple = new Apple(); Pear pear = new Pear(); Fruit fruit = apple; class Avocado extends Fruit {}; }

在这里,我们不能阻止 Avocado 扩展 Fruit 类。如果我们将 Fruit 类设为默认类,那么将 apple 赋值给 fruit 对象将无法编译。因此,现在我们可以使用密封类,只允许特定的类扩展我们的超类。下面是一个例子:


  

scala

复制代码

public abstract sealed class FruitSealed permits AppleSealed, PearSealed { } public non-sealed class AppleSealed extends FruitSealed { } public final class PearSealed extends FruitSealed { }

正如我们所看到的,我们使用新的关键字 sealed 来表示这是一个密封类。我们使用 permits 关键字定义了可以扩展的类。任何对密封类进行扩展的类都可以像 PearSealed 一样是最终类,或者像 AppleSealed 一样,通过在声明类时使用非密封关键字,可以被其他类扩展。

这种实现方式允许 AppleSealed 被分配给 FruitSealed 类,但不允许任何未使用 permits 关键字定义的其他类扩展 FruitSealed 类。有关密封类的更多信息,请点击此处。

使用 "instance of "进行模式匹配

在 Java 11 中,我们通常使用 instance of 操作符来检查对象是否属于某个类。如果我们想在实例检查返回 true 时对该对象执行某些操作,则需要显式地将该对象转为该特定类。下面是一个示例:


  

java

复制代码

private static void oldStyle() { Object o = new Grape(Color.BLUE, 2); if (o instanceof GrapeClass) { Grape grape = (Grape) o; System.out.println("This grape has " + grape.getPits() + " pits."); } }

在这里,我们需要显式地将对象转换为葡萄类型,然后找出葡萄果核的数量。有了 Java 17,我们可以将其改为:


  

typescript

复制代码

private static void patternMatchingInJava17() { Object o = new Grape(Color.BLUE, 2); if (o instanceof Grape grape) { System.out.println("This grape has " + grape.getPits() + " pits."); } }

我们可以将校验实例与 &&(和)条件配对,但不能与 ||(或)条件配对,因为在 "或 "条件下,即使校验实例返回 false,语句也可以到达另一个条件。

如果检查实例返回 true,变量 grape 的作用域甚至可以超出 if 代码块。在下面的示例中,如果对象不是 Grape 类型,将抛出 Runtime Exception,因此编译器在执行打印语句时可以确定葡萄对象应该存在。有关使用 instance of 进行模式匹配的更多信息,请点击此处。


  

typescript

复制代码

private static void patternMatchingScopeException() { Object o = new Grape(Color.BLUE, 2); if (!(o instanceof Grape grape)) { throw new RuntimeException(); } System.out.println("This grape has " + grape.getPits() + " pits."); }

有用的 NullPointerException

在 Java 11 中,当我们收到 NullPointerException 时,我们只能获得发生异常的行号,但无法获得解析为空的方法或变量。Java 17 改进了消息传递方式,NullPointerException 消息还会告诉我们导致 NullPointerException 的确切方法调用。


  

typescript

复制代码

public static void main(String[] args) { HashMap<String, Grape> grapes = new HashMap<>(); grapes.put("grape1", new GrapeClass(Color.BLUE, 2)); grapes.put("grape2", new GrapeClass(Color.white, 4)); grapes.put("grape3", null); var color = ((Grape) grapes.get("grape3")).getColor(); }

正如我们在这里看到的,我们正试图获取 "grape3 "对象的颜色,而该对象是空的。当我们比较 Java 11 和 Java 17 中的错误信息时,我们可以看到错误信息的不同之处,因为现在我们可以清楚地知道,对映射中的空对象调用 get 方法导致了异常。


  

php

复制代码

// Java 11 Exception in thread "main" java.lang.NullPointerException at com.rg.java17.HelpfulNullPointerExceptions.main(HelpfulNullPointerExceptions.java:13)


  

kotlin

复制代码

// Java 17 Exception in thread "main" java.lang.NullPointerException: Cannot invoke "com.rg.java17.Grape.getColor()" because the return value of "java.util.HashMap.get(Object)" is null at com.rg.java17.HelpfulNullPointerExceptions.main(HelpfulNullPointerExceptions.java:13)

更多改进

支持紧凑的数字格式

为 NumberFormat 类添加了一个工厂方法,以便根据 Unicode 标准将数字格式化为紧凑、人类可读的形式。有 "短 "和 "长 "两种格式可供选择,示例如下:


  

ini

复制代码

NumberFormat shortFormat = NumberFormat.getCompactNumberInstance(Locale.ENGLISH, NumberFormat.Style.SHORT); System.out.println(shortFormat.format(1000))


  

ini

复制代码

NumberFormat longFormat = NumberFormat.getCompactNumberInstance(Locale.ENGLISH, NumberFormat.Style.LONG); System.out.println(shortFormat.format(1000))


  

arduino

复制代码

// Output 1K 1 thousand

新增日期间支持

DateTime 模式添加了新模式 "B",允许指定一天中的时间。


  

less

复制代码

DateTimeFormatter timeOfDayFomatter = DateTimeFormatter.ofPattern("B"); System.out.println(timeOfDayFomatter.format(LocalTime.of(8, 0))); System.out.println(timeOfDayFomatter.format(LocalTime.of(13, 0))); System.out.println(timeOfDayFomatter.format(LocalTime.of(20, 0))); System.out.println(timeOfDayFomatter.format(LocalTime.of(23, 0))); System.out.println(timeOfDayFomatter.format(LocalTime.of(0, 0)));


  

arduino

复制代码

// Output in the morning in the afternoon in the evening at night midnight

性能基准

与 Java 11 相比,Java 17 在内存使用和时间复杂性方面也有所改进。其中一项基准测试通过让两个版本的代码完成一系列任务,对它们的性能进行了统计。完整的结果和任务描述可以在这里找到。

其中一些一般结果如下

  1. 在 G1GC(默认垃圾回收器)方面,Java 17 比 Java 11 快 8.66%,比 Java 16 快 2.41%。

  2. 对于 ParallelGC(并行垃圾回收器),Java 17 比 Java 11 快 6.54%,比 Java 16 快 0.37%。

  3. 并行垃圾回收器(Java 17 中可用)比 G1 垃圾回收器(Java 11 中使用)快 16.39%。

从 Java 11 迁移到 Java 17 可以带来很多好处,包括新功能和更高的性能。但是,必须注意迁移过程中可能出现的潜在瓶颈。因此,如果我们在项目中使用外部库,就应该格外小心。了解这些潜在问题并采取必要措施加以解决,就能确保顺利成功地迁移到 Java 17!

⚠️:文章翻译上如有语法不准确或者内容纰漏,欢迎各位评论区指正。

【关于TalkX】

TalkX是一款基于GPT实现的IDE智能开发插件,专注于编程领域,是开发者在日常编码中提高编码效率及质量的辅助工具,TalkX常用的功能包括但不限于:解释代码、中英翻译、性能检查、安全检查、样式检查、优化并改进、提高可读性、清理代码、生成测试用例、有趣的图表生成以及新增语音助手托克斯等。

TalkX建立了全球加速网络,不需要考虑网络环境,响应速度快,界面效果和交互体验更流畅。并为用户提供了Open AI的密钥,不需要自备ApiKey,不需要自备账号,不需要魔法。

TalkX产品支持:JetBrains (包括 IntelliJ IDEA、PyCharm、WebStorm、Android Studio)、HBuilder、VS Code、Goland.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 17 & Java 11:新功能探索与改进措施知多少? 的相关文章

  • 使用 Spring MVC 返回 PDF 文件

    实际上 我有这个功能 我有一个框架 可以在其中设置 URL ip port birt preview report report rptdesign format pdf parameters 并且该框架呈现 PDF 文件 但我想隐藏该网址
  • 使用 xuggle 将 mp3 转换为 wav 出现异常

    我正在尝试将 mp3 转换为 wav 代码在这里 String mp3 F work pic2talk38512 mp3 String wav F work pic2talk38512 wav TranscodeAudioAndVideo
  • 警告:跳过条目,因为它不是绝对 URI。 NetBeans 中的 GlassFish

    我成功安装了 GlassFish 但是 当我启动服务器时 我收到两条警告消息 警告 跳过条目 因为它不是绝对 URI 那是关于什么的 Launching GlassFish on Felix platform Aug 09 2014 10
  • 根据哈希值确认文件内容

    我需要 检查完整性 content文件数量 文件将写入 CD DVD 可能会被复制多次 这个想法是识别正确复制的副本 在从 Nero 等中删除它们之后 我对此很陌生 但快速搜索表明Arrays hashCode byte http down
  • Spring 术语中命令、表单、业务和实体对象之间的区别?

    我试图理解这些对象在松散耦合系统方面的差异 业务对象与实体对象相同吗 我可以使用 MVC 中的业务或实体对象作为我的命令对象吗 命令对象与表单对象相同吗 只是寻找 Spring 术语和用法中对象类型的说明 我在 stackoverflow
  • Java 反射:如何检索匿名内部类?

    我在另一个类中有一个匿名内部类 SomeClass Both SomeClass class getClasses and SomeClass class getDeclaredClasses 返回空数组 我在中找不到一些关于此的提示Cla
  • 给定一个单词列表 - 在 java 中完成单词的好的算法是什么?权衡:速度/效率/内存占用

    我正在探索潜在的免费 付费应用程序的硬件 软件要求 最终目标是移动 Java 应用程序 该应用程序将从这个简单的目标开始 给定数据库中相关单词的列表 能够对单个字符串输入进行单词补全 换句话说 我已经知道数据库的内容 但算法的内存占用 速度
  • Java 7 中 Object 和 int 的比较

    最近我偶然发现了一个问题 让我停下来思考 对我来说 下面的代码应该总是会触发错误 但是当我的一位同事问我为什么 Eclipse 没有显示错误时 我无法回答任何问题 class A public static void main String
  • java.lang.IllegalArgumentException:addChild:子名称“/”不唯一

    java lang IllegalArgumentException addChild 子名称 不唯一 通过在 tomcat webapps 文件夹中启用和禁用 saml 单点登录来替换现有 war 文件时遇到此问题 我正在使用 apach
  • activemq 的优先级

    我们目前正在使用 JMS 和 activemq 5 5 1 开发一个应用程序 我们想为某些消息定义更高的优先级 这将使它们首先被消耗 设置生产者和消费者后 通过spring 3 1 JMSTemplate 优先级并不能完全发挥作用 事实上
  • Akka 和 spring 配置

    我正在尝试将 akka 与 spring 结合起来 但没有成功 基本上 我的应用程序似乎不习惯读取 akka 模式 具有架构的 service context xml 的一部分
  • 链表中的虚拟节点

    问 什么时候使用它们 作业问题 列表中的第一个和最后一个节点 有时用作列表中的第一个和最后一个节点 从未用作列表中的第一个和最后一个节点 维基百科说 哨兵节点是与链接一起使用的专门指定的节点 列表和树作为遍历路径终止符 哨兵节点的作用是 不
  • Storm Spout 未收到 Ack

    我已经开始使用storm 所以我使用创建简单的拓扑本教程 https github com nathanmarz storm wiki Tutorial 当我运行我的拓扑时LocalCluster一切看起来都很好 我的问题是我没有得到元组的
  • 将变量从 jenkins 传递到 testng.xml

    我想根据从詹金斯传递的变量运行测试用例 例如 选择您要运行的测试用例 测试用例一 测试用例二 在 pom xml maven 中
  • 计算移动的球与移动的线/多边形碰撞的时间(2D)

    我有一个多边形 里面有一个移动的球 如果球撞到边界 它应该反弹回来 My current solution I split the polygon in lines and calculate when the ball hits the
  • 如何修改生成的SOAP请求?

    我正处于创建输出拦截器并从 SOAP 消息中获取 OuputStream 的阶段 但是 如何在将 SOAP 信封发送到端点之前对其进行修改呢 我想删除一些 xml 元素 一种方法是获取文档并通过 XSLT 转换运行它 您可以通过调用来获取拦
  • 如何使用 Nimbus LookAndFeel 更改 JToolTip 的背景颜色?

    在使用 Nimbus LookAndFeel 的基于 Swing 的 Java 应用程序中 我尝试设置工具提示的背景颜色 因此 我创建了 JToolTip 的子类 并通过重写 createToolTip 在我的组件中使用它 到目前为止一切正
  • Drools:为什么是无状态会话?

    Drools 使用会话来存储运行时数据 为此 有两种会话 无状态和有状态 与无状态会话相比 有状态会话允许迭代调用 并且似乎比无状态会话具有所有优势 那么为什么会有无状态会话呢 他们服务的目的是什么 与有状态会话相比 它们的优势是什么 谢谢
  • spring data jpa 过滤 @OneToMany 中的子项

    我有一个员工测试实体是父实体并且FunGroup信息子实体 这两个实体都是通过employeeId映射 我需要一种方法来过滤掉与搜索条件匹配的子实体 以便结果仅包含父实体和子实体 满足要求 员工测试类 Entity name Employe
  • 如何在 Servlet 中打开弹出窗口,然后重定向页面

    我想在调用 servlet 时打开一个弹出窗口 然后想将 servlet 重定向到某个 jsp page 这就是我所做的 protected void doGet HttpServletRequest request HttpServlet

随机推荐

  • 企业电子招标采购系统源码Spring Cloud + Spring Boot + MybatisPlus + Redis + Layui + 前后端分离 + 二次开发

    项目说明 随着公司的快速发展 企业人员和经营规模不断壮大 公司对内部招采管理的提升提出了更高的要求 在企业里建立一个公平 公开 公正的采购环境 最大限度控制采购成本至关重要 符合国家电子招投标法律法规及相关规范 以及审计监督要求 通过电子化
  • 行业大模型训练经验分享&落地思考

    大家好 行业大模型一直是大家关注的内容 恰逢我司也做了行业知识大模型 借此机会聊一聊行业大模型训练Trick以及行业大模型落地想法 但有些并没有什么理论依据 全是自己的实验经验 结论 可能跟大家有所不同 喜欢欢迎点赞 收藏 关注 文末提供技
  • 题解 | #反转链表#很简单,新建节点插在末尾就行

    华为车bu最新情况汇总 华为车bu最新情况汇总 某小厂实习面经 已oc 华子开了 比亚迪vs华为 麻烦大家帮忙比较一下offer 帮选offer 秋招决赛圈 offer选择 太难了呜呜呜帮忙选一下Offer 晒一晒我的offer 38210
  • java spring cloud 企业电子招标采购系统源码:营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展

    项目说明 随着公司的快速发展 企业人员和经营规模不断壮大 公司对内部招采管理的提升提出了更高的要求 在企业里建立一个公平 公开 公正的采购环境 最大限度控制采购成本至关重要 符合国家电子招投标法律法规及相关规范 以及审计监督要求 通过电子化
  • 评论送书:以企业架构为中心的SABOE数字化转型五环法

    0 1 传统企业数字化转型面临诸多挑战 即将过去的2023年 chatGPT大模型 数据资产入表等事件的发生 标志着数字经济正在加速发展 数字经济是人类社会继农业经济 工业经济之后的第三种经济形态 将推动生产方式 生活方式和治理方式深刻变革
  • 【Linux】进程周边001之进程概念

    樊梓慕 个人主页 个人专栏 C语言 数据结构 蓝桥杯试题 LeetCode刷题笔记 实训项目 C Linux 每一个不曾起舞的日子 都是对生命的辜负 目录 前言 1 基本概念 2 描述进程 PCB 2 1task struct Linux中
  • 云主机做什么用的?

    我们知道云主机最常见的用途就是用来建网站 然而它并不止这一项功能 云服务器并不只是搭建网站的一项工具 它还可以 用做以下事项 网络业务拓展 针对云服务商而言 服务器本身就是一项业务拓展的方式 通过将其分割成多个虚拟空间可以分别租用给不同客户
  • CDN是如何实现网络加速的?

    最近很多网站用户都在谈论香港服务器的同时 也在讨论CDN加速服务的相关话题 谈论的目的就是想通过相关的设置和服 务来有一个好的上网体验 同时减少同行DDOS的攻击 那么 对网站进行CDN加速服务到底能够让网络实现哪些功能呢 第一 能实现全球
  • CDN可以给企业网站带来哪些优势?

    企业网站带来哪些优势 现在企业最关心的问题 就是我的网站能不能打开 用户访问到的是不是正常的页面 网站是否能够正常运营 而互联网是 一个开放式的平台 网站是否能够正常运营和很多因素都有关系 比如服务器 带宽 CPU处理能力等等 而最重要的就
  • Java版 招投标系统简介 招投标系统源码 java招投标系统 招投标系统功能设计

    项目说明 随着公司的快速发展 企业人员和经营规模不断壮大 公司对内部招采管理的提升提出了更高的要求 在企业里建立一个公平 公开 公正的采购环境 最大限度控制采购成本至关重要 符合国家电子招投标法律法规及相关规范 以及审计监督要求 通过电子化
  • java 版本企业招标投标管理系统源码+多个行业+tbms+及时准确+全程电子化

    项目说明 随着公司的快速发展 企业人员和经营规模不断壮大 公司对内部招采管理的提升提出了更高的要求 在企业里建立一个公平 公开 公正的采购环境 最大限度控制采购成本至关重要 符合国家电子招投标法律法规及相关规范 以及审计监督要求 通过电子化
  • 远程办公模式的流行:以灵活性应对当今工作环境

    随着科技的进步和全球化的发展 远程办公模式正变得越来越流行 本文将探讨远程办公模式的流行趋势 以及它如何为当今不断变化的工作环境带来灵活性和适应性 1 科技的进步 随着互联网 云计算和即时通讯工具的发展 远程办公变得更加便捷和高效 无论身在
  • 揭秘移动电源容量:虚标还是品质问题?

    在购买移动电源时 我们经常会听到关于移动电源容量的一些争议 有人认为移动电源的容量存在虚标 实际容量远远达不到标称值 有人认为移动电源的品质存在问题 转换率低下导致实际充电效果不佳 还有人说使用久了之后 电池会有损耗 导致充电效果打折 那么
  • jdk11启动jdk8 jar包报错

    一 前言 开发使用jdk8版本开发的服务打包后 使用jdk11版本的java启动服务 导致出现以下报错 java lang NoClassDefFoundError javax xml bind DatatypeConverter 二 解决
  • jenkins设置中文

    安装以下两个插件 Locale plugin Localization Chinese Simplified 在jenkins的system配置中找到locale配置项 在locale配置项的默认语言中填入以下内容保存 zh CN 重启je
  • Windows的最大威胁是尽然是“套皮安卓”的鸿蒙系统

    前言 自从鸿蒙问世以来 套皮安卓的言论就没有断过 但是那些现在还在说鸿蒙是套皮安卓的人 你知不知道微软已经组建了专门的 战略团队 来对付鸿蒙 因为这些专业的人早已经知道鸿蒙将是Windows的巨大威胁了 微软作为一个垄断操作系统多年的巨无霸
  • 短视频时代:如何设计吸引人的黄金3秒开头

    在短视频时代 一个好的开头对于视频的点击率和观看率至关重要 黄金3秒 作为短视频开头最关键的时刻 决定了观众是否愿意继续观看你的视频 那么 如何设计一个吸引人的黄金3秒开头呢 下面将为你揭秘抓住观众注意力的秘诀 一 利用好奇心 好奇心是人类
  • 从大厂到高校,鸿蒙人才“红透半边天”

    前言 近两个月来 纯血鸿蒙未发先火 连带让鸿蒙人才的培养和争夺 也红透半边天 最近 华为人才在线官网公示了2023年教育部产学合作协同育人项目华为第二批项目立项 其中 哈尔滨工业大学 天津大学 电子科技大学等16所高校鸿蒙项目立项已通过 这
  • 深入探讨Android启动优化策略

    深入探讨Android启动优化策略 在当今激烈竞争的移动应用市场 应用的启动速度直接影响着用户的第一印象和满意度 作为主流的移动操作系统之一 Android的启动优化是开发者必须关注的关键领域 本文将详细介绍一些强大有效的Android启动
  • Java 17 & Java 11:新功能探索与改进措施知多少?

    7是Java编程语言的最新 LTS 长期支持 版本 于 2021年9月14日发布 如果您目前使用的是Java11 那么也许是时候考虑迁移到 Java 17啦 方便我们体验新功能以及了解新版本的改善措施 在本文中 我们将讨论 Java 17