Java-Programmierung: Ein umfassender Leitfaden für Anfänger
Gesendet von Javi und eingeordnet in Informatik
Geschrieben am in
Deutsch mit einer Größe von 7,91 KB
Einführung in Java von Grund auf
Mit diesem Beginn einer Reihe von Notizen über Java richten wir uns vor allem an diejenigen, die die Sprache von Grund auf lernen und anwenden wollen. Diese Notizen entstanden aus dem Interesse einiger Teilnehmer einer Mailingliste für Webentwickler, stehen aber auch Webmastern zur Verfügung.
Viele von Ihnen werden bereits mehr über Java wissen als ich, daher schätze ich jede Art von Kommentaren oder Korrekturen. Die Idee ist es, Leitlinien für das ordnungsgemäße Studium dieser Sprache zu geben. Java ist sehr mächtig und konsequent, weist jedoch noch einige Einschränkungen auf, aus denen es sicher noch herauswachsen wird.
Was ist Java?
Java wurde ursprünglich von einer Gruppe von Sun-Ingenieuren entwickelt. Netscape nutzte es später als Grundlage für Javascript. Obwohl die Verwendung im Web oft hervorgehoben wird, dient Java zur Erstellung aller Arten von Anwendungen (lokal, Intranet oder Internet).
Java ist eine Sprache, die:
- Objektorientiert ist
- Plattformunabhängig ist
Einige bemerkenswerte Eigenschaften:
- Robustheit
- Automatische Speicherverwaltung
- Verhindert ungeeignete Programmiertechniken
- Multithreading-Unterstützung
- Client-Server-Fähigkeit
- Integrierte Sicherheitsmechanismen
- Integrierte Dokumentationswerkzeuge
Objektorientierte Sprache
Warum sprechen wir von Objekten? Im Gegensatz zu Sprachen wie C++ wurde Java nicht nachträglich geändert, um mit Objekten zu arbeiten, sondern ist eine Sprache, die von Grund auf für das Arbeiten mit Objekten konzipiert wurde. In der Tat ist in Java fast alles ein Objekt.
Was ist ein Objekt?
Man kann sagen, dass alles als Objekt betrachtet werden kann. Ein Objekt ist ein Stück Software, das bestimmte Merkmale erfüllt:
- Kapselung (Encapsulation): Das Objekt ist in sich abgeschlossen. Die Definition enthält sowohl die Daten (Attribute) als auch die Verfahren (Methoden), die auf sie wirken.
- Vererbung (Inheritance): Neue Klassen können von bestehenden Klassen erben, was die Programmierung vereinfacht, da Unterklassen automatisch die Methoden der Elternklassen übernehmen.
Bei der objektorientierten Programmierung werden Klassen definiert (die generische Objekte beschreiben). Objekte interagieren über Nachrichten miteinander. Durch die Erstellung eines Objekts einer Klasse entsteht eine Instanz. Zum Beispiel könnte eine Klasse "Autos" heißen und ein spezifisches Auto ist eine Instanz dieser Klasse.
Der Vorteil ist die Unabhängigkeit: Wenn ein Objekt geändert werden muss (z. B. für eine größere Kapazität), kann dies geschehen, ohne den Rest der Anwendung zu berühren. Das spart Zeit bei der Entwicklung und beim Debugging. In Java gibt es zudem keine globalen Variablen, was aus Sicht der Softwareentwicklung ein großer Vorteil ist.
Ein einfaches Code-Beispiel
Um eine Vorstellung zu bekommen, betrachten wir ein Beispiel für eine Java-Klasse:
public class Sample extends Frame {
// Klassenattribute
Button si;
Button no;
// Klassenmethoden
public Sample() {
Label comment = new Label("Drücken Sie eine Taste", Label.CENTER);
si = new Button("Ja");
no = new Button("Nein");
add("North", comment);
add("East", si);
add("West", no);
}
}Diese Klasse ist ein Erbe der Klasse Frame (eine Art Fenster). Sie enthält zwei Attribute vom Typ Button und eine Methode (den Konstruktor).
Plattformunabhängigkeit
Java ist nahezu vollständig plattformunabhängig. Um das volle Potenzial auszuschöpfen, wird ein Betriebssystem mit Multithreading-Unterstützung benötigt (wie Unix, Windows 95 oder OS/2). Java ist im Prinzip eine interpretierte Sprache. Beim Kompilieren wird ein von Sun definierter Bytecode für eine generische Maschine erzeugt. Die Java-Runtime-Software interpretiert diesen Code dann auf der Zielmaschine. Zur Effizienzsteigerung nutzen moderne Browser JIT-Compiler (Just-In-Time), die den Code beim ersten Ausführen speziell für den Host-Rechner kompilieren.
Das Java Development Kit (JDK)
Alles, was zur Entwicklung von Java-Anwendungen benötigt wird, finden Sie unter: http://java.sun.com/aboutJava/index.html. Besonders wichtig sind der Download des JDK und der API-Dokumentation. Das JDK besteht im Wesentlichen aus:
- javac: Der Java-Compiler
- java: Der Java-Interpreter
- appletviewer: Ein Viewer für Applets
- jdb: Der Java-Debugger
- javadoc: Der Dokumentationsgenerator
Wichtig für Windows-Nutzer: Diese Anwendungen müssen in einem DOS-Fenster ausgeführt werden. Java achtet strikt auf Groß- und Kleinschreibung und nutzt lange Dateinamen.
Die drei Arten von Java
- Javascript: Eine direkt interpretierte Version, die in HTML-Seiten eingebettet wird. Sie hat viele Einschränkungen (keine Klassen, keine Vererbung).
- Standalone Java: Eigenständige Programme, die direkt durch den Java-Interpreter ausgeführt werden.
- Applets: Java-Programme, die innerhalb eines Browsers laufen.
Struktur einer Klasse
Eine Klasse besteht aus Attributen (Variablen) und Methoden (Funktionen). Java bietet verschiedene Zugriffsebenen: public, private und protected. Zudem gibt es static (Klassenattribute/-methoden) und final (Konstanten oder nicht vererbbare Klassen).
Kontrollstrukturen in Java
Java nutzt ähnliche Strukturen wie C:
- if ... else: Bedingte Ausführung.
- switch ... case: Mehrfachverzweigung.
- while / do ... while: Schleifen mit Bedingungsprüfung.
- for: Zählschleifen.
Ein- und Ausgabe (I/O)
Klassen zum Lesen und Schreiben von Dateien befinden sich im Paket java.io. Java nutzt Streams (Datenströme). Ein wichtiges Konzept ist hierbei das Abfangen von Exceptions (Ausnahmen) mittels try-catch-Blöcken, um Programmabstürze bei Fehlern (z. B. Datei nicht gefunden) zu verhindern.
Grafische Oberflächen mit AWT
Die Abstract Window Toolkit (AWT) Bibliothek enthält Objekte für Fenster, Buttons, Listen und Menüs. Mit der Canvas-Klasse können freie Grafiken gezeichnet werden. Um Flackern bei Animationen zu vermeiden, wird oft Double-Buffering eingesetzt, bei dem Bilder erst in einem Puffer im Speicher vorbereitet und dann kopiert werden.
Multithreading und Synchronisation
Java erlaubt es, mehrere Threads (Ausführungsstränge) parallel laufen zu lassen. Wenn mehrere Threads auf dieselbe Variable zugreifen, muss der Zugriff mittels synchronized koordiniert werden, um Datenverlust zu vermeiden. Mit wait() und notify() können Threads aufeinander warten.
Netzwerkprogrammierung und Sockets
Java macht den Netzwerkzugriff einfach. Über die URL-Klasse können Ressourcen im Web geladen werden. Für eine tiefere Kommunikation nutzt man Sockets, die eine Client-Server-Verbindung über TCP/IP-Ports ermöglichen. Ein Server wartet mit ServerSocket.accept() auf eingehende Verbindungen eines Clients.
Dies war ein Überblick über die wichtigsten Aspekte von Java. Mit diesen Grundlagen und den bereitgestellten Beispielen können Sie beginnen, eigene plattformunabhängige Anwendungen zu entwickeln.