2016-11-29 4 views
3

Die meisten Programme, die ich sehe, haben die Hauptmethode in einer öffentlichen Klasse, im Gegensatz zu einer Klasse ohne Modifizierer. zB:Gibt es einen wirklichen Grund, Java main in einer öffentlichen Klasse zu haben?

public class Main 
{ 
    public static void main(String[] args) 
    { 
     System.out.println("Hello, World!"); 
    } 
} 

statt

class Main 
{ 
    public static void main(String[] args) 
    { 
     System.out.println("Hello, World!"); 
    } 
} 

Von dem, was ich lese, ist der einzige Grund, die Klasse explizit öffentlich zu haben, ist es sichtbar Klassen außerhalb ihres eigenen Paket zu machen.

Die Aufgabe von main ist lediglich, als ein Plugin zu Ihrer eigentlichen Programm-API zu fungieren, die leicht mit jeder anderen Klasse mit Main ausgetauscht werden kann (GUIs/CUIs ändern sich ständig und müssen als Wegwerfartikel ausgelegt sein) .

Wenn ich nicht beabsichtige, dass die Klasse für andere Java-Klassen sichtbar ist; und wenn ich es brauche, kann ich eine neue Containerklasse für eine neue Hauptdatei erstellen, die weiß, dass sie von anderen Klassen verwendet werden kann, und sie wäre öffentlich.

Gibt es irgendeinen Grund, Containerklassen für das Haupt "public" standardmäßig zu machen, außer Leuten beizubringen, ihre Klassen genauso zu benennen wie die Klasse darin (was nicht erzwungen wird, wenn Sie public auslassen und Verwirrung stiften) "Warum produziert Foo.java Main.class?")?

+3

stört es Sie wirklich nach 10 Jahren schreiben Programme? – AdamSkywalker

+1

Guter Punkt krank entfernen Sie es. – Dmitry

+1

Ich würde nur aus Gründen der Sauberkeit sagen ... – XavCo7

Antwort

4

Ich denke, es gibt drei Gründe, warum es auf diese Weise in der Regel getan:

  1. Es fühlt sich komisch an eine öffentliche statische Methode in einer Klasse zu haben, die
  2. Hauptklassen werden in einem öffentlichen nicht öffentlich ist selten ausgesetzt API-Bibliothek, so ist es nicht wirklich wichtig. Und IDEs generieren in der Regel standardmäßig öffentliche Klassen.
  3. Der Bootstrapping-Code der VM, der die main-Methode aufrufen muss, wird als Code außerhalb des Pakets angesehen, und es fühlt sich daher richtig an, die Klasse öffentlich zugänglich zu machen, um sie für diesen logisch externen Code zugänglich zu machen.
0

Ich weiß nicht, es gibt technische Gründe dafür.

Nicht-technische Gründe, die ich denken kann, sind:

  • Convention. Wie viele Leute werden überrascht sein, wenn sie nicht öffentliche Hauptklassen sehen? Irgendein Gewinn von dieser Überraschung?
  • Ausdruck der Absicht. public bedeutet öffentlich, kein Modifikator bedeutet Paket-privat. Ich würde erwägen, dass die Hauptklasse für den öffentlichen Gebrauch gedacht ist, also ist public ein besserer Ausdruck dieser Absicht.
+0

Sie haben Recht, wenn ich eine Klasse ohne einen Modifikator sehe muss ich darüber nachdenken, warum es keinen Modifikator hat, wenn ich öffentliche oder private Klasse sehe, ist es offensichtlich, warum es ist so. – Dmitry

Verwandte Themen