Marker Interface in Java2025年3月30日 | 阅读 5 分钟 在本节中,我们将讨论 Java 中的标记接口、它的用途、内置(Serializable、Cloneable 和 Remote Interfaces)以及自定义标记接口和示例。 什么是标记接口?不包含方法、字段和常量,但仅用于传递信息给 JVM 或编译器,以启用某种行为或提供运行时信息,这样的接口被称为标记接口。换句话说,一个空接口被称为标记接口或标签接口。它在运行时为对象提供类型信息。正因为如此,JVM 和编译器才能获得关于对象的额外信息。Serializable 和 Cloneable 接口是标记接口的例子。简而言之,它向 JVM 发出信号或命令。 标记接口的声明与 Java 中的接口相同,但接口必须为空。例如 标记接口有两种替代方案,它们产生与标记接口相同的结果。
标记接口的用途标记接口用作标签,通过消息通知 Java 编译器,以便它可以为实现它的类添加一些特殊行为。如果我们拥有有关类的某些信息,并且这些信息永远不会改变,那么在这些情况下,Java 标记接口非常有用,可以用它来表示相同的信息。实现一个空接口会告诉编译器执行某些操作。 它用于逻辑上划分代码,并且是分类代码的好方法。对于开发 API 和 Spring 等框架更有用。 内置标记接口在 Java 中,内置标记接口是 JDK 中已存在并可供使用的接口。有许多内置标记接口,其中一些是
让我们逐一详细讨论。 Cloneable 接口Java 中的Cleanable 接口也是一个标记接口,属于 java.lang 包。它会创建一个具有不同名称的对象副本(复制品)。我们可以将接口实现到要克隆的对象所属的类中。它指示 Object 类的 clone() 方法。如果我们没有在类中实现 Cloneable 接口并调用 clone() 方法,它会抛出 ClassNotSupportedException。 请注意,实现 Cloneable 接口的类必须用公共方法重写 clone() 方法。让我们看一个例子。 Product.java 输出 Enter product ID: 139872 Enter product name: Printer Enter product Cost: 3459.67 -------Product Detail-------- Product ID: 139872 Product Name: Printer Product Cost: 3459.67 Serializable 接口这是 Java 中的一个标记接口,定义在 java.io 包中。如果我们想使类可序列化,则必须实现 Serializable 接口。如果一个类实现了 Serializable 接口,我们就可以序列化或反序列化该类的对象的状态。 序列化(将对象转换为字节流)是一种机制,其中对象的状态从内存中读取并写入文件或数据库。反序列化(将字节流转换为对象)是序列化的反向操作,意味着从文件或数据库读取对象状态并将其写回内存称为对象的反序列化。 ![]() 可以使用 ObjectOutputStream 类实现序列化(写入),可以使用 ObjectInputStream 类实现反序列化(读取)。 让我们看一个序列化和反序列化的例子。 序列化示例Employee.java SerializationExample.java 输出 Data has been read from the file. 反序列化示例让我们反序列化对象的状态。 DeserializationExample.java 输出 1187345 Andrew Remote 接口Remote 接口是一个标记接口,属于 java.rmi 包。它标记一个对象为远程对象,可以从另一台机器(主机)访问。如果我们想使一个对象成为远程对象,则必须实现 Remote 接口。它标识其方法可以从非本地 JVM 调用的接口。任何远程对象都必须直接或间接实现该接口。 让我们定义一个 Remote 接口并在 Java 程序中实现它。 定义 Remote 接口实现 Remote 接口有两种方法可以实现 Remote 接口
AddAllRemote.java 创建并启动远程应用程序Server.java 创建并启动客户端应用程序Client.java 自定义标记接口除了内置标记接口之外,Java 还允许我们创建自己的标记接口。让我们看一个例子。 CustomMarkerInterfaceExample.java 输出 Car is a vehicle. Yes, engine is working. |
在 Java 8 中,anyMatch() 是在 Stream 接口中定义的一个方法。它执行一个短路终端操作。在本节中,我们将通过一个示例讨论 Java 8 Stream 中的 anyMatch() 方法。在进入正题之前,我们将首先理解中间和...
5 分钟阅读
在 Java 中,ArrayList 和 String 数组都用于存储一组对象。ArrayList 是一种用于存储对象组的数据结构,而字符串数组用于存储一组字符串值。有时我们需要...
阅读 3 分钟
产品最大化问题,也称为背包问题,是计算机科学中经典的优化问题。给定一组物品,每件物品都有重量和价值,目标是确定在背包容量限制下要包含的物品的最大价值...
7 分钟阅读
? File: SwapWithoutTemp .java public class SwapWithoutTemp { public static void main(String args[]) { String a = "Love"; String b = "You"; System.out.println("Before swap: " + a + " " + b); a = a + b; b = a.substring(0, a.length() - b.length()); a = a.substring(b.length()); System.out.println("After : " + a + " " +...
阅读1分钟
Java 21 中引入的 switch 表达式和语句的模式匹配功能允许开发人员在 switch 语句中匹配特定模式,使代码更简洁、更易读。要使用 switch 语句中的模式匹配,我们只需使用 case 关键字后跟...
阅读9分钟
Java 作为一种多功能编程语言,为开发人员提供了各种工具和结构来高效地管理和处理数据。用于处理数据的两个最广泛使用的机制是集合(Collections)和流(Streams)。它们各自服务于不同的目的,并具有各自的优点和...
阅读 4 分钟
在 Java 编程的错综复杂的结构中,静态绑定和动态绑定的概念在决定方法的行为及其调用方面起着关键作用。这些绑定机制控制方法调用与其实现的链接,影响了...
阅读 3 分钟
JSON 是一种非常轻量级的数据交换格式,以键值对的形式存储数据。在本节中,我们将了解如何将 JSON 数据转换为 XML 或 XML 数据转换为 JSON。很多时候,我们可能会遇到需要转换的情况...
阅读 3 分钟
DRY(Don't Repeat Yourself,不要重复自己)方法是一种帮助程序员编写更清晰、更易于管理的密码的思维方式。它超越了简单的编码指南。在 Java 编程方面,DRY 代表 Don't Repeat Yourself。它鼓励程序员只编写一次逻辑,并...
阅读 4 分钟
Java 是一种通用、面向对象的编程语言,可在不同领域使用。要下载 Java,我们需要下载并安装 JDK(Java 开发工具包)。它提供了 Java 的运行时环境。它包含运行 Java 程序所需的库和类。...
阅读 2 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India