2024年8月26日

Java 程序示例中的 Google 搜索

前段时间,我在寻找一种使用 Java 程序搜索 Google 的方法。我很惊讶地发现 Google 有一个网络搜索 API,但它早已被弃用,现在没有标准方法来实现这一点。基本上,谷歌搜索是一个 HTTP GET 请求,其中查询参数是 URL 的一部分,之前我们已经看到有不同的选项可以执行此搜索,例如Java HttpUrlConnection或Apache HttpClient。但问题更多地与解析 HTML 响应并从中获取有用信息有关。这就是为什么我选择使用jsoup,它是一个开源 HTML 解析器,能够从给定的 URL 获取 HTML。下面是一个简单的程序,用于在 Java 程序中获取谷歌搜索结果,然后对其进行解析以找出搜索结果。 package com.journaldev.jsoup; import java.io.IOException; import jav…
2024年8月26日

如何从 Java 类生成 XSD

在前几篇文章中,我们了解了Java JAXB以及如何从 XSD 生成 Java 类。今天我们将学习如何从 Java 类生成 XSD。 从 Java 类生成 XSD 我们将在 Maven 项目中使用JAXB-2 Maven 插件从 java 类生成 XSD。 JAXB2 Maven 插件使用 JAXB SchemaGenerator 实用程序从 java 类生成 XSD。 Java 类应该具有 JAXB 注释才能被该插件使用。 最低 Java 版本要求为 Java 5 首先创建一个新的 maven 项目,您可以指定任何名称、组 ID 和工件 ID。一旦我们构建了我们的项目,它将在target/generated-resources/schemagen目录中生成 XSD 类。构建后,我们的项目结构将如下图所示。这是我们最终pom.xml的文件: <project xmlns="https://maven…
2024年8月26日

Java 中的垃圾收集

Java 中的垃圾收集是一个先进主题。Java GC 知识有助于我们微调应用程序运行时性能。 Java 中的垃圾收集 在 Java 中,程序员无需关心销毁不再使用的对象。垃圾收集器会处理这件事。 垃圾收集器是一个在后台持续运行的守护线程。基本上,它通过销毁无法访问的对象来释放堆内存。 无法访问的对象是程序的任何部分都不再引用的对象。 我们可以通过JVM选项为我们的 Java 程序选择垃圾收集器,我们将在本教程的后面部分研究这些内容。 自动垃圾收集如何工作? 自动垃圾收集是一个查看堆内存、识别(也称为“标记”)无法访问的对象并通过压缩销毁它们的过程。这种方法的一个问题是,随着对象数量的增加,垃圾收集时间不断增加,因为它需要遍历整个对象列表,寻找无法访问的对象。然而,对应用程序的实证分析表明,大多数对象都是短暂存在的。这种行为被用来提高 JVM 的…
2024年8月26日

[已修复] Eclipse - Java 编译器级别与已安装的 Java 项目版本不匹配

最近我在Eclipse中导入了一个 Maven 项目,并将构建路径库更改为适用于 Java 1.7。之后,Eclipse 在项目中显示错误,尽管任何文件中都没有显示错误。 Java 编译器级别与安装的 Java 项目版本不匹配 错误描述是:Java compiler level does not match the version of the installed Java project facet.我还将项目编译器合规级别更改为 1.7,但错误仍然没有消失。下面的屏幕截图显示了显示此错误的问题视图。 修复 Java 编译器级别与已安装的 Java 项目版本不匹配的问题 经过一番研究并查看项目属性后,我能够修复此问题。我需要做的就是将Java Project Facet版本从 1.5 更改为 1.7。下面的屏幕截图显示了项目属性窗口,您可以在其中设置项目 facets 版本。就我个…
2024年8月26日

Java中抽象类和接口的区别

抽象类和接口之间的区别是常见的面试问题之一。抽象类和接口是 Java 编程语言的核心部分。选择接口还是抽象类是每个架构师面临的设计决策。在我上一篇文章中,我提供了尽可能多的有关Java 接口和抽象类的详细信息。在这篇文章中,我们将了解抽象类和接口之间的区别,以及何时应该使用接口而不是抽象类,反之亦然。 抽象类和接口之间的区别 abstract关键字用于创建抽象类,并且也可以与方法一起使用,而interface关键字用于创建接口,但不能与方法一起使用。 子类使用extends关键字来扩展抽象类,并且它们需要提供抽象类中所有声明的方法的实现,除非子类也是抽象类,而子类使用implements关键字来实现接口,并且应该为接口中声明的所有方法提供实现。 抽象类可以具有带实现的方法,而接口提供绝对抽象,不能具有任何方法实现。请注意,从…
2024年8月26日

在 Java 中将 char 转换为字符串

有时我们必须在 Java 程序中将字符转换为字符串。在这里,我们将研究在 Java 中将字符转换为字符串的不同方法。我们还将学习如何使用不同的方法将字符数组转换为字符串。 将 char 转换为字符串 Java 这是一个简单的程序,展示了在 Java 中将字符转换为字符串的不同方法。 package com.journaldev.string; public class CharToStringJava { public static void main(String[] args) { // char to string char c = 'a'; String str = String.valueOf(c); // using Character class str = Character.toString(c); // another way str = new Character(c).toStrin…
2024年8月26日

Java 中的构造函数

Java 中的构造函数用于创建类的实例。除了两点之外,构造函数几乎与方法相似 - 其名称与类名相同并且没有返回类型。有时构造函数也被称为初始化对象的特殊方法。 Java 中的构造函数 每当我们使用new关键字创建类的实例时,就会调用构造函数并返回该类的对象。由于构造函数只能将对象返回给类,因此它由 Java 运行时隐式完成,我们不应该为其添加返回类型。如果我们为构造函数添加返回类型,那么它将成为类的方法。这是 Java 运行时区分普通方法和构造函数的方式。假设我们在Employee类中有以下代码。 public Employee() { System.out.println("Employee Constructor"); } public Employee Employee() { System.out.println("Employee Method…
2024年8月26日

Java 中的 ConcurrentHashMap

Java ConcurrentHashMap 类是并发集合类的一部分。它是一个哈希表实现,支持并发检索和更新。它用于多线程环境以避免ConcurrentModificationException。 并发哈希映射 如果我们尝试在迭代过程中修改集合,则会得到结果ConcurrentModificationException。Java 1.5 在包中引入了 Concurrent 类java.util.concurrent来克服这种情况。ConcurrentHashMap 是 Map 实现,它允许我们在迭代过程中修改 Map。ConcurrentHashMap 操作是线程安全的。ConcurrentHashMap 不允许键和值为 null。 Java ConcurrentHashMap 示例 该类与HashMapConcurrentHashMap类似,不同…
2024年8月26日

如何从另一个 Java 程序编译和运行 Java 程序

您是否想过是否可以从另一个 Java 程序编译并运行一个 Java 程序?我们可以用Runtime.exec(String cmd)它来向底层操作系统发出命令。我们将使用相同的方法从另一个 Java 程序编译并运行一个 Java 程序。 从另一个 Java 程序编译并运行 Java 程序 让我们编写一个简单的 java 程序,它将从另一个 java 程序编译并运行。 package com.journaldev.files; public class Test { public static void main(String[] args) { System.out.println("Start"); for(String str : args){ System.out.println(str); } } } 这是我正在编译和运行测试类的另一个程序。 package com.journaldev…
2024年8月26日

[已修复] 可执行文件中的 CPU 类型错误 - 在 MacBook 上安装 Java

我最近买了新的 MacBook Air M1,首先想安装的是 Java。因此,我下载了 OpenJDK tar 文件,将其解压缩并尝试运行“java -version”命令,结果出现了错误: -bash: ./java: 可执行文件中的 CPU 类型错误 这对我来说是新鲜事,我使用 Java 和 Mac OS 已经很久了,从来没有见过这种错误。经过一些在线搜索和调试,我发现发生这种情况是因为新的 MacBook M1 芯片使用的是 ARM64 架构,而从 JDK 站点下载的 OpenJDK 二进制文件是为 x64 架构构建的,而英特尔处理器使用的是 x64 架构。 修复-bash:./java:可执行文件中的 CPU 类型错误 确定问题后,解决方案很简单。我所需要的只是找到一个支持 ARM64 架构的 OpenJDK 实现。经过一番搜索,我找到了Azul Zulu OpenJDK 构建页面,它有…