J'ai le code suivant:
public static void main(String[] args) {
try {
String[] studentnames = {
/* this is an array of 9000 strings... */
};
}
}
J'obtiens l'erreur suivante en essayant de compiler ceci:
The code of method main(String[]) is exceeding the 65535 bytes limit
En Java, une méthode ne peut pas avoir plus de 65 535 octets.
Donc, pour résoudre ce problème, divisez votre méthode main(String[] args)
en plusieurs méthodes secondaires.
Le code d'erreur semble assez explicite.
The code of method main(String[]) is exceeding the 65535 bytes limit
En effet, il existe une limite arbitraire codée en dur en Java de 64 Ko pour la taille des méthodes. (Et en réalité beaucoup d'autres choses sont limitées à 64 Ko, telles que les noms de méthodes, le nombre de constantes, etc. Voir les spécifications Java 8 ou les spécifications Java 7 pour plus de détails.)
Pour contourner ce problème, tout ce que vous avez à faire est de diviser votre méthode main(String[] args)
en plusieurs sous-méthodes.
Mais pourquoi ne pas simplement charger les noms d'un fichier à la place?
Certains des problèmes liés à la manière dont vous proposez actuellement sont les suivants:
premièrement, vous codez en dur, ce qui est presque toujours une mauvaise chose (voir ceci );
deuxièmement, vous obtenez ce message d'erreur. et
troisièmement, votre code est très difficile à lire.
Il y en a beaucoup plus, bien sûr, mais ce sont les plus évidentes.
Initialiser le tableau studentnames compte pour la taille de la méthode principale. Comme il y a 9 000 noms d'étudiants, chaque nom ne peut contenir que 7 caractères avant de manquer d'espace. Comme les autres l'ont indiqué, vous devez réduire la taille de la méthode. Comme Pramod l'a dit, vous pouvez le diviser en plusieurs parties, mais dans ce cas, le gros de la méthode est constitué de données. Je ferais ce que dit Infiltrator, scindais les noms dans un fichier séparé et lisais-le simplement dans ton dossier principal. Quelque chose comme commons-io peut être utilisé pour vous amener effectivement à la même position que vous commencez po
List<String> namelist = FileUtils.readLines(new File("studentnames.txt"));
String[] studentnames = namelist.toArray(new String[0]);
Vous trouverez peut-être utile de traiter la liste plutôt que de la convertir en tableau ou d'utiliser un LineIterator à la place.
LineIterator it = FileUtils.lineIterator(file);
try {
while (it.hasNext()) {
String line = it.nextLine();
// do something with line
}
} finally {
it.close();
}
Je voudrais lire les noms des étudiants à partir d’un fichier, mais un travail autour duquel la classe sera réduite
String[] studentnames= "Student names is an array of :9000".split(" ");
Au lieu de définir et d'utiliser 9 000 chaînes, cela n'en utilise qu'une. La limite pour une seule chaîne est légèrement supérieure à 2 milliards.
Le code de la méthode main (String []) dépasse la limite de 65 535 octets.
Comme votre erreur le dit, la méthode principale dépasse la limite de 65 535 octets.
Raison: Pourquoi nous avons cette erreur dans notre code?
Solution: Que puis-je faire pour cela?
Il suffit d'externaliser des chaînes de votre code dans un fichier * .properties/xml/json. Netbeans et/ou Eclipse peuvent le faire pour vous facilement.
Votre méthode est trop longue.
Créez différentes méthodes pour le scinder et le rendre beaucoup plus lisible et maintenable.