Java类可以拥有的最大方法数是多少?

我正在考虑构建一个非常大的Java类,Java类可以有多少方法限制? 可以进入数以百万计的方法吗?

更新:目的是,做一个“上帝”课程。

根据Java类文件规范 ,限制为65535

4.10 Java虚拟机的限制

Java虚拟机的以下限制隐含在class文件格式中:

  • 可以由类或接口声明的方法数量被ClassFile结构(第4.1节 )的methods_count项的大小限制为65535。 请注意, ClassFile结构的methods_count项的值不包括从超类或超接口inheritance的方法。

不。来自类文件格式规范的一些相关部分:

Java虚拟机的以下限制隐含在类文件格式中:

  • ClassFile结构的16位constant_pool_count字段(第4.1节)将每类或每接口常量池限制为65535个条目。 这是对单个类或接口的总复杂性的内部限制。

  • 可以由类或接口声明的方法数量被ClassFile结构(第4.1节)的methods_count项的大小限制为65535。 请注意,ClassFile结构的methods_count项的值不包括从超类或超接口inheritance的方法。

我认为这意味着您可以拥有65535个方法,但前提是您没有其他对象占用常量池中的插槽(例如字段名称)。

除此之外,每种方法还有最大尺寸:

  • 每个非本机非抽象方法的代码量由Code属性(第4.7.3节)的exception_table中的索引大小限制为65536字节,在LineNumberTable属性(第4.7.8节)中,在LocalVariableTable属性中(§4.7.9)。

虽然VM Spec中的methods_count是U2,因此65535,method_info的格式有一个name_index和一个descriptor_index,两者都必须指向常量池,它也有一个U2 constant_pool_count所以32767是最大值,即使这当然也不可能它不允许任何其他类名,超类字段等条目。

Java类或接口最多可以有65535个方法。 Java中构造函数的代码限制为65535个字节。 这还与计算机上可能的最大TCP / UDP端口数有关。