+ fehlende Operator-Überladung (wobei das wieder ein zweischneidiges Schwert ist, auch wenn mehr dafür spricht als bei der Mehrfachvererbung)
+ keine const-Methoden
+ teilweise umständliche Konvertierung zwischen intrinsischen Datentypen
+ umständliche Enums
+ teilweise inkonsistente Interface-Vorgaben (bspw. machen Objekte gerne mal Probleme in Containern, aber der Zwang, Methoden wie equals() zu überschreiben, um das Problem zu lösen, besteht nicht, sodass man es als Anfänger auch gerne mal vergisst und sich wundert, warum die Liste nicht richtig funktioniert)
+ kein RAII, weshalb der angebliche Vorteil, sich nicht mit dem Freigeben von Speicher etc. beschäftigen zu müssen, nichtig ist (in C++ kann man es wiederum mit standardkonformen Programmieren tatsächlich realisieren)
+ eben gerade die fehlende Kontrolle über den Speicher und das Fehlen einer manuellen Möglichkeit, Speicher freizugeben (delete), sodass man auf die Dienste des (miserablen) GCs angewiesen ist (auch in dem Punkt hat C# Java überholt)
+ Sicherheitslücken in der JVM (auch da hat C# nen Pluspunkt)
+ der quasi aufgezwungene K&R-Style
Würde Java nicht aufs Übelste gehyped und auf alle möglichen Plattformen portiert werden, wäre es lange nicht so verbreitet. Und von JSP, JSF und dem anderen Web-Scheiß der als "Alternative" zu PHP und ner vernünftigen Template-Engine geboten wird, will ich gar nicht erst anfangen..
Aber nun gut, das soll nun nicht zum Java-Bashing-Thread werden.
btw. wie kommst du darauf, dass Java keinen Standard hat? Oder wie genau meintest du das?