$1.class

Gostaria de saber o pq algumas classe q eu compilo,
em vez de criar apenas o “classe.class” cria tb “classe$1.class”…

o q seria esse “$1.class”?

Porque voce tambem criou alguma Anonymous Class ( Classe Anonima ) no codigo fonte. Isso eh muito comum ocorrer em aplicacoes graficas… como uma classe anonima nao tem nome, um “contador” vai sendo incrementado a cada nova classe anonima encontrada…

Rafael

mas Rafael…

o q vem a ser uma classe anonima??

Uma classe anonima eh uma classe que nao tem nome, nao tem um objeto relacionado com ela. Por exemplo:

interface I 
{
	public void escreve();
}

public class T
{
	public I metodo()
	{
		return new I() {
			public void escreve()
			{
				System.out.println("Olaaaa");
			}
		};
	}
	public static void main(String args[])
	{
		T t = new T();
		t.metodo().escreve();
	}
}

Os arquivos criados apos a compilacao sao

T.class
I.class
T$1.class

Note que, ao fazer

return new I() {
			public void escreve()
			{
				System.out.println("Olaaaa");
			}
		};

estamos implementando a interface “I”, porem sem criar classe adicional alguma. Isso eh util quando preicsamos de um objeto mas nao faz sentido ter uma variavel especifica para ele, por exemplo.
Este recurso eh muito utilizado com KeyListener e ActionListener’s em programacao grafica em Java.

Rafael

Rafael,

Esse assunto é bem interessante, aqui sempre acontece isso.
Eu achava que isso era um referencia que era criada, qdo instanciasse outra classe dentro da classe.
Como fazer para nao criar essas classes anonimas? Isso prejudica a performace da aplicãção.

[]´s

Nao prejudica nao. Eh como uma classe qualquer no sistema. Para nao criar elas basta… nao criar… Se elas estao no teu programa, deve ser por alguma razao… alguem colocou la e achou que seria um bom lugar para usar…

Rafael

Rafael:

O thiagorani quis dizer se não tem como não gerar essas classes, pois na empresa onde trabalhamos as vezes ele gera ate 40 classes anonimas, ocmo vc disse, como não prejudica não vejo o porque de não deixar o java gerar, mas tem alguma forma de não gerar esses class??

Valeu

Ate mais…

Provavelmente a classe está lá por algum motivo (leia-se: está sendo usada). Se você tiver certeza de que ela é totalmente inútil, simplesmente retire-a do código!
Não gerar os .class realmente não faz sentido nenhum, pois o compilador compila todas as classes que estão declaradas no seu código para ter certeza de que ao rodar a aplicação ele encontrará as classes que precisa. Mas supondo que você realmente não queria elas e apague manualmente os .class, provavelmente a classe que está utilizando ela irá parar de funcionar! Afinal, se está no seu código, está sendo usada.

Vamos ver se eu entendi:


import util.Teste2;

public class Teste
{
    public static String s1 = "Richard";
    private Teste2 teste2;

    public Teste()
    {
       teste2 = new Teste2();
    }
   public static void main(String args[])
   {
       System.out.println("Valor da String s1: "+s1);
   }
}
//Teste2 é uma classe que estou importando

Isso significa que se eu tenho uma classe Teste e lá dentro, crio e instancio um objeto referente a outra classe ele irá gerar dois .class

Teste.class
Teste$1.class

Seria isso?? No momento em que eu instancio uma classe ja existente dentro de outra ele cria um novo class?

Ate mais…

Nao, nao… o $1.class ( ou $2.class etc… ) somente aparece quando voce tem classes anonimas… O teu exemplo nao cria o Teste$1.class da maneira que foi apresentado…

Tem alguma outra coisa ai… se o codigo fonte do Teste.java for somente o que voce passou, o $1.class nao eh gerado…

Rafael

O Rafael já colocou um exemplo de uma classe anônima lá em cima, mas vou colocar um menor aqui para talvez ficar mais claro onde está a classe anônima:

public class Teste {
public static void main(String[] args) {

Object obj = new Object() [color=“indigo”]{
public String toString() { return “Este é um objeto de uma classe anônima”; }
}[/color];

System.out.println(obj);

}
}

A parte colorida é uma classe anônima subclasse de Object, que está fazendo override do método toString()

Bani e Rafael:

Valeu pelas dicas, agora entendi o que significa uma classe anonima…estava fazendo confusão… :lol:

Valeu e ate mais…