Warum ist Java so beliebt?

7 Antworten

Ich denke deine eigentliche Frage wurde von Androhecker eigentlich ganz gut beantwortet, allerdings würde ich an der stelle gern hier drauf eingehen:

Naja ich find Java schon teilweise nervig. z.B. Das wenn man Objekte an Funktionen übergibt immer die Referenzen übergeben werden.

Diese Tatsache kann man natürlich aber auch zu seinem Vorteil nutzen. Oder auf diese Tatsache reagieren.

Wenn du auf dem Gebiet Schwierigkeiten hast, kannst du auch dafür gerne eine extra Frage mit einem Beispiel stellen.

Wenn man Pointer nutzen kann, ist das zwar eine feine Sache, aber das Ziel kann man auch ohne erreichen. In einigen Beispielen kann ein Pointer durchaus auch ein Nachteil sein, manchmal jedoch auch ein Vorteil. 

Die Community an Java-Entwicklern ist sehr groß und man kann damit mittlerweile sehr viele Themen-Felder abdecken, und das mit einer einzigen Sprache. 

Wenn du der Überzeugung bist, dass es mit Java umständlicher ist, gewissen Code umzusetzen, bestünde genauso die Möglichkeit, dass einfach nur ein Verständnis-Problem vorliegt, bei dem man dir ggf. helfen könnte.

okarin 
Fragesteller
 26.01.2017, 10:03

Ok ich versteh den Vorteil nicht wirklich. In C# kennzeichne ich eindeutig wann ich eine Referenz übergebe und wann nicht. In Java wird das erst im Code der funktion bestimmt ob ich das Objekt selber ändere oder nur eine Kopie erzeuge. D.h. ich muss für diese Information in den Source Code schauen. By the way wie übergibt man eigentlich refernzen auf Wertetypen in java falls man z.B. mehrere Wertetypen zurückbekommen will? Oder muss man dann immer diese wrapper Klassen benutzen?

0
KnusperPudding  26.01.2017, 12:12
@okarin

Betrachten wir mal deinen Aspekt genauer.

In C# hätten wir das:

// Aufruf der Methode mit Parameterübergabe (by value)
MeineMethode(meinParameter);

Sowie

// Aufruf der Methode mit Parameterübergabe (by reference)
MeineMethode(ref meineVariable);

Bei Java ist das etwas anders.

Sowohl bei Primitiven Datentypen als bei einer Wertzuweisung bei Parametern erfolgt immer call by value.

Bei der Verwendung von Objekt-Parametern hat man immer call by reference.

Und das ist das entscheidende: Du überlegst dir, bevor du deine Methode schreibst, was du damit bezwecken willst.

// By Value
int id = 12;
id = newID(id);


private static int newID(int oldID) {
   return oldID+1;
}
// ByReference
MyClass myClass = new MyClass();

incrementMyClassID(myClass);


private static void incrementMyClassID(MyClass myClass) {
   myClass.setID(myClass.getID()+1);
}

Vorteil: Wenn du weißt, wie Java Call by Referenz/Value handhabt, hat man eine Richtlinie, und daran kann man sich halten. Man kann seinen Code damit nicht durch ein Schlüsselwort wie "ref meineVariable" "versauen".

Nachteil: man muss seine Methoden entsprechend gestalten und man hat nicht die Flexibilität, die du vermisst. 

Der eine Nachteil ist der Vorteil des anderen und andersrum. Wenn man bescheid weiß, kann man damit entsprechend umgehen.

By the way wie übergibt man eigentlich refernzen auf Wertetypen in java falls man z.B. mehrere Wertetypen zurückbekommen will?

Mithilfe von Generics.

private static <T> T getItem(T val) {
    return val;
}

Verwendung wäre entsprechend:

MyClass myClass = new MyClass();
myClass = getItem(myClass);

Dabei wird T als "Object" betrachtet, auch wenn später dein Typ wieder raus kommt. Mithilfe von Extends kannst du das natürlich noch weiter einschränken und somit auch auf Methoden deines Objektes zugreifen:

private static <T extends MyClass> T getItem(T val) {
  val.getID();
  return val;
}
1

Java hat sich jahrelang bewährt.
Java macht es einem einfach schnell Ergebnisse zu erzielen.
Java hat eine schöne, gut lesbare Syntax.
Java ist schnell ... genug... ;)  ... der Unterschied ist für "normale" Programme zu vernachlässigen.
Java ist mächtig.
Java ist gut.

btw. ich mag sowohl C# als auch Java.

Doch. Als alter Linuxer (Windows war noch in den Kinderschuhen, als ich mir meinen ersten PC kaufte), muss ich sagen: Es liegt für mich alleine an der Plattformunabhängigkeit. C# hat viele Vorteile, vieles wurde verbessert, was Java definitiv falsch gemacht hatte. Aber die Philosophie, eine Sprache nachzuprogrammieren, die (um Programmierer an ein -- sorry nicht sehr stabiles -- OS zu binden) lediglich auf einer einzigen Plattform läuft, kann kein frei denkender Mensch unterstützen. Einzige Alternative zu Java sehe ich im Moment Python (wobei sowohl für sichere JSF-Webapplikationen, wie auch für die Smartphone-Entwicklung (Android) ist Python nicht zu gebrauchen).

C# ist sicher sehr gut als Sprache, die Philosophie des Herstellers jedoch äußerst verwerflich.

PS: Mit der "Power-Shell" ist M$Windows auf dem selben tragischen Kundenfang: Besser nachmachen, und Kunden binden.


Es liegt wirklich hauptsächlich an der Plattformunabhängigkeit und daran, dass es so weit verbreitet ist.

Finde C# auch besser, aber unter dem Strich wäre es mir Wurst, ob ich beruflich jetzt mit C# oder Java entwickeln muss, denn so gross unterscheiden die sich ja jetzt auch nicht. Beide Sprachen programmieren sich ähnlich bequem. Sind ja auch beide managed. Da ist C++ oder gar C schon sehr viel mühsamer.

okarin 
Fragesteller
 25.01.2017, 23:16

Naja ich find Java schon teilweise nervig. z.B. Das wenn man Objekte an Funktionen übergibt immer die Referenzen übergeben werden.

0