Classloaders

Assunto: Uma introdução ao ClassLoader. Aprenda para que serve, como funciona e crie o seu próprio ClassLoader.

Você pode ler este artigo na íntegra aqui

Por favor, coloque os seus comentários sobre este artigo aqui.

Olá. Não sei se minha dúvida refere-se exclusivamente a ClassLoaders, mas estou com uma dúvida que está sendo gerada usando-o, portanto, lá vai:

Estou tentando instalar o Geronimo. Porém, apresenta um erro inicial dizendo que o classloader não consegue localizar a classe Ljavax.net.ssl.KeyManager. Observei que existe um L no começo, estando todo o restante ok. Não acredito que o L esteja ao acaso, mas também não consigo entender seu significado. Alguém poderia me esclarecer o seu uso?

Grato.

“LPacote.NomeDaClasse;” é o nome “interno” de uma classe, que a JVM usa para referência.

Vou dar um exemplo.

import java.util.*;

class NomeClasse {
    static void imprimirNomeClasse (String titulo, Class cls) {
        System.out.println (titulo);
        System.out.println ("Nome da classe: " + cls.getName());
        System.out.println ("Nome canônico: " + cls.getCanonicalName());
        System.out.println ("Nome simples: " + cls.getSimpleName());
        System.out.println ();
    }

    public static void main(String[] args) {
        String s = "teste";
        int[] i = new int[10];
        Integer[] j = new Integer[10];
        List<Double> d = new ArrayList<Double>();
        float f = 3.4f;
        
        imprimirNomeClasse ("Nome da classe String:", s.getClass());
        imprimirNomeClasse ("Nome da classe de um array de int: ", i.getClass());
        imprimirNomeClasse ("Nome da classe de um array de Integer: ", j.getClass());
        imprimirNomeClasse ("Nome da classe de um ArrayList: ", d.getClass());
        imprimirNomeClasse ("Nome da 'classe' de um primitivo (float): ", float.class);
    }
}

A saída deste programa:

[code]Nome da classe String:
Nome da classe: java.lang.String
Nome canônico: java.lang.String
Nome simples: String

Nome da classe de um array de int:
Nome da classe: [I Nome canônico: int[]
Nome simples: int[]

Nome da classe de um array de Integer:
Nome da classe: [Ljava.lang.Integer;
Nome canônico: java.lang.Integer[]
Nome simples: Integer[]

Nome da classe de um ArrayList:
Nome da classe: java.util.ArrayList
Nome canônico: java.util.ArrayList
Nome simples: ArrayList

Nome da ‘classe’ de um primitivo (float):
Nome da classe: float
Nome canônico: float
Nome simples: float
[/code]

Opa, valew a explicação, muito legal. Eu estou usando bastante agora ClassLoaders, para ser mais específico, é quase a função vital do projeto, junto com reflect. Muito legal!

Grande abraço.