它是一個空接口(沒有字段或方法)。標記接口的示例有可序列化、可克隆和遠程接口。所有這些接口都是空接口。
public interface Serializable { // nothing here }
實時應用程序中使用的標記接口示例:
- 可克隆的接口:java.lang 包中存在可克隆接口。有一個方法clone()Object類。實現 Cloneable 接口的類表明 clone() 方法創建該類實例的 field-for-field 副本是合法的。
在未實現 Cloneable 接口的類實例上調用 Object 的克隆方法會導致拋出異常 CloneNotSupportedException。按照約定,實現此接口的類應重寫 Object.clone() 方法。
參考這裏更多細節。 - 可串行化接口:可串行化接口存在於java.io包中。它用於使對象有資格將其狀態保存到文件中。這就是所謂的序列化。
未實現此接口的類將不會對其任何狀態進行序列化或反序列化。可序列化類的所有子類型本身都是可序列化的。 - 遠程接口:遠程接口存在於java.rmi包中。遠程對象是存儲在一台機器上並從另一台機器訪問的對象。因此,要使一個對象成為遠程對象,我們需要使用 Remote 接口來標記它。這裏,Remote接口用於標識其方法可以從非本地虛擬機調用的接口。任何作為遠程對象的對象都必須直接或間接實現該接口。遠程管理接口(遠程方法調用)提供了一些遠程對象實現可以擴展的便利類,以方便遠程對象的創建。
Java
// Java program to illustrate Cloneable interface
import java.lang.Cloneable;
// By implementing Cloneable interface
// we make sure that instances of class A
// can be cloned.
class A implements Cloneable
{
int i;
String s;
// A class constructor
public A(int i,String s)
{
this.i = i;
this.s = s;
}
// Overriding clone() method
// by simply calling Object class
// clone() method.
@Override
protected Object clone()
throws CloneNotSupportedException
{
return super.clone();
}
}
public class Test
{
public static void main(String[] args)
throws CloneNotSupportedException
{
A a = new A(20, "GeeksForGeeks");
// cloning 'a' and holding
// new cloned object reference in b
// down-casting as clone() return type is Object
A b = (A)a.clone();
System.out.println(b.i);
System.out.println(b.s);
}
}
輸出:
20 GeeksForGeeks
Java
// Java program to illustrate Serializable interface
import java.io.*;
// By implementing Serializable interface
// we make sure that state of instances of class A
// can be saved in a file.
class A implements Serializable
{
int i;
String s;
// A class constructor
public A(int i,String s)
{
this.i = i;
this.s = s;
}
}
public class Test
{
public static void main(String[] args)
throws IOException, ClassNotFoundException
{
A a = new A(20,"GeeksForGeeks");
// Serializing 'a'
FileOutputStream fos = new FileOutputStream("xyz.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(a);
// De-serializing 'a'
FileInputStream fis = new FileInputStream("xyz.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
A b = (A)ois.readObject();//down-casting object
System.out.println(b.i+" "+b.s);
// closing streams
oos.close();
ois.close();
}
}
輸出:
20 GeeksForGeeks
相關用法
- Java Math abs()用法及代碼示例
- Java Math acos()用法及代碼示例
- Java Math addExact()用法及代碼示例
- Java Math asin()用法及代碼示例
- Java Math atan()用法及代碼示例
- Java Math cos()用法及代碼示例
- Java Math sin()用法及代碼示例
- Java Math tan()用法及代碼示例
- Java Math sinh()用法及代碼示例
- Java Math cosh()用法及代碼示例
- Java Math tanh()用法及代碼示例
- Java Math sqrt()用法及代碼示例
- Java Math cbrt()用法及代碼示例
- Java Math pow()用法及代碼示例
- Java Math subtractExact()用法及代碼示例
- Java Math multiplyExact()用法及代碼示例
- Java Math incrementExact()用法及代碼示例
- Java Math decrementExact()用法及代碼示例
- Java Math negateExact()用法及代碼示例
- Java Math toIntExact()用法及代碼示例
- Java Math min()用法及代碼示例
- Java Math max()用法及代碼示例
- Java Math ceil()用法及代碼示例
- Java Math floor()用法及代碼示例
- Java Math round()用法及代碼示例
注:本文由純淨天空篩選整理自佚名大神的英文原創作品 Marker interface in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。