Java - Eine Einführung

Transcription

Java - Eine Einführung
Java - Eine Einführung
Ole Schulz-Trieglaff
20. März 2004
2
Kapitel 1
Erster Tag
1.1
Einleitung
Java wurde Anfang der 90er Jahre von der kalifornischen Firma SUN Microsystems entwickelt. SUN wollte damals ein System entwickeln mit dem sich die
unterschiedlichsten technischen Geräte ansteuern lassen. Alle bisherigen Programmiersprachen waren zu unflexibel, d.h. es hätte einen sehr großen Aufwand
erfordert, ein Programm, dass z.B. für einen PC entwickelt worden war, an einen
Toaster anzupassen. (Der Fachbegriff dafür ist portieren)
Java wurde im Rahmen dieses Projektes mit dem Ziel entwickelt möglichst einfach, zuverlässig und portabel zu sein. Das Projekt selbst war nicht besonders
erfolgreich, nur Java blieb übrig und wurde weiter entwickelt.
Eine kleine Anekdote: Java hieß ursprünglich Oak (engl. für Eiche), wie die
Bäume, die vor dem Büro eines der Chef-Entwickler von Java, James Gosling,
stehen. Es stellte sich jedoch heraus, das es bereits eine Programmiersprache
mit diesem Namen gab. Um juristische Schwierigkeiten zu vermeiden, wurde
schnell nach einem neuen Namen gesucht. Eine der Kaffesorten des Ladens, in
denen das Team seinen Kaffee kaufte, hieß Java...
Jetzt schnell noch ein Überblick über die wichtigsten Merkmale von Java:
• Java ist objektorientiert. Das ist so ziemlich die wichtigste Eigenschaft.
Sie sagt im Wesentlichen aus, dass man in Java versucht, Teile eines Programms in sog. Objekte oder Klassen zu strukturieren. Was dies genau
heisst, werden wir erst morgen sehen.
• Java unterstützt das Internet. Java ist auf Netzwerkanwendungen optimiert d.h. alle Programme, die Daten in Netzwerken übertragen müssen,
lassen sich mit Java sehr leicht realisieren.
• Java ist fexibel und robust. Wie oben schon erwähnt lassen sich in
Java geschriebene Programme ohne große Mühe an verschiede Rechner
anpassen. Außerdem wurde bei der Entwicklung großer Wert auf Datensicherheit gelegt. Alle Java Programme laufen in einer Art Schutzkäfig
(engl. Sandbox), der sie vor anderen Programmen abschirmt. Dadurch
wird verhindert, dass ein Java-Programm Schaden verursachen kann.
• Java verfügt über viele Standardfunktionen Auch ein gutes Argument für Java: für viele häufig auftretenden Probleme besitzt Java schon
3
4
KAPITEL 1. ERSTER TAG
vorgefertigte Lösungen, die kostenlos (wie auch die Programmiersprache
selbst) mitgeliefert werden.
Noch eine kleine Anmerkung: Die erste Version von Java wurde 1995 veröffentlicht und hatte die Versionsnummer 1.0. Ab der Version 1.2 spricht man kurioserweise vom Java 2 SDK ( = Software Development Kit). Die neuste Version
heisst allerdings wieder Java 1.5....
1.2
Jetzt geht es los
Wir wollen uns jetzt ein Java-Programm mal etas genauer anschauen. Grundsätzlich unterscheidet man (und frau auch) zwischen sog. Applets, die fest in Webseiten eingebaut sind und Java-Programmen, die sich auch alleine ausführen lassen.
/*
Hallo.java
Ein erstes Java-Programm
Ole Schulz-Trieglaff, März 2004
*/
// Hier geht es los
public class Hallo {
public static void main(String[] args) {
System.out.println("Hallo!");
System.out.println("Ich ein Java-Programm!");
}
}
Was bedeutet das alles ?
• Die ersten sieben Zeilen bilden Kommentare.
• public class Hallo {..}
Definiert alles, was zu (Haupt-)Klasse Hallo gehört. Die Inhalt der Klasse
wird von geschweiften Klammern umrahmt: { und }.
• public static void main(String[] args) {..}
Beim Ausführen der Klasse wird dieser Abschnitt zuerst ausgeführt. Alles
was zu diesem main-Abschnitt gehört, wird wieder von Klammern eingerahmt.
•
System.out.println("Hallo!");
Dieser Befehl gibt Hallo! auf dem Bildschirm aus. Alle Befehle müssen in
Java mit einem Semikolon abgeschlossen werden.
1.3. JAVA-APPLETS
1.2.1
5
Ausführen des Programms
Das Ganze läuft immer gleich:
1. Programm schreiben / abtippen mit Editor der Wahl und speichern. Der
Dateiname muss dabei dem Namen der Hauptklasse entsprechen. (Im Beispiel oben Hallo.java ).
2. Für den Computer übersetzen (kompilieren) mit: javac Hallo.java Dieser
Befehl erzeugt eine Datei Hallo.class, die Java-Bytecode enthält.
3. Ausgeführt wird dieser Bytecode dann mit dem Befehl java Hello.
1.3
Java-Applets
Der Vollständigkeit halber möchte ich hier nochmal kurz ein Java-Applet vorstellen. Applets sind kleine Programme, die in eine Internetseite eingebaut sind
und von einem Webbrowser (z.B. dem Internet Explorer) ausgeführt werden.
Ein kurzes Applet kann z.B. so aussehen:
import java.awt.*;
import java.applet.Applet;
public class FirstApplet extends Applet {
public void paint (Graphics g) {
g.drawString("Hallo! Ich bin ein Java-Applet.",50,50);
}
}
1.4
Variablen und Operatoren
Variablen sind Platzhalter oder Container. Sie speichern Werte, mit denen ein
Programm arbeiten soll. Um eine Variable verwenden zu können, muss man sie
zuerst deklarieren und sie dann initialisieren. Beispiel:
\\ Wir erstellen eine Variable vom Typ int mit Namen var
int var;
// Deklaration: Variable var hat Typ int
var = 99;
// Initialisierung: var hat jetzt den Wert 99
Deklaration und Initialisierung sind Anweisungen, deshalb werden sie auch
mit einem Semikolon beendet.
Java unterscheidt zwischen Groß- und Kleinschreibung. Deshalb sind var und
Var unterschiedliche Variablen. Es gibt ebenfalls strenge Regeln, welche Zeichen
Variablennamen (identifier) enthalten dürfen:
1. Die Zeichen des Alphabets (java letter), also a-z and A-Z
2. Der Unterstrich
3. Die Ziffern von 0-9
6
KAPITEL 1. ERSTER TAG
4. Ein identifier muss mit einem java letter oder $ beginnen.
Es gilt die Konvention, dass eine Variable immer mit einem kleinen Buchstaben
beginnen muss. Falls der Name aus mehreren Teilen besteht, wird jeder außer
dem ersten Teil mit einem Großbuchstaben begonnen, z.B. : hoeheDerBox
1.4.1
Datentypen
Man unterscheidet in Java (und in den meisten anderen Programmiersprachen
auch) zwischen:
• primitiven Datentypen. Sie sind nicht weiter unterteilbar.
• und zusammengesetzten Datentypen. Sie bestehen aus mehren Teilwerten, die jeweils einzeln manipuliert werden können. Ein Beispiel dafür sind
Arrays, die Ähnlichkeit zu Listen in Haskell besitzen.
Hier eine Übersicht über die wichtigsten primitiven Datentypen:
Name
Grösse
Wertebereich
byte
8
-126 bis +128
short
16
-32768 bis 32767
int
32
−231 bis 231 − 1
long
64
−263 bis 263 − 1
float
32
−3.4 × 1038 bis +3.4 × 1038
double
64
−1.797 × 10308 bis +1.797 × 10308
boolean
1
true oder false
char
16
Druckbare Zeichen: ‘a‘ bis ‘Z‘ auch Steuerzeichen
Der wichtigste zusammengesetzte Datentyp ist String. Er sieht in Java genauso aus wie in Haskell. Er besteht aus einem oder mehreren Zeichen, eingefasst
von doppelten Anführungsstrichen, wie z.B. “Java ist toll !! “. Man kann zwei
Strings aneinanderhängen (konkatenieren) mit dem + Operator (Nicht ++ wie
bei Haskell !!):
string str = "Java" + " ist " + "toll!";
int i = 5;
System.out.println("i hat den Wert: " + i);
1.4.2
Operatoren und Berechnungen
Java kennt folgende Operatoren:
arithmetische Operatoren:
• binäre: +, −, ∗, / und % (Modulooperation, Rest bei Division)
int x = 3 / 2;
float z = 3.0 / 2;
// ergibt 1
// ergibt 1.5
1.4. VARIABLEN UND OPERATOREN
7
• und unäre: ++ und −−. Beide gibt es in einer Präfix- und Postfix-Version.
Sie können nur auf Variablen angewendet werden.
int i = 5;
int k = i++;
int l = ++i;
// k = 5, i = 6
// l = 7, i = 7
Vergleichsoperatoren:
• == und ! = (ungleich) sind auf beliebige Typen anwendbar
• <, <=, >, >= für Zahlen und Buchstaben
Boolesche Operatoren: Auch Java kennt Lazy-Evaluation ! Es wird hier
aber Short-Circuit-Evaluation genannt.
• ! Nicht (not in Haskell)
• && Und, || Oder mit Short-Circuit-Evaluation
• & logisches und, | Oder, ∧ exklusives Oder (XOR)
Bitoperatoren Mit diesen Operatoren kann direkt auf die Binärdarstellung
von numerischen Datentypem zugegriffen werden.
• bitweises Komplement: ∼ inervertiert jedes einzelne Bit
• & bitweises Und, | bitweises Oder, ∧ bitweises XOR , << Linksshift, >>
arithmetischer Rechtsshift, >>> logischer Rechtsshift
// Mit dem Linksshift schnell potenzieren:
byte potenz = 2 << 2; // ergibt 2^3 = 8, denn 00000010 wird zu 00001000
Zuweisungsoperatoren Der Zuweisungsoperator ist in Java einfach das Gleichheitszeichen =. (Wer hätte das gedacht!) Es gibt aber zusätzlich noch die Möglichkeit, Operationen mit dem Gleichheitszeichen zu kombinieren. Ein Beispiel:
Wenn wir den Wert einer Variablen x um 5 erhöhen wollen, dann könnten wir
schreiben:
x = x + 5;
// x hat jetzt den Wert 5
Viel kürzer ist jedoch:
x += 5;
// x hat jetzt auch den Wert 5
Das Gleiche geht auch mit:
+ =, − =, ∗ =, / =, % =, & =, | =, ∧ =, <<=, >>=, >>>=
Was man auch noch wissen sollte: der Zuweisungsoperator liefiert das Ergebnis
zurück. Es sind also auch Verkettungen möglich wie:
float i,j,k;
i = j = 7;
k = 5 + 6*(i += j/2);
Zum Schluss gibt es noch einen Operator, von dem man etwas gehört haben
sollte, und zwar ?. Er wird auch als ternärer Auswahloperator bezeichnet:
max = (i>j) ? i : j;
8
1.5
KAPITEL 1. ERSTER TAG
Typecasts
Oft gerät man in Situationen, in denen man verschiedene Datentypen ineinander umwandeln will oder muss. So einen Vorgang nennt man Typecast. Man
unterscheidet zwischen expliziten und impliziten Typecasts:
expliziter Typecast:
float f = 2.5f;
int i = (int) f; // Float wird zu Int, i hat den Wert 2
impliziter Typecast:
5/2.0
// double 2.5
int i = 5;
System.out.println("i hat den Wert: " + i); // Typecast von int nach String
Allgemein gilt, dass erweiternde Typecasts, bei denen keine Genauigkeit verloren
geht, vom Compiler automatisch (implizit) durchgeführt werden. Also z.b. von
short nach float o. ä. In die umgekehrte Richtung ist eine explizite Anweisung
des Programmiers erforderlich.