Was ist, wenn die Hauptmethode innerhalb der "nicht öffentlichen Klasse" der Java-Datei ist?

8

Ich habe eine Java-Datei, die mehr als eine Klasse enthält, von denen eine öffentlich ist. Wenn sich die Hauptmethode in einer nicht öffentlichen Klasse befindet. Ich kann diese Java-Datei nicht ausführen. Warum das? und es gibt auch keinen Kompilierungsfehler. Wenn ja, wie kann ich diese Hauptmethode verwenden?

    
Ahamed 21.09.2012, 04:37
quelle

7 Antworten

0

Sie können natürlich die Hauptmethode außer Kraft setzen, und es verstößt nicht gegen irgendwelche Compiler-Regeln und daher werden Sie keine Compilerfehler haben.

Sie überprüfen, dass trotz der Tatsache, dass Sie mehr als eine Klasse haben, eine Datei, die als public deklariert ist, der Name der Datei ist, die Sie ausführen möchten.

Dies ist eine Konvention, nach der die Datei nach derselben Klasse benannt werden sollte, die in diesem Code öffentlich ist. . .

Wenn Sie also versuchen, diese Klasse auszuführen, hat sie keine Hauptmethode, von der sie ausgeführt wird. Wenn Sie die Hauptmethode in der nicht-öffentlichen Klasse ausführen wollen, ist der einzige Weg dazu, main von einem Haupt-Aufruf aufzurufen Methode der öffentlichen Klasse.

    
Galaxin 21.09.2012, 05:01
quelle
17

Tatsächlich können Sie die Hauptmethode in einer nichtöffentlichen Klasse ausführen. wenn Sie diese Klasse setzen

%Vor%

in einer Datei namens NonPubClass.java. Sie können diese Datei mit dem Befehl javac kompilieren, aber Sie erhalten keine NonPubClass.class, stattdessen erhalten Sie eine A.class. Benutze Java, um diese Klasse aufzurufen und du wirst die gedruckte Zeichenkette sehen --- Dies ist keine öffentliche Klasse!

    
charles_ma 24.07.2013 18:18
quelle
2

Einfache Antwort. %Code%. Sie müssen die Hauptmethode in You can't haben und ihre Signatur muss public class

lauten
  

Es gibt keinen Kompilierungsfehler

Warum würde es sein? Sie tun nichts falsch, soweit Kompilierungsregeln betroffen sind. Einzige Sache ist, dass Ihr public static void main(String... args) nicht als Einstiegspunkt Ihres Codes funktioniert.

    
Priyank Doshi 21.09.2012 04:40
quelle
2

Sehen Sie sich diesen Code an:
Super.java

%Vor%

Um Hello zu drucken, können Sie das Programm wie folgt kompilieren und ausführen:

Wie funktioniert das?
Der Compiler generiert separate .class -Datei für jede Klasse in Ihrem Programm. Anstatt die main() einer nicht-öffentlichen Klasse aus der main() der öffentlichen Klasse aufzurufen, können Sie die Ausgabe wie oben gezeigt ausgeben.

Hinweis: Wie die Konvention sagt, müssen Sie eine public class in die separate Datei <class_name>.java einfügen. Und fügen Sie nicht mehr als eine Klasse in eine einzige Datei ein (außer wenn es sich um eine innere Klasse handelt), denn wenn Sie sie importieren oder mit anderen Klassen verwenden möchten, wird dies zu Problemen führen.

    
Mohammad Faisal 15.07.2013 09:40
quelle
1

Es gibt etwas, das ich hinzufügen möchte, obwohl jeder hier glaubt, dass ein Publikum für das Hauptteil in einer Klasse notwendig ist und dass es ohne Haupt

nicht funktionieren wird

Sie können so viele Hauptleitungen in einer Klasse haben, wie Sie möchten, und Sie können sie ohne einen öffentlichen Zugriffsmodifikator haben. Aber sei vorsichtig, nur die Klasse, die nach der Datei benannt ist, kann öffentlich sein Was ich meine ist, wenn Sie Ihre Datei a.java nennen, dann kann nur die Klasse mit dem Namen a öffentlich sein, keine andere kann diese Funktion haben

Hier ist ein Code, um dies zu zeigen: Wie Sie sehen können, ist der Name der Datei helping.java

%Vor%     
user2440665 31.05.2013 23:33
quelle
0

Es ist ein Fehler bei der Kompilierung, wenn eine Typdeklaration der obersten Ebene einen der folgenden Zugriffsmodifikatoren enthält: protected, private oder static. Dies link kann hilfreich sein.

    
roshan 02.11.2013 08:14
quelle
0

Es ist kein Fehler bei der Kompilierung, da Sie erwähnt haben, dass die Typdeklaration der obersten Ebene nicht geschützt werden soll, weder statisch noch privat.

Wenn Sie den Link Ссылка aufrufen Nun, das hast du geteilt, dann ist es ziemlich klar, dass eine Top-Level-Typ-Deklaration nur auf "Top-Level-Klassen- und Interface-Typ-Deklarationen" verweist und diese nicht geschützt, statisch oder privat bei Top-Level-Deklarationen sein sollten , statisch oder privat für alle Methoden oder Variablendeklarationen in ihnen.

In Bezug auf obigen Code gibt es nichts Falsches in der Deklaration, und der Code wird kompiliert und erfolgreich ausgeführt, da alle äußeren Klassen der obersten Ebene standardmäßig sind und keine Verletzung vorliegt.

Die Antwort auf die oben gestellte Frage ist genau so, wie es von wenigen Experten oben gesagt wurde, dass

"Sicherlich können wir eine Datei mit main-Methode innerhalb einer nicht-öffentlichen Klasse haben und sie wird sowohl kompiliert als auch erfolgreich ausgeführt, aber stellen Sie sicher, dass wir zum Zeitpunkt der Ausführung des Programms den Klassennamen" main Methode "für den Java-Interpreter anstelle der Klasse, die öffentlich ist."

Wenn wir 2 Klassen A (public) und B (nicht-public mit main-Methode) haben, wird die Datei mit "javac A.java" kompiliert, aber während wir den Code ausführen, müssen wir den Befehl als "java B ".

    
Rakesh Pathak 18.07.2016 05:32
quelle

Tags und Links