Cargadores de clases en Java

De ChuWiki

Un par de notas sobre los ClassLoader[editar]

  • Los cargadores de clase estan organizados en una jerarquía
  • Un cargador concreto delega la petición de carga de una clase hacia arriba en la jerarquía
  • La petición vuelve de vuelta hacia abajo hasta que un cargador de clase sea capaz de cargar la clase
    • Si ningun cargador de clase es capaz de cargar la clase se produce una excepción
  • Java por defecto proporciona tres cargadores de clases, responsables de la carga desde distintas ubicaciones

  • Este es el diagrama de clases de los cargadores de clases habituales

  • Pueden existir clases con el mismo nombre en cargadores de clases distintas
  • Formas de cargar clases
    • ClassLoader.getSystemClassLoader()
      • Usa el system class loader (sun.misc.Launcher$AppClassLoader)
    • Thread.currentThread().getContextClassLoader()
      • Usa el ClassLoader heredado del thread padre
      • Puede ser distinto del system class loader (por ejemplo, en el caso de un Servlet)
    • Class.forName( nombre clase )
      • Usa el ClassLoader del que invoca el método
      • Se inicializa la clase (se ejecutan, por ejemplo, los bloques de código estáticos)
    • Class.forName(nombre clase, boolean indicando si se inicializa o no la clase, classloader que se usará)
  • Una clase se descarga cuando el recolector de basura recolecta su cargador de clase