JAVA中定义属性或方法的数量上限

Java类在编译时,属性或方法的数量存在上限,约为65535,这是由于字节码文件结构中u2类型的限制。常量池的长度限制导致属性和方法的实际数量无法达到这个上限,因为还有其他内容占用空间。同样,属性和方法的名称长度也受限于u2类型。总结来说,Java类的各种元素数量都有理论上限,当超出这个范围时,将无法编译成class字节码文件。
摘要由CSDN通过智能技术生成

  这个问题很少有人遇到,但是java中定义的属性或者方法是有上限的,可以粗略的计算为65535,也就是两字节无符号数的最大值;我在这里说的上限不是运行中内存不够之类发生的上限,而是无法通过编译为class字节码文件的上限。

测试结果

首先放出测试结果

 

我在测试类中什么都没有干,只是不停的在创建int类型的属性,最终在65501处触发了编译错误,而注释掉一个属性编译错误就不会发生。那么65535这个数是怎么来的呢?

字节码文件结构

首先解释下java的编译过程:首先java会把后缀为java的文件通过javac命令把其中的每个类编译为一个后缀为class的文件,其中的内容是以二进制存储的字节码信息,字节码信息包括的内容如下所示:

 

简单来说包括:魔数、class文件版本、常量池、访问标志、类(接口)索引、字段表、方法表和属性表的集合。其中u1、u2、u4、u8是这些部分的类型,分别代表无符号一字节、二字节、四字节、八字节的类型;看到这里可能你已经猜出来了,这些都是有上限的数字,u2最大就是65535,是不是和这个有关呢?

class文件中常量池的结构存储的是字面量和

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值