Java Kurs

Aus ProgrammingWiki
Archivierte Version vom 2008-10-07T18:25:06+00:00. Aktuelle Version

Java ist eine objektorientierte Programmiersprache. Selbst für einfachste Programme ist deshalb ein gewisses Grundgerüst in Form einer Klasse nötig. Um zunächst einfache Grundstrukturen von Java zu verstehen, wollen wir auf dieses Grundgerüst zunächst verzichten und nur einfache Java Methoden entwickeln.

Datentypen

Java unterscheidet zwischen primitiven Datentypen (einfachen) und Objekten. Wir wollen uns zunächst den einfachen Typen zuwenden. Dazu zählen die folgenden:

TypByteWertebereichStandardwert
Boolische Datentypen
boolean1true,falsefalse
Integer
byte1- 207 bis 207-10
short2- 215 bis 215-10
int4- 231 bis 231-10
long8- 263 bis 263-10
Fließkommazahlen
float4- 3.40282347 *1038 bis 3.40282347 *10380.0
double8- 1.79769313486231570 *10308 bis 1.79769313486231570 *103080.0
Zeichen
char2alle Unicode - Zeichen\n0000

Zu beachten ist, dass reelle Zahlen mit Punkt also 12.5 (nicht 12,5) notiert werden.


Um uns etwas mit dieser Schreibweise vertraut zu machen, wenden wir einfache Rechenoperatoren auf ganze und reelle Zahlen an. Gib in das obere Kästchen eine Gleichung ein. Anschließend kannst du mit Eval diese vom Java-Interpreter ausführen lassen. Im zweiten Kästchen erscheint das Berechnungsergebnis.

<eval rows="1">3*5-12.5 </eval>

Ein weiteren Datentyp ist String, welcher Zeichenketten repräsentiert. Eine Zeichenkette wird in " eingeschlossen. String ist kein primitivenr Typ. Wir wollen ihn dennoch schon jetzt verwenden ohne dessen genauen Definition zu kennen. Auch auf Zeichenketten kann der Operator "+" angewendet werden. Im Gegensatz zu arithmetischen Ausdrücken steht Plus hier für die Verkettung.

<eval rows="1">"Hallo" + " " + "Welt"</eval>

Zeichenketten können auch mit anderen Datentypen verkettet werden:

<eval rows="1">"Pi ist " + 3.14</eval>

Beachte, dass es sich bei 3.14 um eine Fließkommazahl handelt. Diese wird durch "+" automatisch in eine Zeichenkette "3.14" konvertiert und anschließend mit "Pi ist " verkettet. Was passiert wenn man etwa folgenden Ausdruck schreib: "2 mal Pi ist " + 3.14*2 ?

Methoden aufrufen und definieren

Um eine Methode aufzurufen verwenden wir den Methodennamen gefolgt von runden Klammern. Dies entspricht der Funktionsvorstellungen aus der Mathematik f(x). In diesem Fall ist x der Parameter zu dem uns die Funktion f einen Funktionswert berechnen soll.

Nehmen wir die Sinus Funktion sin(x). Wir wissen, dass für x eine Fließkommazahl angegeben wird (etwa Pi) und eine Fließkommazahl zurückgeliefert wird. Java bietet uns bereits eine fertige Methode sin(x) an, die wir verwenden können. Alle mathematischen Funktionen sind dabei in der Klasse Math definiert. Was genau eine Klasse ist, werden wir uns erst später genauer anschauen.

<eval rows="1">Math.sin(1)</eval>

Hier haben wir die Methode sin(x) der Klasse Math verwendet. Experimentiere mit mit weiteren Funktionen wie cos(x), tan(x) oder sqrt(x) (Quadratwurzel).

Wir wollen uns nun eine eigene Funktion für Pi definieren. Es handelt sich dabei um eine null-stellige Funktion gibPi(). Das ist auch klar, denn wir benötigen keinen Parameter gibPi(5) macht offensichtlich keinen Sinn. Es soll stets 3.14 als Funktionswert zurückgegeben werden.

Um eine Methode zu definieren müssen wir zunächst den Rückgabetyp festlegen. Für unsere Methode gibPi() wählen wir den primitiven Datentyp double aus. Es handelt sich dabei um eine reelle Zahl. Anschließend müssen wir den Namen unserer Methode angeben. Diesen können wir beliebig wählen, wir müssen nur einige Regeln beachten. Ein Name darf zum Beispiel nicht mit einer Zahl beginnen oder Sonderzeichen enthalten.

Schau dir den nachfolgen Quelltext genau an und versuche dessen Bedeutung zu erahnen:

Die geschweiften Klammern markieren den Begin und das Ende der Definition der Methode gibPi(). Der Befehl return ist dafür verantwortlich unseren Wert 3.14 als Rückgabewert der Methode gibPi() zu setzen. Unsere Methode können wir nun genau wie f(x) aufrufen. Nachfolgendes Beispiel zeigt einen solchen Aufruf:

<eval rows="1">"Pi ist: " + gibPi() + " der Sinus von Pi ist: " + Math.sin(gibPi())</eval>

Wie bei Math.sin(...) zu sehen, können wir auch den Rückgabewert unserer Methode wieder als Parameter einer anderen einsetzen.

Schlag im Internet den genauen Wert von Pi nach und ändere die Methode gibPi() so, dass etwa 8 Nachkommastellen ausgegeben werden - nicht nur 2. Der Sinus von Pi sollte ja bekanntlich 0 ergeben. Du wirst feststellen, dass wir zwar einen Wert sehr nah an 0 erhalten (beachte die Exponentialschreibweise wie E-9 am Ende der Zahl), jedoch auf Grund der Genauigkeit von double nur eine Näherung bekommen.

Methoden mit Parameter

Gehen wir nun einen Schritt weiter und definieren eine Methode mit Parameter. Betrachte zunächst die folgende Methode zur Kreisflächenberechnung und vergleiche sie mit unser null-stelligen gibPi() Methode.

<eval rows="1">"Die Fläche eines Kreises mit r=3cm beträgt: " + KreisA(3) + "cm²"</eval>

Die Methode KreisA besitzt genau einen Parameter radius. Dieser kann innerhalb der Methode (innerhalb der geschweiften Klammern) als eine Art Platzhalter verwendet werden. Ein Aufruf KreisA(5) berechnet demnach return 5*gibPi().

radius ist vom Datentyp double. Damit erklären wir Java, dass wir als Parameter genau eine Fließkommazahl erwarten. Ein Aufruf wie KreisA("Hallo") würde also zu einem Fehler führen (versuch es einfach mal).

Wenn wir mehr als einen Parameter benötigen, können wir diese durch Kommas getrennt hintereinander angeben. Wir definieren eine Methode zur Berechnung des Flächeninhalts eines Rechtecks:

Als Parameter haben wir a und b definiert, denn bekanntlich benötigen wir zur Berechnung der Fläche die Kantenlängen des Rechtecks. Wenn wir diese Methode aufrufen müssen wir die Parameter wieder durch Kommas voneinander trennen:

<eval rows="1">"Die Fläche eines Rechtecks bin a=3.1 und b=5.7 ist: " + RechteckA(3.1,5.7) + "cm²"</eval>