有意思的小问题,java代码过长

最近在练习编程的时候,发现一个问题. 就是在测试一个排序功能时, 如果写入大批量的参数, 会报 “java: 代码过长” 的问题.

编程这么多年了, 第一次遇到这种问题, 还挺神奇的. 记录和总结一下.

现象重现

1
2
3
4
5
6
7
8
public class Test {
public static void main(String[] args) {
a = "2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2";
// 上面的a 多复制几遍

System.out.println(a);
}
}

很简单的代码, 没事走两步

1
java: 代码过长

问题分析

首先, 顾名思义, 很明细就是字符长度超过了java 一个类文件的最大长度限制导致的.

那么java类文件的长度是多少呢?
经过一番不是很辛苦的查询, 定位到了原因:

There is a 64K byte-code size limit on a method
java中一个方法的最大长度是64Kb

很明细, 我们的这个方法长度超了.

问题解决

原因找到了, 要解决也就很简单了. 只要做到规避方法的最大长度就行了.

  • 方法1 : 将一个大方法拆成多个小方法, 将一个大类拆成多个小类. 说实话, 一个64kb的类确实有点大了.
  • 方法2 : 将测试数据不要放到java类里, 而是放到配置文件中, 使用的时候通过流加载到内存中. 文件的存储量是无限的

总结

其实只要符合正常的java编码规范, 我们基本上是遇不到上面的问题的.
只有在一些极限测试的时候, 我们通常会将测试内容放到代码里, 才可能碰到.

只能说: 没用的小知识又增多了🐶

参考

java code too large


有意思的小问题,java代码过长
https://www.hancher.top/2022/09/22/exception-java-method-too-big/
作者
寒澈
发布于
2022年9月22日
许可协议