2010-03-18 2 views
2

Je veux dire que nous avons une classe qui est déjà chargée dans JVM. et dans une autre méthode, nous essayons inconsciemment de charger cette même classe, donc dans cette situation, que se passe-t-il? c'est-à-dire qu'il y aura une erreur ou une exception disant que c'est déjà chargé. Si ce n'est pas le cas, alors il est possible que nous puissions avoir une classe modifiée avec quelques fonctionnalités supplémentaires et la charger chaque fois que cela est nécessaire pour le déploiement à chaud.Que se passe-t-il si nous chargeons à nouveau une classe déjà chargée?

Répondre

5

Rien ne se passe. La machine virtuelle vérifie d'abord si la classe est chargée et la charge uniquement si elle ne l'est pas. Sinon, il renvoie la classe déjà chargée.

De ClassLoader.loadClass(..).

// First, check if the class has already been loaded 
Class c = findLoadedClass(name); 
if (c == null) { 
    ... 
} 

(Vous pouvez vérifier this article sur de nombreux détails sur le chargement des classes Bien qu'il ne soit pas directement liée (dans son ensemble) à votre question, il est une bonne source de réponses aux questions comme le vôtre)

0

Si vous cherchez à réutiliser une classe pendant qu'elle est chargée, vous devriez vérifier le motif de la classe Singleton. Si vous chargez à nouveau la même classe alors vous allez avoir plusieurs instances de la classe, aucune erreur ne se produira.

0

Il ne peut y avoir qu'une seule classe par chargeur de classe, ce qui n'est théoriquement pas possible. Vous pouvez réellement tester cela en appelant à mettre des instructions S.o.p dans les blocs d'initialisation statiques. Ces blocs ne sont exécutés qu'une seule fois lorsque la classe est chargée.

Modifier

Une classe d'un nom donné complet, corrigé selon le commentaire

+0

[d'un nom donné]? –

Questions connexes