Java 中的标记接口或带标签接口是什么?


本文将帮助您了解 Java 中的标记接口或带标签接口是什么。在了解标记接口之前,让我们回顾一下接口。

接口

与对象类似,接口是类的蓝图。它包含静态常量和抽象方法。它是 Java 中实现抽象和多重继承的一种机制。它使用 interface 关键字声明。它提供完全抽象,这意味着接口中的所有方法都必须声明为空体,并且所有字段默认情况下都必须是 public、static 和 final。

语法

interface <interface_name>{
   // constant fields declaration
   // abstract methods declaration
   // by default
}

标记接口

没有方法、字段和常量的接口称为标记接口或带标签接口。这种类型的接口是一个空接口。它提供有关对象运行时信息。此信息传递给 JVM 和编译器。可序列化和可克隆接口是标记接口的两个示例。

语法

interface Serializable
{
}

标记接口的用途

标记接口通过消息通知 Java 编译器,以便它向实现它的类添加一些特殊特性。如果有关类的信息保持不变,则可以使用标记接口来表示该信息。它主要用于 API 开发和 Spring 等框架中。

标记接口的类型

JDK 中存在许多内置的标记接口或带标签接口。下面显示了 3 个最常用的接口:

  • 可序列化接口

  • 可克隆接口

  • 远程接口

让我们详细了解一下每个接口。

可序列化接口

可序列化接口是一个标记接口,它在 java.io 包中定义。要使类可序列化,必须实现 Serializable 接口。然后,根据需要可以序列化或反序列化该类的对象。

Java 中的序列化是一种将对象的状态转换为字节流的方式。它的主要用途是在网络上传输对象的状态。反序列化是序列化的逆过程,其中从序列化状态重建对象。必须具有对象定义才能成功地重新创建它。

语法

ObjectInputStream in = new ObjectInputStream(inputStream);
Student s = (MyObject)in.readObject();

示例

Student.java import java.io.Serializable; // importing java.io package for serializable interface public class Student implements Serializable { // class declaration for implementing serializable interface int studentId; // variable declaration String studentName; // variable declaration public Student(int studentId, String studentName){ this.studentId = studentId; this.studentName = studentName; } } StudentSerialization.java import java.io.*;// java.io package imported class StudentSerialization{ // class declaration public static void main(String[] args) { // main function declaration try { // try block Student std = new Student(64,"JohnWick"); // creating object using Student class FileOutputStream fout=new FileOutputStream("Student File.txt"); // creating stream and writing the object ObjectOutputStream out=new ObjectOutputStream(fout); out.writeObject(std); out.flush(); out.close(); // closing the stream System.out.println("Data read from the file"); } catch(Exception e) { // catch block e.printStackTrace(); } } }

输出

Data read from the file

可克隆接口

可克隆接口是一个标记接口,它在 java.lang 包中定义。它使用不同的名称克隆对象。此接口支持 Object 类的 clone() 方法。如果在类中未实现此接口,而不管是否调用 clone() 方法,它都会抛出 ClassNotSupportedException。

示例

import java.util.Scanner; // java.util package imported public class Clone implements Cloneable { // class declaration along with cloneable interface int studentId; String studentName; int studentClass; public Clone (int studentId, String studentName, int studentClass) { //Clone class constructor this.studentId = studentId; this.studentName = studentName; this.studentClass = studentClass; } public void printList() { // function to print details System.out.println("Student ID: "+studentId); System.out.println("Student Name: "+studentName); System.out.println("Student Class: "+studentClass); } public static void main (String args[]) throws CloneNotSupportedException { // main function declaration Scanner sc = new Scanner(System.in); // Scanner class object created System.out.print("Enter Student ID: "); // Reading user given values int studentId = sc.nextInt(); System.out.print("Enter Student name: "); String studentName = sc.next(); System.out.print("Enter Student Class: "); int studentClass = sc.nextInt(); System.out.println("-------Student Detail--------"); Clone p1 = new Clone(studentId, studentName, studentClass); Clone p2 = (Clone) p1.clone(); //cloning the object of the Student class using the clone() method p2.printList(); // invoking the method to print detail } }

输出

Enter Student ID: 64
Enter Student name: JohnWick
Enter Student Class: 1
-------Student Detail--------
Student ID: 64
Student Name: JohnWick
Student Class: 1

远程接口

远程接口是一个标记接口,它在 java.rmi 包中定义。它将对象标记为远程对象,该对象可由另一台机器(主机)访问。实现此接口后,对象可用作远程对象。它还识别其函数可以从 JVM 调用 的接口。任何远程对象都必须直接或间接地实现该接口。

语法

import java.rmi.*;
public interface Multiply extends Remote{
   public int mul(int p, int r, int t)throws RemoteException'
}

自定义接口

自定义接口可以由用户创建,即它不是像上面三个接口那样的内置接口。

语法

interface <interface_name>
{
}

示例

interface Bullet720 { // custom marker interface } class Train implements Bullet720 { // class that implements the Bullet720 marker interface static void isTrain() {// static function to display System.out.println("Bullet720 is a Train."); } } public class CustomInterface { // main class declaration public static void main(String args[]) { // main function declaration Train.isTrain(); // invoking methods of the class Train } }

输出

Bullet720 is a Train.

更新于: 2022-09-05

2K+ 阅读量

启动您的 职业生涯

通过完成课程获得认证

开始
广告