2016-10-09 2 views
-3

J'ai un programme appelé Main.java, montré ci-dessous. Après la compilation de ce programme, il y aura deux fichiers .class: Main.class et Main $ 1.class. Mon problème est que les deux fichiers .class sont exactement les mêmes.Le fichier de classe pour un nouveau thread et le fichier de classe pour principal sont les mêmes

Quelqu'un sait ce qui ne va pas?

Je voulais instrumenter certains codes dans la méthode run() du nouveau thread, mais je ne trouve pas les instructions de codes dans la méthode run() d'un nouveau thread.

public class Main{ 
    public static void main(String...args){ 
     Thread t=new Thread(){ 
     @Override 
      public void run(){ 
      System.out.println("xxxx"); 
      } 
     }; 
    t.start(); 
    } 
} 
+4

Mon argent serait sur vous pas comparer les deux fichiers de classe correctement. –

+0

Aucune idée de ce que vous demandez. Que voulez-vous dire par ces deux fichiers de classe sont les mêmes? Ils ne peuvent pas. L'un est pour le public extérieur Classe principale; et l'autre est pour une classe intérieure et anonyme. Deux choses complètement différentes! – GhostCat

+0

S'il vous plaît être plus élaboré avec votre question. – Blip

Répondre

3

Mon argent serait sur vous ne pas comparer les deux fichiers de classe correctement. Je serais prêt à parier que vous écrivez quelque chose comme ça dans votre invite de bash comme:

md5sum Main.class Main$1.class 

(ou un outil checksumming autre que md5sum)

Ceci est substituait en fait la variable appelée 1 dans la chaîne - à moins que vous avez cette variable définie, cette variable est vide, de sorte que se développe à:

md5sum Main.class Main.class 

qui montrera que le même contenu du fichier.

Essayez unique citant la deuxième chaîne:

md5sum Main.class 'Main$1.class'