+ Antworten
Ergebnis 1 bis 7 von 7

Thema: Java-Klasse und der Dateiname

  1. #1
    User double Themenstarter

    Registriert seit
    08.01.2016
    Fachbeiträge
    97
    Genannt
    1 Post(s)
    Hallo.

    Mir ist eben etwas aufgefallen und ich wollte nur mal fragen wieso das so ist. Und zwar muss der Dateiname ja der gleiche Name wie der Klassenname sein mit .java hintendran. Nun programmieren wir in der Berufsschule aber grad mit C und da ich Java problemlos beherrsche probiere ich Probleme erstmal in java aus und übersetze sie dann in C. Da ich nun allerdings weiß das nicht auf allen PC's ein Java-Compiler drauf ist (Hauptsächlich die PC's, die keine eigenen sind sondern sich auf nem Linux-Server anmelden und nur dort arbeiten) und ich mir unsicher bin ob auf meinem PC ein Java-Compiler ist wollte ich schonmal nen Online-Compiler vorbereiten. Und bei beiden gefundenen ist mir etwas aufgefallen:

    Ist die Klasse so definiert:
    public class XXX
    Kommt ein Compiler-Fehler, das die Klasse in ner Datei sein muss, die den gleichen Namen hat da sie public ist. Und das hat mich dann irritiert. Wenn ich das public weglasse und sie so schreibe:
    class XXX
    Funktioniert alles Problemlos.

    Also warum hat man nun diese Beschränkung nicht mehr? Dachte der Compiler braucht das um die Klassen wiederzufinden oder iwie sowas, ist schon was her das ich mich mit solchen Basics beschäftigt hab.

  2. #2
    Global Moderator Floppy Disc
    Registriert seit
    30.07.2013
    Fachbeiträge
    839
    Genannt
    109 Post(s)
    Das ist so festgelegt: Chapter*7.*Packages

    If and only if packages are stored in a file system (§7.2), the host system may choose to enforce the restriction that it is a compile-time error if a type is not found in a file under a name composed of the type name plus an extension (such as .java or .jav) if either of the following is true:

    The type is referred to by code in other compilation units of the package in which the type is declared.

    The type is declared public (and therefore is potentially accessible from code in other packages).
    Maven is never completely installed

  3. Es bedanken sich:
    Darse (06.12.2016)
  4. #3
    User Megabyte Avatar von Timothy_Truckle
    Registriert seit
    01.08.2013
    Ort
    Wasserkuppe
    Fachbeiträge
    1.329
    Genannt
    85 Post(s)
    Blog-Einträge
    5
    Zitat Zitat von Darse Beitrag anzeigen
    Kommt ein Compiler-Fehler, das die Klasse in ner Datei sein muss, die den gleichen Namen hat da sie public ist. Und das hat mich dann irritiert. Wenn ich das public weglasse und sie so schreibe:
    class XXX
    Funktioniert alles Problemlos.

    Also warum hat man nun diese Beschränkung nicht mehr?
    Ein Grund könnte sein, dass es prinzipiell erlaubt ist, mehrere nicht-public Klassen in einer Datei zu haben und und dass der Compiler schlicht nicht prüft, ob die nicht-public Klasse die einzige in der Datei ist.

    bye
    TT

  5. Es bedanken sich:
    Darse (06.12.2016)
  6. #4
    Global Moderator Viertel Gigabyte
    Registriert seit
    05.08.2008
    Fachbeiträge
    4.902
    Genannt
    308 Post(s)
    Um welche Online-Compiler geht's denn da?
    Es könnte sein, dass die ihre eigene Infrastruktur um den dort eingegebenen Code drumrumbauen, die durch das (dann: anscheindn überflüssige) "public" durcheinanderkommt. Schließlich wird man bei so einem "Code-Eingabe-Formular" ja vermtlich nicht angeben, welcher Dateiname für den dort eingegebenen Code angenommen werden soll...

  7. #5
    User double Themenstarter

    Registriert seit
    08.01.2016
    Fachbeiträge
    97
    Genannt
    1 Post(s)

  8. #6
    User Kilobyte
    Registriert seit
    25.09.2008
    Fachbeiträge
    236
    Genannt
    13 Post(s)
    Bei dem compiler den du verlinkt hast steht eh in der compile output warum es nicht geht. Der service legt das ganze in einer Datei mit namen /temp/file.java ab und daher kann die "public class myCode" nicht kompiliert werden.
    ändere den classname in "file2 nachdem du den compile error erhältst und es funktioniert dann. Vermutlich wird der filename aber nicht immer /temp/file.java sein sondern kann auch mal anders lauten

  9. #7
    Global Moderator Viertel Gigabyte
    Registriert seit
    05.08.2008
    Fachbeiträge
    4.902
    Genannt
    308 Post(s)
    Ja, AmunRa hat recht und meine Vermutung bestätigt. (Wenn man die Klasse "public class file" nennt, geht es, aber das ist nur ein Seiteneffekt der besagten Compilerinfrastruktur)

+ Antworten Thema als "gelöst" markieren

Direkt antworten Direkt antworten

Zu welchem Kontinent gehört Japan?

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 20.11.2016, 07:35
  2. (Entwurfsmuster) Abstrakter Klasse verweis auf implementierende Klasse mit geben
    Von Prototype im Forum Allgemeine Themen
    Antworten: 20
    Letzter Beitrag: 03.01.2015, 23:17
  3. neue Java Klasse vom Typ Auto erstellen
    Von Daphne im Forum Hausaufgaben
    Antworten: 7
    Letzter Beitrag: 07.11.2010, 22:38
  4. Java Field Klasse
    Von fruchtstern im Forum Java-Grundlagen
    Antworten: 4
    Letzter Beitrag: 28.05.2010, 19:32

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •