Ich habe angefangen Java zu lernen und habe einige Bücher und Materialien online gesammelt. Ich habe mit C++ programmiert. Was ich nicht verstehe, ist, dass sogar die Hauptmethode in eine Klasse in Java gepackt ist. Warum haben wir alles in einer Klasse in Java gepackt? Warum hat es keine unabhängigen Funktionen?Warum ist der ganze Java-Code in Klassen gepackt?
Antwort
Denn so wollten die Designer der Sprache sein.
Dies ist das Hauptkonzept der objektorientierten Programmiersprachen: alles ist ein Objekt, das eine Instanz einer Klasse ist.
Da es in Java nur Klassen gibt (außer den wenigen Java Primitiven, wie int, float, ...) müssen wir die main
Methode definieren, den Startpunkt für eine Java Anwendung in einer Klasse.
main
Die Methode ist eine normale statische Methode, die wie jede andere statische Methode verhält. Nur dass die virtuelle Maschine diese eine Methode (nur) verwendet, um den Haupt-Thread der Anwendung zu starten.
Grundsätzlich funktioniert es wie folgt aus:
- Sie die Anwendung starten mit
java MyClass
- Die JVM lädt diese Klasse ("Classloading")
- Die JVM startet einen neuen Thread (der Haupt-Thread)
- die JVM ruft die Methode mit der Signatur
public static void main(String[])
Das ist es (in kurz).
Außer Java ist die Definition einer "Sache" ist viel enger als in einigen anderen Sprachen . –
@Karl - Die Antwort wurde entwickelt, um einem reinen Java-Anfänger zu helfen, keine Diskussion über * die beste * OO-Sprache zu gewinnen ;-) –
Die Hauptmethode ist der Einstiegspunkt für die Anwendung, und da sie in einer Klasse liegt, Es besteht die Möglichkeit, die Hauptmethode immer wieder von verschiedenen Instanzen dieser Klasse aus aufzurufen. (Entschuldige, wenn ich mich albern täusche, aber keine Bücher oder Online-Artikel erklären solche Zweifel;)) – shimna
Java erzwingt das Objektorientierte Paradigma sehr sehr stark. Das heißt, es gibt viele Möglichkeiten, um es zu umgehen, wenn Sie es umständlich finden.
Zum einen kann die Klasse, die Haupt enthält leicht viele andere Methoden enthalten. Außerdem ist es nicht ungewöhnlich, eine Klasse namens "Dienstprogramm" oder etwas Ähnliches zu erstellen, um all Ihre generischen Methoden zu speichern, die keiner bestimmten Klasse oder Objekten zugeordnet sind.
In diesem Fall erstellen wir eine Klasse nur um ein Recht zu erstellen. :) Ich habe eine Klasse in einer anderen Sprache benutzt, die mir Bequemlichkeit gegeben hat. Hier bin ich gezwungen, eine Klasse zu schaffen, ohne zu wissen, warum ich eine haben sollte. Ich versuche den Grund für diese Designentscheidung zu verstehen. :) – shimna
Und Sie können mehrere Einstiegspunkte in einem Jar haben, abhängig davon, wie viele Klassen innerhalb des Pakets Haupt hat.
Ich sehe. Das sieht aus wie ein guter Grund, obwohl ich herausfinden muss, warum wir mehrere Einträge benötigen. – shimna
Ich habe einmal versucht, diese Frage zu beantworten, und ich konnte keine gute Antwort finden, abgesehen davon, dass es eine Entscheidung der Sprachimplementierer ist. Das Einzigste, was ich herausfinden konnte, war, dass die Sprachdesigner wollten, dass es rein objektorientiert ist, also wollen sie alles in der Klasse. Mehrere Einstiegspunkte, schienen mir immer mehr ein Ergebnis dieser Entscheidung als alles andere. Ich würde vorschlagen, diese Frage für einige Zeit beiseite zu legen und sich darauf zu konzentrieren, die anderen Sprachmerkmale zu lernen :). Diese Art von Fragen sind wie schwarze Löcher. Ich wünsche dir viel Glück – lalit
Ich werde dies im Hinterkopf behalten Lalit :) Ich war so entmutigt, als das einfache Helloworld-Programm in eine unheimliche Klasse gebracht wurde :) – shimna
Wenn Sie in einer intelligenten IDE wie Eclipse arbeiten, werden Sie irgendwann feststellen, dass die scheinbar übermäßigen Beschränkungen, Ausnahmen und strengen Strukturen von Java tatsächlich ein Segen sind. Der Compiler kann Ihren Code viel besser verstehen und durcharbeiten, wenn die Sprache nicht mit syntaktischem Müll überladen ist. Es wird Ihnen Informationen über nicht verwendete Variablen und Methoden, toten Code usw. geben und die IDE wird Ihnen vorgeschlagene Fixes und Code-Vervollständigung (und natürlich Auto-Format) geben. Ich tippe niemals wirklich Import-Anweisungen aus, ich fahre einfach mit der Maus über den Code und wähle die gewünschte Klasse aus. Bei rigorosen Typen, generischen Typen, Casting-Restriktionen usw. kann der Compiler eine Menge Code abfangen, der sonst zur Laufzeit zu allerlei verrückten, nicht erkennbaren Verhaltensweisen führen kann. Java ist die strengste Sprache in dem Sinne, dass das meiste von dem, was Sie schreiben, nicht kompiliert wird oder andernfalls sehr schnell eine Ausnahme der einen oder anderen Art auslöst. Also, wenn Sie eine Frage über die Struktur von Java stellen, werden Java-Programmierer in der Regel nur antworten "weil das die Regel ist", während Python-Programmierer versuchen, ihre Einrückung richtig zu bekommen (kein automatisches Format zu helfen), schreiben Ruby-Programmierer Einheit Tests, um sicherzustellen, dass alle ihre Argumente vom richtigen Typ sind, und C-Programmierer versuchen herauszufinden, wo der Segfault auftritt. Wie ich verstehe, hat C++ alles, was Java hat, aber zu viele andere Fähigkeiten (einschließlich der Umwandlung von irgendetwas in etwas und einer so gefährlichen Zeigerarithmetik).
- 1. Was verhindert, dass __attribute __ ((gepackt)) in ISO C/C++ gelangt?
- 2. Android: erstellen Checkbox über javacode in Klasse Fragment
- 3. Warum erhalte ich TypeError: eine ganze Zahl ist erforderlich?
- 4. Zeigen Sie, wie C-Strukturen während der Erstellungszeit gepackt werden
- 5. Warum mehrere DbContext-Klassen?
- 6. Warum global ist null in der Funktion?
- 7. ganze Zahl erhalten, die nicht in der Datenbank ist
- 8. Pybuilder - Non-Python-Dateien sind nicht gepackt
- 9. Verifiziere Android apk wurde nicht neu gepackt?
- 10. C++ Vorwärts Deklarieren Klassen der Klassen
- 11. Warum sind innere Klassen in der Reflexion nicht öffentlich?
- 12. Ganze Liste in der Ajax.Autocompleter-Funktion
- 13. Warum nicht abstrakte Klassen in Java serialisieren?
- 14. Warum ganze Zahlen kleiner als 32bit verwenden?
- 15. Warum der Geltungsbereich der geschachtelten Typen keine abgeleiteten Klassen enthält?
- 16. Warum werden statische Klassen verwendet?
- 17. PHP-Klassen ist dies der richtige
- 18. Warum sind statische Klassen versiegelt?
- 19. Warum ist die Eigenschaft Dekorator nur für Klassen definiert?
- 20. Warum stürzt meine Eclipse die ganze Zeit?
- 21. Warum ist es unmöglich, generische Klassen zu injizieren?
- 22. Vermeidung von Strukturauffüllung in c mit __Attribut __ ((gepackt))
- 23. SecurityException: ECall-Methoden müssen in ein Systemmodul gepackt werden
- 24. Warum haben abstrakte Klassen in Java Konstruktoren?
- 25. Warum bevorzugt Android statische Klassen?
- 26. Warum erzeugt coffescript solche Klassen?
- 27. Warum Klassen die Reihenfolge ändern?
- 28. Warum verwenden wir innere Klassen?
- 29. Wie kann dies in eine foreach-Schleife gepackt werden
- 30. java.util.Logger verhält sich anders, wenn es in verschiedenen Betriebssystemen gepackt ist
Warum C++ Variablen und Funktionen in Klassen packt? –
Beachten Sie, dass statische Methoden (wie die 'main'-Methode) mehr oder weniger" unabhängige Funktionen "sind. – Thilo
@Thilo Ich würde auch hinzufügen, dass eine Klasse, die nicht instanziiert werden kann und nur statische Methoden hat das gleiche wie eine cpp-Datei mit Funktionen und einem Namespace –