Eu tenho o seguinte código:
public static void main(String[] args) { try { String[] studentnames = { /* this is an array of 9000 strings... */ }; } }
Eu recebo o seguinte erro ao tentar compilar isso:
The code of method main(String[]) is exceeding the 65535 bytes limit
Em java, os methods não podem ter mais de 65535 bytes.
Então, para corrigir esse problema, divida seu método main(String[] args)
em vários sub-methods.
O código de erro parece bastante auto-explicativo.
The code of method main(String[]) is exceeding the 65535 bytes limit
Isso ocorre porque existe um limite arbitrário codificado em Java de 64 Kb para tamanhos de método. (E na verdade muitas outras coisas estão limitadas a 64K, como nomes de methods, o número de constantes, etc. Veja as especificações do Java 8 ou do Java 7 para mais detalhes.)
Para contornar isso, tudo o que você precisa fazer é dividir seu método main(String[] args)
em múltiplos sub-methods.
Mas por que não apenas carregar os nomes de um arquivo?
Alguns dos problemas em fazer isso do jeito que você está propondo atualmente são:
Em primeiro lugar, você é um hard-coding details, que é quase sempre uma coisa ruim (veja isso );
em segundo lugar, você está recebendo essa mensagem de erro; e
em terceiro lugar, você torna seu código muito difícil de ler.
Há muitos mais, é claro, mas estes são os mais óbvios.
Inicializando o array de studentnames está contando para o tamanho do método principal. Como existem 9000 nomes de alunos, cada nome pode ter apenas 7 caracteres antes que você fique sem espaço. Como os outros afirmaram, você precisa reduzir o tamanho do método. Você pode dividi-lo em pedaços, como Pramod disse, mas neste caso, a maior parte do método é realmente dados. Eu faria como o Infiltrator diz e dividiria os nomes em um arquivo separado e apenas lê-lo no seu principal. Algo como commons-io pode ser usado para chegar efetivamente à mesma posição em que você está começando.
List namelist = FileUtils.readLines(new File("studentnames.txt")); String[] studentnames = namelist.toArray(new String[0]);
Você pode achar útil processar a lista em vez de convertê-la em uma matriz ou, alternativamente, usar um LineIterator
LineIterator it = FileUtils.lineIterator(file); try { while (it.hasNext()) { String line = it.nextLine(); // do something with line } } finally { it.close(); }
Gostaria de ler os nomes dos alunos de um arquivo, mas um trabalho em torno do qual irá tornar a class menor também
String[] studentnames= "Student names is an array of :9000".split(" ");
Em vez de definir e usar 9000 strings, isso usa apenas um. O limite para uma única string é de pouco mais de 2 bilhões.
O código do método main (String []) está excedendo o limite de 65535 bytes
Como seu erro diz que o método principal excede o limite de 65535 bytes.
Razão: Por que recebemos esse erro em nosso código?
Solução: Então, o que posso fazer por isso?
Você método é muito longo.
Crie methods diferentes para dividi-lo e torná-lo muito mais legível e passível de manutenção.
Apenas externalize Strings do seu código para um arquivo * .properties / xml / json. O NetBeans e / ou o Eclipse podem fazer isso para você com facilidade.