Welche Nachteile hat die Programmiersprache Java?

10 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Deine Fragen gefallen mir ^^

Oh...meine güte....ich weiß nicht ob dafür die 5.000 Zeichen ausreichen ^^

  • Java ist zu langsam! Die JRE hällt mit richtig gelinkten Kode einfach nicht mit. Selbst .NET ist schneller
  • Damals die "Sonne" und jetzt das "Orakel" bleiben irgendwie auf der Stelle stehen! Sie entwickeln sich nicht weiter. Keine neuen Programmierwerkzeuge. Die Foreach z.B. kam glaube erst mit Version 5 oder 6
  • keine Operatorenüberladung (!)
  • keine implizite- oder explizite Typkonvertierung programmierbar
  • "primitive" Datentypen sind echt eine Qual. Außerdem macht dieser Fakt Java zu einer Nicht-vollständig-objektorientierten Programmiersprache! .NET ist da vollständig. In .NET geht sogar sowas 0xFF.ToString();
  • jede Methode ist überschreibbar
  • Java hat keine Eigenschaften, sondern baut immer noch auf dieses Getter-Setter-Funktions-Modell auf
  • Event Programmierung ziemlich umständlich
  • Die offizielle Dokumentation ist mangelhaft. Es gab mal Zeiten da stand unter Math.asin "returns the asin of a value". Ich weiß nicht ob das heute auch noch da steht. Da merkt man aber schnell, dass da eine automatische Dokumentation statt fand
  • Keine Zeiger oder Delegates :(
  • Kein Destruktor möglich
  • GC nicht steuerbar
  • ALLES ist vorzeichenbehaftet, selbst ein Byte läuft von -128 bis 127. Wer hat sich nur diesen Unsinn ausgedacht?!
  • keine Präcompiler-Direktiven

Das sind schon mal die wichtigsten Kritikpunkte, die mir so einfallen. Vielleicht ergänze ich da noch was wenn mir was einfällt ^^

Für was eignet sich Java besonders gut?

Für Web-Applikationen oder Programme, die auf verschiedenen Plattformen laufen soll ohne dass man einen neuen Kode linkt.

und für was weniger gut ?

Für Zeitkritische und Grafikintensive Probleme ist Java einfach ungeeignet! Da Java nämlich auch nicht (und das kann man oben mit aufnehmen) COM-Schnittstellen einbinden kann. Von daher müssten fremde Engines auch in Java geschrieben worden sein, sonst nützt einem das nichts.

Auch für die Programmierung auf Betriebssystemebene ist Java komplett ungeeignet. Treiber werden weiterhin in C geschrieben.

zum Beispiel Computerspiele, die nicht in Java programmiert sind, dafür muss es einen Grund geben

Viel zu langsam, man macht sich von der JRE abhängig und man kann fremde Schnittstellen (COM) nicht nutzen.

Java ist für mich nur ein Instrument falls ich mal ein plattformunabhängiges Applet programmieren will. Obwohl man da mit Silverlight auch mit Umwegen was reissen kann ^^

Ansonsten macht mir die Programmierung in Java kein Spaß. Teilweise einfach zu umständlich. Da gefällt mir C# von Microsoft am besten. MS geht auch auf die Wünsche der Programmierer ein und bringt immer wieder neue Programmierwerkzeuge heraus (wie z.B. LINQ). Java ist nicht so meine Welt ^^

Freundliche Grüße trotzdem
Omni


Unkreatiiiev  22.09.2015, 18:22

Gute Antwort! Ein paar Mängel:

jede Methode ist überschreibbar

Schlüsselwort final.

Keine neuen Programmierwerkzeuge

Lambdas? Streams?

Und langsam? Das war einmal. Doch in Bezug auf Grafik, ja.

2
Unkreatiiiev  22.09.2015, 18:33

Für Web-Applikationen

Auf keinen Fall. Applets sind fast abgeschafft.

Kein Destruktor möglich

Hätte ich auch gerne manchmal. Rein von der Sprache her aber garnicht notwendig.

Ich finde, dass der stärkste Kritikpunkt der mangelhafte Zugriff auf Native Ressourcen ist.

0
Omnivore01  22.09.2015, 18:44
@Unkreatiiiev

Streams?

Streams? Das ist doch nix neues

Und langsam? Das war einmal.

mhh nee. Also wir haben gerne solche Tests gemacht mit exakt dem gleichen Kode in C, C# und Java. Da schnitt Java nicht gut ab

Ich finde, dass der stärkste Kritikpunkt der mangelhafte Zugriff auf Native Ressourcen ist.

auch das ja :)

0
PerfectMuffin  22.09.2015, 20:13

.NET SCHNELLER ALS JAVA?

DU WAGST ES!!!

Im Ernst, Java hat JIT und ich habe einmal einen Java-Primzahlrechner und einmal einen mit VB gemacht und, holy shit, VB war langsam.

2
Omnivore01  22.09.2015, 21:07
@PerfectMuffin

Logo wag ich es!

Im Ernst.... .NET hat kein JIT oder was? Was denkst du sonst ist in der Runtime?

Ich habe mal ein Anticaptcha für Kreis-Captchas geschrieben. Beides male der selbe Kode: Java vs .NET ... holy shit, java war langsamer

Aber gut dieses Streitthema bekommt man in tausend Jahren nicht gelöst

0
DepravedGirl 
Beitragsersteller
 23.09.2015, 03:04

@Omnivore01

Recht herzlichen Dank für deine ausführliche Antwort !

1

Viele gute Antworten wurden ja schon gegeben.

Ich möchte aus Programmiererperspektive noch einen anderen Aspekt beisteuern:

In der Java-Welt ist es üblich, mit komplexen IDEs und zig vorgefertigen Bibliotheken, Frameworks usw. zu arbeiten. Das führt häufig dazu, dass die Entwickler einer Software sich einen Turmbau zu Babel hochziehen, dessen innere Konsistenz niemand mehr so recht versteht. Und wenn dann irgendwas nicht so funktioniert, wie es sollte, dann wird - anstatt die Substanz in Ordnung zu bringen - auf den Turm eben noch ein weiteres Stockwerk oben draufgesetzt.

Gerade in einer recht strikt OO-mäßig konzipierten Welt ist sowas "tödlich". Denn die Qualität von OO-Software steht und fällt mit einem guten Objektmodell. Und das muss man von Grund auf durchspezifizieren. Wenn man aber auf ein bereits "kaputtes" Modell einfach noch weitere Anbauten draufsetzt, dann wird eine Software dadurch nicht nur völlig unübersichtlich, sondern in Konsequenz steigt auch die Wahrscheinlichkeit für Fehler an, und langsam wird alles dann noch obendrein.

Die Qualität real existierender Java-Programme könnte besser sein, wenn die Programmierer in der Java-Welt öfter mal selbst ihren Kopf benutzen würden, anstatt sich immer nur auf fremde Frameworks, Codegeneratoren etc. zu verlassen. Die Verfügbarkeit von diesem ganzen Krempel sorgt dafür, dass im Java-Bereich erheblich mehr unprofessionelle Frickelei betreiben wird als z. B. in der C/C++-Welt.


DepravedGirl 
Beitragsersteller
 23.09.2015, 17:41

Vielen Dank für deine Antwort !

1

Du hast schon sehr gute Antworten von vielen fähigen Leuten erhalten, und ich habe ehrlich gesagt alles nur kurz überflogen, aber ich möchte noch auf ein paar Punkte hinweisen, die mir spontan in den Sinn gekommen sind (kann sein, dass davon schon etwas erwähnt wurde ... wie gesagt, habe mir nicht den ganzen Thread durchgelesen):

a) Treiber: Aufgrund der Hardwarenähe sind die Sprachen, die in Maschinencode für eine real existierende CPU übersetzt werden, natürlich sehr gut für die Treiber-Programmierung geeignet, was bei IL-Code für VM Sprachen nicht der Fall ist.

b) Der Garbage Collector in Java funkt zu völlig undefinierten Zeiten dazwischen, was Echtzeitanwendungen unmöglich macht. Es gibt zwar die Möglichkeit, den GC auf einen anderen CPU-Kern auszulagern, aber das löst das Problem dann auch nur halb. Wenn man den GC komplett abschaltet, hat man ebenfalls mit anderen Problemen zu kämpfen. Es gibt / gab aber Mikroprozessoren, die mit Java programmiert werden. Die haben sich aber aus naheliegenden Gründen nicht durchsetzen können.

c) Ich habe mir mal für embedded Sachen eine eigenen C-Laufzeitbibliothek geschrieben und die auch auf verschiedene *ix-Plattformen portiert. Dabei lernt man sehr sehr viel über Betriebssysteme und den inneren Aufbau von X verschiedenen Teilen. Das ganze war - zumindest für mich - jetzt nicht sooo schwierig, aber ein JRE selbst zu programmieren, halte ich für eine wahre Leistung! (selbst, wenn die dann im Endeffekt nicht ansatzweise so effizient ist, wie die Sun/Oracle VM)

Außerdem gefällt mir der Punkt Inline-Assembler bei Low-Level Sprachen wie C/C++/Pascal usw. sehr gut. Wenn man sich Mühe bei der Steuerung des Compilers und des Linkers gibt, dann kann man damit recht umfangreiche Progrämmchen in wenigen KB unterbringen, die bei "normaler" Programmierung in C++ oder Java gern einige hundert KB belegen. Als Spielerei und aus Lernzwecken ist es wirklich sehr interessant, sich mit solchen Fummeleien zu beschäftigen. :)

PS: Java hat, wie jede (!) andere Programmiersprache auch, Vor- und Nachteile. Man muss einfach nur wissen, wann man unter welchen Umständen bei welchen Anforderungen welche Sprache am besten einsetzen sollte.

Von daher kannst du etwaiges Gebashe der Sprache X - was man oft in Foren, Kommentaren oder Blogs findet - eigentlich immer unter Ulk verbuchen! Aber nur solange es sich bei X nicht um PHP handelt. ;)

Im Ernst: Viele Sprachen haben wirklich krasse Nachteile, aber es gibt trotzdem Umgebungen, in denen sie einfach die beste Wahl darstellen. Und Java zähle ich eigentlich nicht zu den Sprachen mit den krassesten Nachteilen, d. h. solange man auf den richtigen Einsatzzweck achtet. :)


DepravedGirl 
Beitragsersteller
 23.09.2015, 03:02

Recht herzlichen Dank für deine ausführliche Antwort !

2
TeeTier  23.09.2015, 05:06
@DepravedGirl

Ich empfinde es als sehr sehr vorbildlich, dass du dich (auch in deinen anderen Fragen) bei den Antwortenden jedes mal persönlich bedankst! Du hast offensichtlich eine gute Erziehung genossen. :)

3

Es gibt ja viele Programme, zum Beispiel Computerspiele, die nicht in Java programmiert sind, dafür muss es einen Grund geben, welche Nachteile hat Java ?

Sehr viele Spiele-Konzepte entstammen Zeiten, in denen es Java noch gar nicht gab. Wenn Programmierteams ein gutes Konzept in C oder C++ entwickelt haben, kommt eher die Frage auf, wie man neue Versionen und Abwandlungen schaffen und verkaufen kann. Ob man dann unbedingt eine andere Programmiersprache verwendet? Zudem eine, die vergleichsweise langsam ist?

Andererseits: Ist Minecraft etwa ein schlechtes Spiel?

Java wurde als Programmiersprache mit anderen Zielen entworfen:

  • Plattformunabhängigkeit – Mit einer Laufzeitumgebung, die wie ein Interpreter erst einen Bytecode übersetzen muß, hatte man in den ersten Jahren gravierende Probleme, sodass zunächst ausschließlich „Progrämmchen“ programmiert wurden. Allerdings ist auch Java in Punkto Geschwindigkeit inzwischen deutlich besser geworden. Dafür laufen beinahe alle Programme auf jedem System!
  • Internetunterstützung – dafür die inzwischen veraltenden Applets!
  • Sicherheit!! – Beispielsweise wurden die aus C bekannten Pointer so gut versteckt, dass Pointerfehler nicht zum Programmabsturz führen! Eine extrem strenge Typprüfung schaltet eine weitere Fehlerquelle aus. Gegen „Logikfehler“ ist leider kein Kraut gewachsen!
  • Modernität – Java verwendet bis auf wenige Ausnahmen alle Konzepte moderner objekt-orientierter Sprachen. Es unterstützt Entwurfsmuster, MVC … Vor allem werden komplette GUI-Bibliotheken mitgeliefert. Da sind die Standard-Libraries von C und C++ wohl nur ein Einstieg …

Vielleicht sollte man nicht immer in den Kathegorien Schwarz/Weiss oder Vorteil/Nachteil denken. Es sind die Möglichkeiten, die das Leben erst lebenswert machen. Nur weil „Deutsch“ bei uns die Muttersprache ist, heißt das nicht, dass fremde „Muttersprachen“ schlechter sind. Sie sind eben nur anders! Und genau das gilt auch für Programmiersprachen – sie sind nur unterschiedlich!


Speiko42  23.09.2015, 11:45

Ich würde Java ja eher mit C# vergleichen als mit C++ ... C++ ist um einiges Älter als Java und gilt als Vorgänger. 

0
wolfgang1956  23.09.2015, 17:01
@Speiko42

Ich würde Java ja eher mit C# vergleichen als mit C++ ... C++ ist um einiges Älter als Java und gilt als Vorgänger.

Das ist ja ganz nett, aber nicht gefragt. Und wenn man in der Wikipedia die Einleitungen liest, so ist schon klar, das C# das Rad nicht neu erfindet, aber wieder andere Zielsetzungen hat als Java.

Vergleichen kann man keine Programmiersprachen, da sie wie oben erwähnt immer wieder anders sind. Oder würdest du die deutsche Sprache mit der italienischen Sprache „vergleichen“? Man lernt als Italiener das Italienische als Muttersprache und wir Deutschen müssen eben Italienisch lernen, wenn wir uns mit ItalienerInnen unterhalten wollen. Oder die ItalienerInnen müssen entsprechend Deutsch lernen …

1
DepravedGirl 
Beitragsersteller
 23.09.2015, 11:46

Recht herzlichen Dank für deine Antwort !

1

Wegen der Tatsache, dass Java-Bytecode von einer VM interpretiert wird, hat man (ohne das JNI) keinen Zugriff auf native Funktionen und Ressourcen.
Das häufig vorkommende Argument, dass Java langsam sei, ist nicht ganz richtig. Java ist in Sachen Geschwindigkeit recht optimiert. Letztenendes kommt es auf den Code an.


PerfectMuffin  22.09.2015, 20:14

Auf Codechef wurden schon echte C++-Profis von Java geschlagen.

1
DepravedGirl 
Beitragsersteller
 23.09.2015, 03:06

Vielen Dank für deine Antwort !

1