1.3 Java im Vergleich zu anderen Sprachen *
Beschäftigen sich Entwickler mit dem Design neuer Programmiersprachen – oder Spracherweiterungen –, werden häufig andere Programmiersprachenkonstrukte auf ihre Tauglichkeit hin überprüft und dann bei Erfolg in das Konzept aufgenommen. Auch Java ist eine sich entwickelnde Sprache, die Merkmale anderer Sprachen aufweist.
1.3.1 Java und C(++)
Java basiert syntaktisch stark auf C(++), etwa bei den Datentypen, Operatoren oder Klammern, hat aber nicht alle Eigenschaften übernommen. In der geschichtlichen Kette wird Java gern als Nachfolger von C++ (und als Vorgänger von C#) angesehen, doch die Programmiersprache Java verzichtet bewusst auf problematische Konstrukte wie Zeiger.
Das Klassenkonzept – und damit der objektorientierte Ansatz – wurde nicht unwesentlich durch SIMULA und Smalltalk inspiriert. Die Schnittstellen (engl. interfaces), die eine elegante Möglichkeit der Klassenorganisation bieten, sind an Objective-C angelehnt – dort heißen sie Protocols. Während Smalltalk alle Objekte dynamisch verwaltet und in C++ der Compiler alles zu einem großen Binärklumpen verbindet, ist in Java jeder Typ eine eigene Klassendatei. Alle Klassen – optional auch von einem anderen Rechner über das Netzwerk – lädt die JVM zur Laufzeit. Selbst Methodenaufrufe sind über das Netz möglich.[ 25 ](Diese Möglichkeit ist unter dem Namen RMI (Remote Method Invocation) bekannt. Bestimmte Objekte können über das Netz miteinander kommunizieren. ) In der Summe lässt sich sagen, dass Java bekannte und bewährte Konzepte übernimmt und die Sprache sicherlich keine Revolution darstellt; moderne Skriptsprachen sind da weiter und übernehmen auch Konzepte aus funktionalen Programmiersprachen.
1.3.2 Java und JavaScript
Obacht ist beim Gebrauch des Namens »Java« geboten. Nicht alles, was Java im Wortstamm hat, hat tatsächlich mit Java zu tun: JavaScript hat keinen großen Bezug zu Java – bis auf Ähnlichkeiten bei den imperativen Konzepten. Die Programmiersprache JavaScript wurde 1995 vom Netscape-Entwickler Brendan Eich entwickelt. 1997 hat die European Computer Manufacturers Association Teile von JavaScript im Standard ECMA-262 festgeschrieben und die Programmiersprache ECMAScript genannt. Die aktuelle Version ist ECMAScript 2019. Die bekannten Browserhersteller Google (Chrome), Microsoft (Edge) und Mozilla Foundation (Firefox) implementieren ECMAScript, fügen aber in der Regel Erweiterungen hinzu.[ 26 ](https://developer.mozilla.org/en-US/docs/Web/JavaScript/New_in_JavaScript/ECMAScript_Next_support_in_Mozilla)
Java und ECMAScript/JavaScript unterscheiden sich in vielen Punkten, genauso wie Schlüssel und Schüsselbein wenig miteinander zu tun haben. Die Klassennutzung ist mit einem Prototyp-Ansatz in JavaScript völlig anders als in Java, und JavaScript lässt sich ebenso zu den funktionalen Programmiersprachen zählen, was Java nun wahrlich nicht ist.
1.3.3 Ein Wort zu Microsoft, Java und zu J++
In der Anfangszeit verursachte Microsoft einigen Wirbel um Java. Mit Visual J++ (gesprochen »Jay Plus Plus«) bot Microsoft schon früh einen eigenen Java-Compiler an (als Teil des Microsoft Development Kits) und mit der Microsoft Java Virtual Machine (MSJVM) eine eigene schnelle Laufzeitumgebung. Das Problem war nur, dass Dinge wie RMI und JNI absichtlich fehlten – JNI wurde 1998 nachgereicht. Entgegen allen Standards führte der J++-Compiler neue Schlüsselwörter wie multicast und delegate ein. Außerdem fügte Microsoft einige neue Methoden und Eigenschaften hinzu, zum Beispiel J/Direct, um der plattformunabhängigen Programmiersprache den Windows-Stempel zu verpassen. Mit J/Direct konnten Programmierer aus Java heraus direkt auf Funktionen der Win32-API zugreifen und damit reine Windows-Programme in Java programmieren. Durch Integration von DirectX sollte die Internet-Programmiersprache Java multimediafähig gemacht werden. Das führte natürlich zu dem Problem, dass Applikationen, die mit J++ erstellt wurden, nicht zwangsläufig auf anderen Plattformen liefen. Sun klagte gegen Microsoft.
Da es Sun in der Vergangenheit finanziell nicht besonders gut ging, pumpte Microsoft im April 2004 satte 1,6 Milliarden US-Dollar in die Firma. Microsoft erkaufte sich damit das Ende der Kartellprobleme und Patentstreitigkeiten. Dass es bis zu dieser Einigung nicht einfach gewesen war, zeigen Aussagen von Microsoft-Projektleiter Ben Slivka über das JDK bzw. die Java Foundation Classes, man müsse sie »bei jeder sich bietenden Gelegenheit anpissen« (»pissing on at every opportunity«).[ 27 ](Würden wir nicht gerade im westlichen Kulturkreis leben, wäre diese Geste auch nicht zwangsläufig unappetitlich. Im alten Mesopotamien steht »pissing on« für »anbeten«. Da jedoch die E-Mail nicht aus dem Zweistromland kam, bleibt die wahre Bedeutung wohl unserer Fantasie überlassen. )
Im Januar 2004 beendete Microsoft die Arbeit an J++, denn die Energie floss in das .NET-Framework und die .NET-Sprachen. Am Anfang gab es mit J# eine Java-Version, die Java-Programme auf der Microsoft .NET-Laufzeitumgebung CLR ausführte, doch Anfang 2007 wurde auch J# eingestellt. Das freie IKVM.NET (http://www.ikvm.net) ist eine JVM für .NET und verfügt über einen Übersetzer von Java-Bytecode nach .NET-Bytecode, was es möglich macht, Java-Programme unter .NET zu nutzen. Das ist praktisch, denn für Java gibt es eine riesige Anzahl von Programmen, die somit auch für .NET-Entwickler zugänglich sind. Bedauerlicherweise wird das Projekt nicht weiterentwickelt.
Microsoft hat sich lange Zeit aus der Java-Entwicklung nahezu vollständig zurückgezogen. Es gab nur eher überschaubare Projekte wie den Microsoft JDBC Driver for SQL Server. Das Verhältnis ist heute auch deutlich entspannter, und Microsoft geht wieder einen Schritt auf Java zu. Zu erkennen ist das am Beitritt zur Jakarta EE Working Group und an der Unterstützung von Java-Applikationen in der Windows-Cloud Azure.[ 28 ](https://azure.microsoft.com/de-de/develop/java/) Vielleicht gratuliert Microsoft irgendwann einmal Oracle, wie es auch Linux zum 20. Geburtstag gratuliert hat.[ 29 ](http://www.youtube.com/watch?v=ZA2kqAIOoZM)
1.3.4 Java und C#/.NET
Da C# kurz nach Java und nach einem Streit zwischen Microsoft und Sun erschien und die Sprachen zu Beginn syntaktisch sehr ähnlich waren, könnte leicht angenommen werden, dass Java Pate für die Programmiersprache C# stand.[ 30 ](In Microsoft-Dokumenten findet sich über Java kein Wort. Dort wird immer nur davon gesprochen, dass C# andere Sprachen, wie etwa C++, VB und Delphi, als Vorbilder hatte. ) Doch das ist lange her. Mittlerweile hat C# eine so starke Eigendynamik entwickelt, dass Microsofts Programmiersprache viel innovativer ist als Java. C# ist im Laufe der Jahre komplex geworden, und Microsoft integriert ohne großen Abstimmungsprozess Elemente in die Programmiersprache, wo in der Java-Welt erst eine Unmenge von Personen diskutieren und abstimmen. Zeitweilig macht es den Eindruck, als könne Java nun auch endlich das, was C# bietet. So gesehen, profitiert Java heute von den Erfahrungen aus der C#-Welt. Bei den Lambda-Ergänzungen von Java 8 wurde auch ausdrücklich die Übernahme der C#-Syntax hervorgehoben,[ 31 ](http://mail.openjdk.java.net/pipermail/lambda-dev/2011-September/003936.html) anders als bei der Microsoft-Dokumentation, die jegliche Ähnlichkeit zwischen C# und Java leugnet.
Während Oracle für Java eine Aufteilung in das Java SE für die »allgemeinen« Programme und das Jakarta EE (ehemals Java EE) als Erweiterung für die »großen« Enterprise-Systeme vornimmt, fließt bei Microsoft alles in ein Framework, genannt .NET. Das ist natürlich größer als das Java-Framework, da sich mit .NET alles programmieren lässt, was Windows hergibt. Diese Eigenschaft fällt im Bereich GUI besonders auf, und das plattformunabhängige Java gibt dort weniger her.
Eine neue Richtung entsteht durch .NET Core, eine quelloffene, an das »große« .NET-Framework angelehnte Alternative, die für Windows, macOS und Linux x64 bereitsteht. Alle Änderungen an der Codebasis sind unter https://github.com/dotnet/core sichtbar. Da sich bestehende .NET-Anwendungen nicht ohne Anpassungen migrieren lassen, hat .NET Core noch nicht so richtig an Fahrt aufgenommen.
Etwas zynisch lässt sich bemerken, dass Java vielleicht nur deshalb noch lebt, weil Microsoft mit .NET ausschließlich auf Windows gesetzt hat, die Welt aber etwas anderes wollte. Mit .NET Core hat Microsoft zu lange gewartet, weil es nicht andere Plattformen stärken wollte.