Java hat seine Vorzüge ganz sicher nicht im Desktop-Bereich, obwohl hier natürlich einiges für die Plattformunabhängigkeit sprechen würde.
Die Stärken von Java sind ganz klar im Unternehmensbereich angesiedelt. Diese ganze J2EE-Geschichte hält Java doch überhaupt am Leben und hebt die Sprache so hervor. Hier zeigen sich ganz klar die Stärken: Portabilität, Flexibilität, Austauschbarkeit und Anpassbarkeit.
Das ist auch der Grund warum moderne "Hochschulfabriken" zu Hauf ihre angehenden Informatiker als Java-Entwickler ausbilden/produzieren: Die Industrie fordert sie einfach! J2EE-Experten sind trotzdem immer noch Mangelware und daher winken einem angehenden Java-Entwickler durchaus interessante Job-Angebote, wenn man sich halt entsprechend spezialisiert.
Auf dem Desktop konnte Java (leider) nie wirklich Fuß fassen, was Sun sich aber wohl selbst zuzuschreiben hat. Als es auf dem Desktop nicht so richtig klappen wollte, hat man halt das Geschäftsmodell entsprechend auf die Enterprise-Produkte ausgerichtet.
Den Vorwurf, dass Java langsam sei kann ich nur zum Teil nachvollziehen. Die JVM benötigt zwar ein wenig Zeit zum Hochfahren, doch ist die Ausführungszeit (des reinen Codes) dank Just in Time Compiliation mittlerweile doch nahezu auf C-Niveau angekomen.
Es gibt diverse Benchmarks die immer und immer wieder Java mit C und C++ verglichen haben und immer war es das gleiche Spiel: Java ist alles andere als langsam und konnte sogar selbst bei komplizierten Verfahren sehr gut mithalten.
Warum aber hat es den Eindruck dass Java-Programme langsam und träge sein? Das hat leider etwas mit der Art und Weise zu tun wie Sun seiner Zeit die GUI-Komponenten "vermasselt" hat. Den Ultimativ schlechten Ruf hat Java durch AWT damals bekommen. Langsam, hässlich ... einfach grausam.
Als dann Swing kam wurde die Situation merklich besser. Bessere Performance, sowie verschiedene Look&Feels, die sich an die Beschaffenheit der verwendeten Desktopumgebung anpassen. Trotzdem erinnere ich mich an einen CT-Benchmark vor 1-2 Jahren, als Java-Programme ohne GUI nahezu identische Ausführungszeiten zu C/C++ Programmen hatten. Sobald aber GUI-Komponenten hinzukamen hat sich das Bild irgendwie meistens deutlich zu Gunsten der klassischen Programmiersprachen verschoben.
Nun es gibt eine relativ einfache Lösung: Man verwendet anstelle von Swing die freie Bibliothek SWT. Eclipse und Azureus sind z.B. SWT-Basiert. Sie sehen gut aus und fühlen sich auch recht fix an.
Wer immer noch nicht glaubt, dass Java schnell sein kann soll mal einen Blick auf das Automobilportal mobile.de werfen. In einem absoluten Mammutprojekt wurde hier über einen Zeitraum von zwei Jahren die gesamte Software von Perl auf Java umgestellt. Im Endeffekt kann man den gewonnen Performancegewinn kaum noch in Worte fassen, das Projekt läuft jetzt richtig rund und um einige Faktoren schneller als früher. (http://www.heise.de/kiosk/archiv/ix/2008/3/98)
Warum aber hat Java sich unter Linux nie richtigdurchsetzen können, obwohl man damit hervorragend plattformunabhängige Software hätte realisieren können?
Meiner Meinung nach ist das einfach historisch bedingt. Die alten Linuxer sind C-Freaks.... (zurecht).
Maschinennahe Programmierung ist alles, jeder will jeden seinen Pointer selbst pflegen!
Dann kommt da einfach so eine objektorientiere Sprache, erzeugt nichtmal handfesten binärcode sondern irgendeinen Bytecodequatsch und möchte sich auch noch unverschämter weise selbst um das Entsorgen von nicht mehr gebrauchten Objekten kümmern (Garbage-Collection). Das war reine IT-Blasphemie und für C/C++ -Programmierer einfach undenkbar ☺
Zudem hat Sun sich selbst keinen Gefallen getan und die eigene Java-Implementierung verschlossen gehalten. Wenn man jetzt noch die anfängliche Trägheit von AWT-Programmen mit dazu nimmt, mussten alt eingesessene C-Programmierer einfach denken, dass Java nichts taugt.... Das hat sich nun von der letzten Entwicklergeneration in die nächste fortgepflantzt und geht nur schwer aus den Köpfen der Entwickler und Nutzer hinaus.
Übrigens die JVM-Spezifikationen waren soweit ich weiß nie verschlossen, nur Suns eigene Implementierung. Wer wissen will wie die JVM einzelne Dinge so organisiert sollte sich mal folgendes Buch zu Gemüte führen:
http://java.sun.com/docs/books/jvms/
am besten gleich in Zusammenhang mit der Sprachspezifikation http://java.sun.com/docs/books/jls/
Angenehme literatur für Abende an denen man nichts zu tun hat 😉
@ RoOKie
Ein gutes Tutorial um eben fix Java-Coden zu lernen wirst du kaum finden, weil java eine professionelle und hochgradig umfangreiche Programmiersprache ist. Schnelle Lernerfolge und Ergebnisse wirst du eher mit PHP oder anderen Skriptsprachen erleben. Auch Delphi und Pascal sind deutlich simpler gestrikt als Java. Mit Java bekommt man eine vollwertige objektorientierte Programmiersprache die dieses Paradigma vollständig umsetzt.
Ein gutes Java-Buch (vermutlich das beste deutschsprachige Java-Buch) findet man mit dem Buch "Java ist auch eine Insel". Ein dickes 1500 Seiten Werk, welches sogar online als Openbook verfügbar ist
http://openbook.galileocomputing.de/javainsel7/
Eins noch! Falls ihr wirklich interesse habt an der Software-Entwicklung: Studiert Informatik! ☺
Gruß Mani