2010-12-06 4 views
1

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?

+2

Warum C++ Variablen und Funktionen in Klassen packt? –

+2

Beachten Sie, dass statische Methoden (wie die 'main'-Methode) mehr oder weniger" unabhängige Funktionen "sind. – Thilo

+0

@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 –

Antwort

5

Denn so wollten die Designer der Sprache sein.

3

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:

  1. Sie die Anwendung starten mit java MyClass
  2. Die JVM lädt diese Klasse ("Classloading")
  3. Die JVM startet einen neuen Thread (der Haupt-Thread)
  4. die JVM ruft die Methode mit der Signatur public static void main(String[])

Das ist es (in kurz).

+1

Außer Java ist die Definition einer "Sache" ist viel enger als in einigen anderen Sprachen . –

+2

@Karl - Die Antwort wurde entwickelt, um einem reinen Java-Anfänger zu helfen, keine Diskussion über * die beste * OO-Sprache zu gewinnen ;-) –

+0

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

1

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.

+0

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

0

Und Sie können mehrere Einstiegspunkte in einem Jar haben, abhängig davon, wie viele Klassen innerhalb des Pakets Haupt hat.

+0

Ich sehe. Das sieht aus wie ein guter Grund, obwohl ich herausfinden muss, warum wir mehrere Einträge benötigen. – shimna

+0

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

+0

Ich werde dies im Hinterkopf behalten Lalit :) Ich war so entmutigt, als das einfache Helloworld-Programm in eine unheimliche Klasse gebracht wurde :) – shimna

0

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).

Verwandte Themen