6 exceções Java que assombram os iniciantes em Java.
(Original) (Sou novo em Java e inglês, então ficarei feliz em receber críticas e ajuda)
Antes e agora, encontrei muitos novatos em Java que têm problemas com algumas exceções comuns que preciso explicar mais uma vez. Acredito que outros desenvolvedores Java seniores tenham o mesmo problema ao tentar ajudar os novatos a lidar com essas exceções. Assim, escrevi este artigo para meu próprio desenvolvimento. Sinta-se à vontade para comentar este artigo ou adicionar exceções à lista abaixo.
1.NoClassDefFoundError _
Esta é uma daquelas exceções, com uma mensagem como
“Exception in thread “main” NoClassDefFoundError” , que a maioria dos novos desenvolvedores Java encontra no mundo da programação Java. Um iniciante escreve um programa que exibe “Olá, mundo!”, vai até a linha de comando, digita “java…”, pressiona enter e BAM! =). E descobrir como fazer o programa imprimir “Olá, mundo!” no monitor, leva algum tempo.
NoClassDefFoundError ocorre quando a Java Virtual Machine (JVM) tenta acessar uma classe no momento da inicialização e a classe não é encontrada, mesmo que a mesma classe tenha sido encontrada no tempo de compilação. Na maioria das vezes, essa exceção ocorre ao tentar executar um programa usando o comando “java” e o caminho de classe não está configurado corretamente. Aqui está uma descrição dos motivos pelos quais essa exceção ocorre.
- A classe não está disponível em -classpath.
- A variável de ambiente CLASSPATH foi substituída. Você pode verificar sua presença e exatidão usando o comando “set” do Windows.
A solução para o problema é descrita com mais detalhes
aqui.
Além disso, você precisa entender a diferença entre a variável de ambiente CLASSPATH e a chave do interpretador -classpath. Os profissionais não recomendam o uso do CLASSPATH. A melhor maneira é passar a chave -classpath para o interpretador.
ClassNotFoundException é outra exceção que se torna um pesadelo para um novato assim que ele começa a programar. Curiosamente, o desenvolvedor Java médio geralmente
fica confuso entre as exceções ClassNotFoundException e NoClassDefFoundError . E assim, a diferença entre essas duas exceções continua sendo
uma das perguntas mais frequentes nas entrevistas para o cargo Junior .
ClassNotFoundException ocorre quando a JVM tenta carregar uma classe específica e não a encontra no classpath. Um dos lugares comuns onde um novo desenvolvedor Java o encontra pela primeira vez é conectando-se a um banco de dados usando a biblioteca JDBC. Lá tentaremos carregar o driver usando código como Class.forName("JDBCdriver"). Um bom artigo sobre ClassNotFoundException está
aqui . Tentar entender o conceito de
Java Classloaders é o método mais eficaz para lidar com esse problema. Você pode ler
como configurar o caminho de classe Java no ambiente Win/Unix . Conforme declarado nos
documentos Java , uma exceção ocorre nos seguintes casos:
- Você tenta carregar uma classe usando o método Class.forName e o arquivo .class não está no classpath. Este é o cenário mais comum dos três listados aqui.
- Quando o carregador de classes tenta carregar uma classe usando o método loadClass.
- Quando o carregador de classes tenta carregar uma classe usando findSystemClass.
Esta exceção é mais fácil de entender para iniciantes do que as duas primeiras. Além disso,
esta exceção é facilmente identificada porque quando ocorre, a mensagem sobre a exceção
indica o número da linha do programa onde ela ocorreu. Esta exceção ocorre quando a JVM tenta acessar um objeto ou tenta chamar um método em um objeto e recebe um valor nulo em vez de uma referência ao objeto. O Java Doc também declara os seguintes motivos:
- Acessar ou alterar um método em um objeto inválido. (ou seja, em vez de uma referência a um objeto JVM, ele fica nulo)
- Obtendo o comprimento de um array quando ele é inválido. (não inicializado, por exemplo)
- Foi feita uma tentativa de acessar um elemento de array inexistente do tipo Object. (ou seja, quando, em vez de uma referência de objeto, o elemento da matriz contém nulo)
O método mais simples para evitar essa exceção é usar uma verificação não NULL. No entanto, mais cedo ou mais tarde, isso se tornará uma prática de desenvolvimento Java e você encontrará verificações não NULL em todos os lugares. Curiosamente,
inserir verificações não NULL em todos os lugares não é considerado um bom estilo de programação . E o principal motivo para usar a verificação não NULL é que o desenvolvedor deseja passar um objeto nulo em caso de falha ou erro. Em vez disso, é
uma boa prática de programação que os programadores devem usar
para retornar um objeto vazio, em vez de um valor nulo , como lógica básica de como um programa se comportará no caso de um erro. Contudo, adotar esta prática de programação é mais difícil do que parece.
Há um bom artigo sobre isso em nosso recurso.
Esta é outra exceção familiar para iniciantes, que ocorre ao tentar lançar um objeto para uma classe que não é uma subclasse dele. Novamente, isso é bastante fácil de entender, identificar e simples de corrigir. Uma maneira de evitar essa exceção quando o tipo do objeto é desconhecido em tempo de execução é usar
“InstanceOf” para verificar se o objeto é uma instância de uma classe específica.
Esta exceção é autoexplicativa e ocorre quando a JVM tenta acessar um elemento do array com um índice inexistente, como negativo (-1) ou maior ou igual ao tamanho do array.
É bastante fácil de entender, definir e corrigir . Por exemplo, ao criar um loop,
for (i = 0; i <= cmd_stack.length; i++) System.out.println(cmd_stack[i]);
ocorre uma exceção, pois no array os índices começam em 0, e o método length retorna o número de elementos, e o número é 1 maior que o valor do último índice. Uso correto
for (i = 0; i < cmd_stack.length; i++) System.out.println(cmd_stack[i]);
Essa exceção é menos comum e bastante fácil de entender, identificar e resolver. Ocorre quando a JVM tenta chamar um método inexistente ou um método com um argumento inválido.
GO TO FULL VERSION