java-forum.org - Java programmieren aus Leidenschaft

Zurück   java-forum.org - Java programmieren aus Leidenschaft > Java - Programmierung > Allgemeine Java-Themen

Allgemeine Java-Themen Allgemeine Themen, die nicht in andere Fachforen und nicht zu den Java Basics passen

Antwort    
Themen-Optionen Thema durchsuchen Ansicht
Alt 10.08.2011, 14:15   #1 (permalink)
ben33
Nicht angemeldet
 
Fachbeiträge: n/a
Standard Test$1.class mit dem javac compiler

ich hab hier ein kleines problem, bei dem ich nicht ganz mitkomme. das kompilieren einer klasse (siehe unten) mit dem befehl "javac Test.java" erzeugt 3 dateien:

Test.class
Test$1.class
Test$State.class

die datei Test$1.class scheint auf dem ersten blick eine annonyme klasse zu sein, es ist aber mit ziemlicher sicherheit der switch block, denn wenn ich diesen entferne, wird jene datei nicht erzeugt. eclipse hingegen erzeugt sowohl in eigenen bin verzeichnis als auch beim jar export nur die beiden dateien "Test.class" und "Test$State.class". und genau DAS will ich vom javac compiler auch.

warum also lagert javac den switch block in eine eigene class datei aus und wie kann ich das verhindern? was macht eclipse anders?

Test.java
Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
public class Test implements Runnable {
    
    private State state;
    
    public Test() {
        this.state = State.NEW;
    }
    
    public void run() {
        loop: while (true) {
            switch (this.state) {
            case NEW:
                this.initialize();
                break;
                
            case S1:
                this.processState1();
                break;
                
            case S2:
                this.processState2();
                break;
                
            case S3:
                this.processState3();
                break;
                
            case FINISHED:
                this.finish();
                break loop;
            }
        }
    }
    
    public void initialize() {
        System.out.println("initialize");
        this.state = State.S1;
    }
    
    public void processState1() {
        System.out.println("state1");
        this.state = State.S2;
    }
    
    public void processState2() {
        System.out.println("state2");
        this.state = State.S3;
    }
    
    public void processState3() {
        System.out.println("state3");
        this.state = State.FINISHED;
    }
    
    public void finish() {
        System.out.println("finish");
    }
 
    public static void main(String[] args) {
        new Thread(new Test()).start();
    }
 
    public enum State {
        NEW,
        S1,
        S2,
        S3,
        FINISHED;
    }
}

Geändert von SlaterB (10.08.2011 um 14:16 Uhr) Grund: Titel
 
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 10.08.2011, 14:29   #2 (permalink)
Stammbenutzer
Viertel Megabyte
 
Benutzerbild von AlexSpritze
 
Registriert seit: 24.01.2010
Fachbeiträge: 442
Blog-Einträge: 1
Abgegebene Danke: 3
Erhielt 70 Danke für 68 Beiträge
Schau doch mit dem Java-Decompiler cavaj in die *.class Dateien rein. Dann siehst du was es wirklich ist.

PS: Wahrscheinlich wäre es sinnvoll das Enum in ein statisches Enum zu ändern, nur eine Vermutung: dann verschwindet auch die mysteriöse $1-Klasse
__________________
Im Übrigen bin ich der Meinung, dass Spanien geowned werden muss, damit wir leben können. # # #
AlexSpritze ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 10.08.2011, 14:50   #3 (permalink)
ben33
Nicht angemeldet
 
Fachbeiträge: n/a
der java decompiler ermittelt für die datei "Test$1.class" nur einen leeren klassenrahmen, aus dem von der witch-anweisung aus referenziert wird:

Test$1.class
Code:
class Test$1
{
}
Test.class
Code:
      ...
      switch (Test.1.$SwitchMap$Test$State[this.state.ordinal()]) {
      ...
die umwandlung in ein statisches enum bewirkt diesbezüglich rein gar nix... die frage also bleib wie kann ich diese datei-trennung verhinden (was eclipse ja schon tut)? hab ich ein compiler-flag übersehen?
 
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 10.08.2011, 14:59   #4 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von SlaterB
 
Registriert seit: 13.11.2005
Fachbeiträge: 32.021
Abgegebene Danke: 0
Erhielt 2.623 Danke für 2.583 Beiträge
vielleicht stehts hier
Java enum and additional class files - Stack Overflow

Suche '$SwitchMap java'
__________________
Hansa wird Meister.
SlaterB ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 10.08.2011, 15:17   #5 (permalink)
ben33
Nicht angemeldet
 
Fachbeiträge: n/a
verstehe ich das richtig? eclipse nutzt selbst den javac compiler gar nicht sonder hat was eigenes dabei?
 
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 10.08.2011, 15:21   #6 (permalink)
Stammbenutzer
Megabyte
 
Benutzerbild von musiKk
 
Registriert seit: 05.11.2007
Fachbeiträge: 1.844
Abgegebene Danke: 0
Erhielt 71 Danke für 68 Beiträge
Zitat: AlexSpritze
Beitrag anzeigen
PS: Wahrscheinlich wäre es sinnvoll das Enum in ein statisches Enum zu ändern, nur eine Vermutung: dann verschwindet auch die mysteriöse $1-Klasse
Ein nested Enum ist immer static. Vermutung: Ausprobieren ist besser als vermuten...

Zitat: ben33
Beitrag anzeigen
verstehe ich das richtig? eclipse nutzt selbst den javac compiler gar nicht sonder hat was eigenes dabei?
Korrekt.
__________________
GitHub-Profil
musiKk ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 10.08.2011, 15:21   #7 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von SlaterB
 
Registriert seit: 13.11.2005
Fachbeiträge: 32.021
Abgegebene Danke: 0
Erhielt 2.623 Danke für 2.583 Beiträge
das stimmt, man muss Java auch gar nicht installieren, nur Eclipse downloaden und starten
__________________
Hansa wird Meister.
SlaterB ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 10.08.2011, 15:23   #8 (permalink)
Stammbenutzer
Megabyte
 
Benutzerbild von musiKk
 
Registriert seit: 05.11.2007
Fachbeiträge: 1.844
Abgegebene Danke: 0
Erhielt 71 Danke für 68 Beiträge
Zitat: SlaterB
Beitrag anzeigen
das stimmt, man muss Java auch gar nicht installieren, nur Eclipse downloaden und starten
Das ist etwas allgemein ausgedrückt. Ein JDK braucht man nicht, ein JRE natürlich schon.
__________________
GitHub-Profil
musiKk ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Antwort    

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Kein javac Compiler? Chou Java Basics - Anfänger-Themen 1 02.03.2007 20:47
Ant Problem: Unable to find a javac compiler; AlBundy Java Basics - Anfänger-Themen 4 17.02.2005 12:40
eclipse + antenna -> Unable to find a javac compiler friedolin IDEs und Tools 1 12.02.2005 17:06
Compiler (javac) funktioniert nicht... Bitte hilfe! Nemesis1986 Allgemeine Java-Themen 3 26.02.2004 18:41


Lesezeichen

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:52 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de