コアサーバーV2プランご契約でドメイン更新費用が永久無料
2024年8月26日

Java 堆空间与堆栈 - Java 中的内存分配

前段时间,我写了几篇关于Java 垃圾收集和Java 按值传递的文章。之后,我收到了很多电子邮件,要求我解释Java 堆空间、Java 堆栈内存、Java 中的内存分配以及它们之间的区别。你会看到很多关于 Java、Java EE 书籍和教程中堆和堆栈内存的参考资料,但很难从程序的角度完整解释什么是堆和堆栈内存。 Java 堆空间 Java 运行时使用 Java 堆空间为对象和 JRE 类分配内存。每当我们创建一个对象时,它总是在堆空间中创建。垃圾收集在堆内存上运行,以释放没有任何引用的对象使用的内存。在堆空间中创建的任何对象都具有全局访问权限,并且可以从应用程序的任何位置引用。 Java 堆栈内存 Java 堆栈内存用于执行线程。它们包含方法特定的短暂值以及对从方法引用的堆中其他对象的引用。堆栈内存始终按 LIFO(后进先出)顺序引用。每当调用一个方…
2024年8月26日

Java equals() 和 hashCode()

Java equals() 和 hashCode() 方法存在于 Object 类中。因此每个 Java 类都获得 equals() 和 hashCode() 的默认实现。在本文中,我们将详细研究 Java equals() 和 hashCode() 方法。 Java 的 equals() Object 类定义 equals() 方法如下: public boolean equals(Object obj) { return (this == obj); } 根据 equals() 方法的 java 文档,任何实现都应遵循以下原则。 对于任何对象 x,x.equals(x)都应该返回true。 对于任何两个对象 x 和 y,当且仅当返回时才x.equals(y)应返回。truey.equals(x)true 对于多个对象 x、y 和 z,如果x.equals(y)返回true并且y.equals(z)返回t…
2024年8月26日

Java do while 循环

Java do-while 循环用于连续执行语句块,直到给定的条件为真。Java 中的 do-while 循环与while 循环类似,不同之处在于在执行语句后检查条件,因此 do while 循环可确保循环至少执行一次。 Java 执行 while 循环 Java do while循环语法如下: do { // statements } while (expression); do-while循环expression必须返回布尔值,否则将引发编译时错误。 Java 流程图 Java do-while 循环示例 这是一个简单的 java do-while 循环示例,用于打印从 5 到 10 的数字。 package com.journaldev.javadowhileloop; public class JavaDoWhileLoop { public static void main(String[] a…
2024年8月26日

Java 依赖注入 - DI 设计模式示例教程

Java 依赖注入设计模式允许我们删除硬编码的依赖项,并使我们的应用程序松散耦合、可扩展和可维护。我们可以在 Java 中实现依赖注入,将依赖项解析从编译时移至运行时。 Java 依赖注入 Java 依赖注入似乎很难从理论上理解,所以我将举一个简单的例子,然后我们将看到如何使用依赖注入模式在应用程序中实现松散耦合和可扩展性。假设我们有一个应用程序,我们用它来EmailService发送电子邮件。通常我们会像下面这样实现它。 package com.journaldev.java.legacy; public class EmailService { public void sendEmail(String message, String receiver){ //logic to send email System.out.println("Email sen…
2024年8月26日

Java 复制文件 - 在 Java 中复制文件的 4 种方法

Java 复制文件是一种非常常见的操作。但是java.io.File类没有任何快捷方法可以将文件从源复制到目标。在这里,我们将了解在 java 中复制文件的四种不同方法。 Java 复制文件 Java 复制文件 - 流 这是 Java 中文件复制的常规方法。在这里我们创建两个文件 - 源文件和目标文件。然后我们从源文件创建InputStream ,并使用OutputStream将其写入目标文件,以进行 Java 复制文件操作。以下是可用于使用流进行 Java 复制文件的方法。 private static void copyFileUsingStream(File source, File dest) throws IOException { InputStream is = null; OutputStream os = null; try { is = new FileInputStream…
2024年8月26日

Java 捕获多个异常,重新抛出异常

在 Java 7 中,catch 块已得到改进,可以在单个 catch 块中处理多个异常。如果您要捕获多个异常并且它们具有相似的代码,则使用此功能将减少代码重复。让我们通过一个例子来了解 Java 捕获多个异常的功能。 Java 捕获多个异常 在 Java 7 之前,我们习惯逐个捕获多个异常,如下所示。 catch (IOException ex) { logger.error(ex); throw new MyException(ex.getMessage()); catch (SQLException ex) { logger.error(ex); throw new MyException(ex.getMessage()); } 在 Java 7 中,我们可以在单个 catch 块中捕获这两个异常,如下所示: catch(IOException | SQLException ex){ l…
2024年8月26日

Java Callable Future 示例

Java Callable 和 Future 在多线程编程中被广泛使用。在前几篇文章中,我们学习了很多有关Java 线程的知识,但有时我们希望线程可以返回一些我们可以使用的值。Java 5 在并发包中引入了java.util.concurrent.Callable接口,它类似于 Runnable 接口,但它可以返回任何对象并能够抛出异常。 Java 可调用 Java Callable 接口使用 Generic 来定义 Object 的返回类型。Executors类提供了有用的方法来在线程池中执行 Java Callable。由于可调用任务并行运行,我们必须等待返回的对象。 Java 的未来 Java 可调用任务返回java.util.concurrent.Future对象。使用Java Future对象,我们可以找出可调用任务的状态并获取返回的对象。它提供了g…
2024年8月26日

Java 8 Stream - Java Stream

欢迎阅读 Java 8 Stream API 教程。在最近的几篇 Java 8 文章中,我们研究了Java 8 接口变化、功能接口和 Lambda 表达式。今天,我们将研究 Java 8 中引入的主要 API 之一 - Java Stream。 Java 8 流 Java 8 流 集合和 Java 流 Java 8 Stream 中的函数接口 Function 和 BiFunction Predicate 和 BiPredicate 消费者和 BiConsumer 供应商 java.util.Optional java.util.Spliterator Java 流的中间和终端操作 Java 流短路操作 Java 流示例 创建 Java 流 将 Java 流转换为集合或数组 Java 流中间操作 Java 流终端操作 Java 8 Stream API 限制 Java 流 在研究 Java Stream API 示例之前,让我们先看看为什么需要它。假设…
2024年8月26日

Java 8 接口变化 - 静态方法、默认方法

Java 8 接口变化包括接口中的静态方法和默认方法。在 Java 8 之前,我们只能在接口中使用方法声明。但是从 Java 8 开始,我们可以在接口中使用默认方法和静态方法。 Java 8 接口 设计接口一直是一项艰巨的工作,因为如果我们想在接口中添加其他方法,就需要更改所有实现类。随着接口的老化,实现它的类的数量可能会增长到无法扩展接口的程度。这就是为什么在设计应用程序时,大多数框架都提供了一个基本实现类,然后我们扩展它并覆盖适用于我们应用程序的方法。让我们研究一下默认接口方法和静态接口方法,以及它们在 Java 8 接口更改中引入的原因。 Java 接口默认方法 为了在 Java 接口中创建默认方法,我们需要在方法签名中使用“ default ”关键字。例如, package com.journaldev.java8.defaultmethod; pub…
2024年8月26日

Java 15 功能

按照六个月周期的传统,在 ​​2020 年 3 月 17 日发布Java 14之后,我们现在有了 Java 15,这是下一个非 LTS 版本,将于 2020 年 9 月 15 日推出。 Java 15 功能 下面简要介绍一下 Java 15 的一些特性: 密封类(预览)– JEP 360 instanceof的模式匹配(第二个预览) – JEP 375 记录(第二次预览)– JEP 359 文本块(标准)– JEP 378 隐藏类 – JEP 371 删除 Nashorn JavaScript 引擎 – JEP 372 重新实现旧版 DatagramSocket API – JEP 373 禁用并弃用偏向锁 – JEP 374 Shenandoah:低暂停时间垃圾收集器 – JEP 379 删除 Solaris 和 SPARC 端口 – JEP 381 外部内存访问 API(第二个孵化器)– JEP 383 弃用 RMI 激活并将其删除 – JEP 385 Mac OS 上…