Erfahren Sie mehr über Java, was es ist und warum es so beliebt ist

Inside Java bietet einen Blick hinter die Java-Plattform und verwandte Technologien. In der Spalte dieses Monats zeige ich Ihnen einen Überblick über die Programmiersprache Java.

Java - eine Insel von Indonesien, eine Art von Kaffee und eine Programmiersprache. Drei sehr unterschiedliche Bedeutungen, jede in unterschiedlicher Wichtigkeit. Die meisten Programmierer sind jedoch an der Programmiersprache Java interessiert. In nur wenigen Jahren (seit Ende 1995) hat Java die Software-Community im Sturm erobert. Sein phänomenaler Erfolg hat Java zur am schnellsten wachsenden Programmiersprache aller Zeiten gemacht. Es gibt viel Hype über Java und was es tun kann. Viele Programmierer und Endbenutzer sind verwirrt darüber, was genau es ist und was Java bietet.

Java ist eine revolutionäre Sprache

Die Eigenschaften, die Java so attraktiv machen, sind in anderen Programmiersprachen vorhanden. Viele Sprachen sind für bestimmte Arten von Anwendungen ideal geeignet, sogar mehr als Java. Aber Java bringt all diese Eigenschaften in einer Sprache zusammen. Dies ist ein revolutionärer Sprung für die Softwarebranche.

Sehen wir uns einige Eigenschaften genauer an: -

Objektorientierte

Viele ältere Sprachen, wie C und Pascal, waren prozedurale Sprachen. Prozeduren (auch als Funktionen bezeichnet) waren Code-Blöcke, die Teil eines Moduls oder einer Anwendung waren. Prozeduren übergeben Parameter (primitive Datentypen wie Ganzzahlen, Zeichen, Zeichenfolgen und Gleitkommazahlen). Der Code wurde getrennt von Daten behandelt. Sie mussten Datenstrukturen weitergeben, und Prozeduren konnten ihre Inhalte leicht ändern.

Java ist eine objektorientierte Sprache. Eine objektorientierte Sprache beschäftigt sich mit Objekten. Objekte enthalten sowohl Daten (Member-Variablen) als auch Code (Methoden). Jedes Objekt gehört zu einer bestimmten Klasse, bei der es sich um einen Entwurf handelt, der die Elementvariablen und Methoden eines Objekts beschreibt. In Java ist fast jede Variable ein Objekt des einen oder anderen Typs - sogar Strings. Objektorientierte Programmierung erfordert eine andere Denkweise, ist aber ein

tragbar

Die meisten Programmiersprachen sind für eine bestimmte Betriebssystem- und Prozessorarchitektur ausgelegt. Wenn der Quellcode (die Anweisungen, aus denen ein Programm besteht) kompiliert wird, wird er in Maschinencode umgewandelt, der nur auf einem Maschinentyp ausgeführt werden kann. Dieser Prozess erzeugt nativen Code, der extrem schnell ist.

Eine andere Art von Sprache ist eine, die interpretiert wird. Interpretierter Code wird von einer Softwareanwendung (dem Interpreter) gelesen, die die angegebenen Aktionen ausführt. Interpretierter Code muss oft nicht kompiliert werden - er wird so übersetzt, wie er ausgeführt wird. Aus diesem Grund ist der interpretierte Code ziemlich langsam, aber oft über verschiedene Betriebssysteme und Prozessorarchitekturen hinweg portierbar.

Java nutzt das Beste aus beiden Techniken. Java-Code wird in einen plattformneutralen Maschinencode kompiliert, der als Java-Bytecode bezeichnet wird. Ein spezieller Typ von Interpreter, der als Java Virtual Machine (JVM) bezeichnet wird, liest den Bytecode und verarbeitet ihn. Abbildung 1 zeigt eine Disassemblierung einer kleinen Java-Anwendung. Der Bytecode, der durch den Pfeil angezeigt wird, ist hier in Textform dargestellt, aber wenn er kompiliert wird, wird er als Byte dargestellt, um Speicherplatz zu sparen.

Multi-Thread

Wenn Sie jemals komplexe Anwendungen in C oder PERL geschrieben haben, werden Sie wahrscheinlich schon früher auf das Konzept mehrerer Prozesse gestoßen sein. Eine Anwendung kann sich in separate Kopien aufteilen, die gleichzeitig ausgeführt werden. Jede Kopie repliziert Code und Daten, was zu einem erhöhten Speicherverbrauch führt. Die Kopien zu erhalten, um miteinander zu reden, kann komplex und frustrierend sein. Die Erstellung jedes Prozesses beinhaltet einen Aufruf an das Betriebssystem, was ebenfalls zusätzliche CPU-Zeit beansprucht.

Ein besseres Modell besteht darin, mehrere Ausführungsthreads zu verwenden, die kurz als Threads bezeichnet werden. Threads können Daten und Code gemeinsam nutzen, wodurch die gemeinsame Nutzung von Daten zwischen Thread-Instanzen erleichtert wird. Sie benötigen auch weniger Speicher und CPU-Overhead. Einige Sprachen, wie C ++, unterstützen Threads, sind jedoch komplex zu verwenden. Java unterstützt mehrere Ausführungsthreads, die direkt in die Sprache integriert sind. Threads erfordern eine andere Denkweise, können aber sehr schnell verstanden werden. Thread-Unterstützung in Java ist sehr einfach zu verwenden, und die Verwendung von Threads in Anwendungen und Applets ist ziemlich üblich.

Automatische Speicherbereinigung

Nein, wir reden nicht davon, den Müll rauszubringen (obwohl ein Computer, der das buchstäblich könnte, ziemlich sauber wäre). Der Begriff Speicherbereinigung bezieht sich auf die Wiederherstellung ungenutzten Speicherplatzes. Wenn Anwendungen Objekte erstellen, ordnet die JVM Speicherplatz für ihren Speicher zu. Wenn das Objekt nicht mehr benötigt wird (kein Verweis auf das Objekt existiert), kann der Speicherplatz für die spätere Verwendung wiederhergestellt werden.

Sichern

Sicherheit ist ein großes Problem mit Java. Da Java-Applets aus der Ferne heruntergeladen und in einem Browser ausgeführt werden, ist die Sicherheit von großer Bedeutung. Wir möchten nicht, dass Applets unsere persönlichen Dokumente lesen, Dateien löschen oder Unfug verursachen. Auf der API-Ebene gibt es starke Sicherheitseinschränkungen für den Datei- und Netzwerkzugriff für Applets sowie Unterstützung für digitale Signaturen zur Überprüfung der Integrität von heruntergeladenem Code. Auf Bytecode-Ebene werden Prüfungen auf offensichtliche Hacks überprüft,

Netzwerk und "Internet" bewusst

Java wurde entwickelt, um "Internet" zu erkennen und um die Netzwerkprogrammierung zu unterstützen. Die Java-API bietet umfangreiche Netzwerkunterstützung von Sockets und IP-Adressen über URLs und HTTP. Es ist extrem einfach, Netzwerkanwendungen in Java zu schreiben, und der Code ist zwischen Plattformen vollständig portabel. Java bietet auch Unterstützung für exotischere Netzwerkprogrammierung, wie RMI (Remote-Method Invocation), CORBA und Jini. Diese verteilten Systemtechnologien machen Java zu einer attraktiven Wahl für große verteilte Systeme.