Estou analisando um pequeno código que foi criado para gerar a exceção ‘arrayindexoutofbundsexception’ ao tentar executar o código.
Segue o código:
class A{
public static void main(String[] args){
System.out.print(args); //A
System.out.print(args.length); //B
System.out.print(args[0]); //C
}
}
Conforme previsto, ao tentar executar esse código a exception da linha C é gerada. A exception ocorre porque eu executo sem passar parâmetros para o método main. Dessa forma args está vazia. logo não é possível exibir o elemento [0] de args (ele nem existe).
Porém eu achava que iria gerar o ‘nullpointerexception’ na linha B. Uma vez que eu tento acessar uma propriedade de uma array que não foi inicializada ainda. Porém essa exception não ocorre.
Boa pergunta. Na verdade args existe e tem tamanho zero (array vazio), já que uma string em Java é um objeto que não precisa ser instanciado (objeto imutável), conforme a documentação Docs Oracle - String. Não encontrei nada muito explícito sobre o assunto, mas o entendimento a que cheguei foi esse.
O array args tem tamanho 0 se você não passar nenhum argumento. Você está tentando acessar uma posição que não existe, a 0. Essa posição só existiria se o array tivesse um tamanho maior ou igual a 1. Quando você tenta acessar uma posição que não existe, uma ArrayIndexOutOfBoundsException acontece.
NullPointerException ocorre quando você tenta acessar um membro de uma referência nula. Não é o que está acontecendo nesse caso.
Esse é o método main logo o parâmetro args vai conter os parâmetros que você passou em linha de comando.
Se não passou nada, a JVM passa um array vazio.