无需任何方法的接口

为什么Java引入了一些没有定义方法的接口?例如、、等等。CloneableSerializableType

第二件事:在包中,有一个没有 body 定义的方法,它是从静态块调用的,但不是抽象的,而是 。为什么会这样?以及为什么Java需要一些没有主体的方法才能从静态块调用?Class.classregisterNatives()Class.classfinal


答案 1

为什么Java引入了一些没有定义方法的接口?

这称为标记或标记接口。这些不用于任何用途或操作。这些方法用于标记或标记类。以便您可以确定某个类是否是这些类的子类。

关于第二个问题

如果你仔细观察,你可以看到声明是

 private static native void registerNatives();

原生方法也是如此。registerNatives

那么什么是本机方法。如果你看到这个所以问题

该方法是在“本机”代码中实现的。也就是说,不在 JVM 中运行的代码。它通常用C或C++编写。

本机方法通常用于与用其他编程语言编写的系统调用或库进行交互。

因此,这些方法是从本机代码加载的。因此,您不需要声明方法的主体,但它们仍然不是抽象的,因为它们的实现来自本机代码。


答案 2

标记接口用作标记,将消息通知 Java 编译器,以便它可以向实现它的类添加特殊行为。Java 标记接口中没有成员。

Marker 接口的用途是通过向类提供某些功能(如果类实现标记接口)来强制类中的某种功能。

阅读 Java 标记接口请参阅标记接口在 Java 中的用途是什么?