没有方法的接口

Vim*_*era 14 java java-native-interface interface class

为什么Java引入了一些没有定义方法的接口?例如Cloneable,Serializable,Type等等.

第二件事:在Class.class包中有一个registerNatives()没有body 定义的方法,从静态块调用,但Class.class不是抽象的,但是final.为什么这样?为什么Java需要一些没有body的方法来从静态块中调用.

sti*_*ike 12

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

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

关于第二个问题

仔细观察,您可以看到声明

 private static native void registerNatives();
Run Code Online (Sandbox Code Playgroud)

registerNatives原生方法也是如此.

那么什么是原生方法.如果你看到这样的问题

该方法以"本机"代码实现.也就是说,代码不能在JVM中运行.它通常用C或C++编写.

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

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


rac*_*ana 9

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

Marker接口的目的是通过在类实现标记接口时为类提供某些功能来强制类中的某种功能.

阅读Java Marker Interface还看看Java中标记接口的用途是什么?