数组—java中的“代码太大”编译错误

t5fffqht  于 2021-07-09  发布在  Java
关注(0)|答案(13)|浏览(427)

java中的代码有最大大小吗?我写了一个有一万多行的函数。实际上,每一行都给一个数组变量赋值。

arts_bag[10792]="newyorkartworld";
arts_bag[10793]="leningradschool";
arts_bag[10794]="mailart";
arts_bag[10795]="artspan";
arts_bag[10796]="watercolor";
arts_bag[10797]="sculptures";
arts_bag[10798]="stonesculpture";

在编译时,我得到了一个错误:代码太大
我如何克服这个问题?

hgb9j2n6

hgb9j2n61#

如其他答案所述,方法的字节码限制为64kb(至少在sun的java编译器中是这样)
对我来说,将该方法分解成更多的方法会更有意义——每个方法都将某些相关的内容分配给数组(使用arraylist来实现这一点可能更有意义)
例如:

public void addArrayItems()
{
  addSculptureItems(list);
  ...
}

public void addSculptureItems(ArrayList list)
{
  list.add("sculptures");
  list.add("stonesculpture");
}

或者,您也可以从静态资源加载这些项,如果它们是从属性文件修复的

sg2wtvxw

sg2wtvxw2#

您可以添加另一个方法来为代码创建空间,以获得额外的数据空间,您可能有一个方法占用了大量的数据空间。尝试划分你的方法,因为我有同样的问题,并通过在javaandroid代码中为相同的数据创建另一个额外的方法来修复它,在我这样做之后问题就消失了。

uqjltbpv

uqjltbpv3#

此错误有时是由于单个函数中的代码太大。。。要解决这个错误,可以将该函数拆分为多个函数,如

//Too large code function
private void mySingleFunction(){
.
.
2000 lines of code
}
//To solve the problem
private void mySingleFunction_1(){
.
.
500 lines of code
}
private void mySingleFunction_2(){
.
.
500 lines of code
}
private void mySingleFunction_3(){
.
.
500 lines of code
}
private void mySingleFunction_4(){
.
.
500 lines of code
}
private void MySingleFunction(){
mySingleFunction_1();
mySingleFunction_2();
mySingleFunction_3();
mySingleFunction_4();
}
esyap4oy

esyap4oy4#

一个java类中的一个方法最多可以有64kb的字节码。
但你应该把它清理干净!
使用 .properties 文件来存储此数据,并通过 java.util.Properties 您可以通过放置 .properties 文件,并使用:

Properties properties = new Properties();
InputStream inputStream = getClass().getResourceAsStream("yourfile.properties");
properties.load(inputStream);
lyfkaqu1

lyfkaqu15#

这看起来有点疯狂。不能通过从文本文件或其他数据源读取值来初始化数组吗?

ijnw1ujt

ijnw1ujt6#

我自己也遇到过这个问题。对我来说有效的解决方案是重构并将方法缩小到更易于管理的部分。像你一样,我正在处理一个近10公里线的方法。然而,通过使用静态变量和较小的模函数,问题得到了解决。
似乎有更好的解决办法,但使用Java8,没有。。。

0wi1tuuw

0wi1tuuw7#

方法上有64k字节的代码大小限制
话虽如此,我还是同意理查德的看法;你为什么需要这么大的方法?给出了op中的示例,属性文件应该足够了。。。如果需要的话,甚至是一个数据库。

xxslljrj

xxslljrj8#

好吧,也许这个答案太迟了,但我认为这种方式比另一种方式好
例如,代码中有1000行数据
打破他们

private void rows500() {
     //you shoud write 1-500 rows here
}

private void rows1000() {
     you shoud write 500-1000 rows here
}

为了获得更好的性能,请在代码中输入“if”

if (count < 500) {
    rows500();
} else if (count > 500) {
    rows1000();
}

我希望这个代码能帮助你

apeeds0o

apeeds0o9#

由于方法有一个大小限制,您现在不想重新设计代码,所以您可以将数组分成4-5部分,然后将它们放入不同的方法中。在读取数组时,调用一系列中的所有方法。您还可以维护一个计数器,以了解已解析了多少索引。

i7uaboj4

i7uaboj410#

试着重构你的代码。在java中,方法的大小是有限制的。

0g0grzrc

0g0grzrc11#

这是由于所有的代码在单一的方法解决方案:创建更多的一些小方法,然后这个错误将消失

n53p2ov0

n53p2ov012#

我有一个导致.java文件大小超过500kb的枚举。eclipse可以出于某种原因构建它;eclipse导出的ant build.xml不能。我正在调查这件事,并将更新这篇文章。

myzjeezk

myzjeezk13#

根据java虚拟机规范,方法的代码不能大于65536字节:
价值 code_length 项给出了 code 此方法的数组。
代码长度的值必须大于零(因为代码数组不能为空)并且小于65536。 code_length 定义对象的大小 code[] 包含方法的实际字节码的属性:
这个 code 数组给出实现该方法的java虚拟机代码的实际字节数。

相关问题