Diferença de ClassNotFoundException pra NoClassDefFoundError?

9 respostas
A

Diferença de ClassNotFoundException pra NoClassDefFoundError? :idea: :shock:

9 Respostas

T

ClassNOtFound -> Lançado na tentativa de carregar a class pelo nome. Ex: Class.forName(“nomedaclasse”);

NoClassDefFound -> Lançado quando a classe não está disponivel em tempo de execução

lina

Oi,

Segue algumas explicações…

Thrown when an application tries to load in a class through its string name using:

* The forName method in class Class.
* The findSystemClass method in class ClassLoader .
* The loadClass method in class ClassLoader.

but no definition for the class with the specified name could be found.

Conforme o thiagomoraes disse: “Lançado na tentativa de carregar a class pelo nome” e o mesmo não foi encontrado.

É sempre importante, analisar a hierarquia (como estou usando essa palavra ultimamente!) de classe para entender qualquer exceção:

java.lang.Object
–> extended by java.lang.Throwable
----> extended by java.lang.Exception
--------> extended by java.lang.ClassNotFoundException

Esta classe implementa a interface Serializable.

De uma olha neste exemplo:

public class ClassForName
{
	public static void main(String[] args)
	{
		try
		{
			Class.forName("TryClass");
		}
		catch (ClassNotFoundException ex)
		{	
			ex.printStackTrace();
		}
	}
}

Neste caso, a exceção será lançada. Pois não existe a classe TryClass:

java.lang.ClassNotFoundException: TryClass
	at java.net.URLClassLoader$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Unknown Source)
	at automation.ClassForName.main(ClassForName.java:41)

=======================================================================

Já a exceção NoClassDefFoundError possui uma hierarquia diferente:

java.lang.Object
–> extended by java.lang.Throwable
----> extended by java.lang.Error
-------> extended by java.lang.LinkageError
-------------> extended by java.lang.NoClassDefFoundError

Thrown if the Java Virtual Machine or a ClassLoader instance tries to load in the definition of a class (as part of a normal method call or as part of creating a new instance using the new expression) and no definition of the class could be found.

The searched-for class definition existed when the currently executing class was compiled, but the definition can no longer be found.

Ou seja, a classe existe e foi compilada, porém durante o processo (tempo de execução) a classe não pode mais ser encontrada.

========================================================================

Espero ter ajudado.

Tchauzin!

T

Otima explicação lina:).

A

Hey Lina, thanks a lot for helping me out as always!

bye,
AS :lol: 8)

lina

Oi,

Muito obrigado pessoal! Esse é o objetivo do fórum, procurar ajudar e ser ajudado. Repassando conhecimento, isso sim é importante!

Tchauzin!

A

poderia me ajudar a entender StackOverFlow, ExceptionInInitializationError e AssertionError? :shock:

lí a documentação mas não ví exemplos…

lina

andredecotia:
poderia me ajudar a entender StackOverFlow, ExceptionInInitializationError e AssertionError? :shock:

lí a documentação mas não ví exemplos…

Oi,

Vamos lá…

Uma exceção StackOverflow geralmente utiliza a memória reservada aos programas, para operações de eventos de hardware. Então, provavelmente sua aplicação está consumindo/alocando memória demais.

Um AssertionError é descendente de um Error, não uma Exception:

java.lang.Object
–> extended by java.lang.Throwable
----->extended by java.lang.Error
----------->extended by java.lang.AssertionError

Procure estudar seu descendente.

Já o ExceptionInInitializationError é uma exceção de Inicialização. Só não sei um exemplo e nem como explica-la.

Tchauzin!

evertonsilvagomesjav

Hum exemplo de ExceptionInInitializationError:

static int[] meuArray;

static{

meuArray[0] = 1;

}

public static void main(String[] args){


}
Marky.Vasconcelos

O que ela quis dizer era sobre o Java Heap Space(Esqueci exatamente o nome da Exception)

A StackOverFlowError é lançado quando a Stack do programa fica muito grande.

Acontece quando voce tem uma recursividade enorme ou entao quando um metodo A chama o B e o B chama A.

Criado 22 de setembro de 2010
Ultima resposta 22 de set. de 2010
Respostas 9
Participantes 5