GhK FB 17 Mathematik / Informatik

Programmieren mit Java Was ist JAVA? Arbeitsweise, Programmstruktur

GhK

Java-Referenzen

FB 17 Mathematik / Informatik



http://www.ora.com/info/java/

(Verlagsseite O‘Reilly)



http://www.javasoft.com/

(Sun Microsystems Java-Seite)



David Flanagan : JAVA in a nutshell (deutsch), O‘Reilly, 1996



Martin Schrader, Lars Schmidt-Thieme : Java, eine Einführung, Springer 1997

GhK

Eigenschaften von Java

FB 17 Mathematik / Informatik

• einfach – nur kontrollierte Sprünge (kein goto) – modularer Aufbau – keine Zeiger

• interpretiert – – – –

Übersetzung in Java-Bytecode interpretiert durch ava- irtualportabel (plattformunabhängig) gute Performance , sparsam ust n ime compilierung 







achine



• robust – – – –

für technische Anwendungen kozipiert stark typisiert Ausnahmenbehandlung Sicherheit

• Objekt-orientiert • Multithread-fähig

GhK

Java-Umgebung

FB 17 Mathematik / Informatik

Texteditor Compiler (javadoc)

.java-Datei Compiler (javac) Applet

Interpreter (appletviewer)

Applikation

JVM (java) Interpreter

.class-Datei

.html-Datei

Browser (netscape) Interpreter

GhK

elementare Programmstruktur

FB 17 Mathematik / Informatik

• Programme (Java-Klassen) public class { public static void main (String args[]) { .......... } }

• Applets import java.applet.*; import java.awt.*;

Programmdatei : .java public class { public static void main (String args[]) { .......... } }

public class extends Applet { public void init () { .......... } public void paint (Graphics ) { .......... } }

GhK

Kommentare

FB 17 Mathematik / Informatik

• von entscheidender Wichtigkeit bei jedem Programmieren sind die Kommentare, ohne die ein Programm weder lesbar noch wartbar ist: – Was tut dieser Programmabschnitt? – Welche Rolle spielt diese Variable – Welche Bedingungen sind an diese Parameter geknüpft

• Java kennt 3 sorten von Kommentarklammern – // ........

Zeilenende

kurze Anmerkungen

– /* ........

*/

Kommentare über mehrere Zeilen

– /** ........ */

Kommentare, die zur Dokumentation verwendet werden

GhK

Beispiel: Zaehler

FB 17 Mathematik / Informatik

// Zaehler.java class Zaehler { // Variablen private int wert; //Zählerstand //Methoden int wert() {return wert;} //Zählerstand ablesen void wert(int i) {wert = i;} //Zähler setzen void inkrement() {++wert;} // weiterzählen void dekrement() {--wert;} // zurückzählen }

GhK

Beispiel ZählerTest

FB 17 Mathematik / Informatik

//ZaehlerTest.java import java.io.* ; //in/output class ZaehlerTest { public static void main(String[] args) { Zaehler z = new Zaehler(); BufferedReader in = new BufferedReader( new InputStreamReader(System.in)); // in liest von der Tastatur PrintWriter out = new PrintWriter(System.out, true); // out schreibt auf den Bildschirm for(;;) { //Endlosschleife out.println("----\nZählerstand: " + z.wert() + "\n----"); char akt = '+' ; // char-Variable deklariert

do { out.print("Aktion(+/-): "); out.flush(); try { akt = in.readLine().charAt(0); } catch(IOException ioe){} } while (akt != '+' && akt != '-'); if (akt ='+') z.inkrement(); else z.dekrement(); } //Ende for-Schleife } //Ende main } //Ende ZaehlerTest

GhK

Ausgabe ZaehlerTest

FB 17 Mathematik / Informatik



GhK

Beispiel Zählerframe

FB 17 Mathematik / Informatik

//ZaehlerFrame.java import java.awt.* ; //Fenstertechnik import java.awt.event.* ; //Mausaktionen class ZaehlerFrame extends Frame {private Button plus, minus; private TextField stand; private Zaehler z; ZaehlerFrame(String s) {super(s); z = new Zaehler(); setLayout(new GridLayout(2,2)); add(new Label("Zählerstand: ", Label.RIGHT) add(stand = new TextField(10)); stand.setText(String.valueOf(z.wert())); stand.setEditable(false); add(plus = new Button("Inkrementiere")); add(minus = new Button("Dekrementiere")); ButtonListener check = new ButtonListener(); plus.addActionListener(check); minus.addActionListener(check); pack(); setVisible(true); } //Ende Konstruktor

public static void main(String[] args) { new ZaehlerFrame("Zähler-Test") } //Ende main class ButtonListener implements ActionListener {public void actionperformed(ActionEvent e) {if (e.getAction.command().equals("Inkrementiere")) z.inkrement(); else z.dekrement(); stand.setText(String.valueOf(z.wert())); } //Endeactinperformed } //Ende ButtonListener } //Ende ZaehlerFrame

GhK

Beispiel Zählerapplet

FB 17 Mathematik / Informatik

//ZaehlerApplet.java import java.applet.* ; //Applet import java.awt.* ; //Fenstertechnik import java.awt.event.* ; //Mausaktionen public class ZaehlerAplett extends Applet {private Button plus, minus; private TextField stand; private Zaehler z; public void init() {z = new Zaehler(); setLayout(new GridLayout(2,2)); add(new Label("Zählerstand: ", Label.RIGHT) add(stand = new TextField(10)); stand.setText(String.valueOf(z.wert())); stand.setEditable(false); add(plus = new Button("Inkrementiere")); add(minus = new Button("Dekrementiere")); ButtonListener check = new ButtonListener(); plus.addActionListener(check); minus.addActionListener(check); // pack(); setVisible(true); } //Ende init

GhK FB 17 Mathematik / Informatik

public static void main(String[] args) { new ZaehlerFrame("Zähler-Test") } //Ende main class ButtonListener implements ActionListener {public void actionperformed(ActionEvent e) {if (e.getAction.command().equals("Inkrementiere")) z.inkrement(); else z.dekrement(); stand.setText(String.valueOf(z.wert())); } //Endeactinperformed } //Ende ButtonListener } //Ende ZaehlerFrame HTML-Seite: ...

ZählerApplet

GhK

Bezeichner

FB 17 Mathematik / Informatik

• Alle in einem Java Programm verwendeten Variablen, Funktionen etc. tragen Namen (Bezeichner), die nach folgenden Regeln gebildet werden: – Sie beginnen mit einem Buchstaben a..z,A..Z oder _,$. – die nachfolgenden Zeichen dürfen außerdem auch Zahlen oder andere druckbare Zeichen des Unicode-Zeichensatzes (eine 16-Bit Obermenge des ASCII-Zeichensatzes) sein.

• Java ist case-sensitiv, d.h. es unterscheidet zwischen Groß- und Kleinschreibung. – Er, eR, ER, er sind jeweils verschiedene Bezeichner.

• Die Verwendung von _ und $ am Bezeichneranfang ist nicht zu empfehlen, weil die meisten Programmierer sie für Systemvariablen halten werden.

GhK

elementare Datentypen

FB 17 Mathematik / Informatik

• Java kennt 8 vordefinierte Datentypen Datentyp

Größe(Bit)

default Wert

boolean

8

false

byte

8

0

char

16

short

Min

Max

-128

127

\u0000

\u0000

\uFFFF

16

0

-32768

32767

int

32

0

-2147483648

2147483647

long

64

0

-9223372036854775808 9223372036854775808

float

32

0.0F

±3.40282347E+38

double

64

0.0D

±1.79769313486231570E+308 ±4.94065645841246544E-324

±1.40239846E-45

GhK

Typ boolean

FB 17 Mathematik / Informatik

• boolean Werte sind keine Zahlwerte, sondern können nur die Werte true und false annehmen. • Operationen auf boolean: ! & ^ | ?: && || == !=

logische Negation logisches AND logisches XOR logisches OR logisches IF short circuit AND short circuit OR gleich ungleich

GhK

(einstellig) (zweistellig) (zweistellig) (zweistellig) (dreistellig) (zweistellig) (zweistellig) (zweistellig) (zweistellig)

x !x x&y x^y x|y x?y:z x==y x!=y

false true false y y z !y y

true false y !y true y y !y

short circuit Auswertung

FB 17 Mathematik / Informatik

• Die Operationen && sowie || unterscheiden sich in ihrer Ausgabe auf boolean nicht von & und |, jedoch im „Verhalten“. • Ist x&&y bzw. x||y auszuwerten, so wird zunächst x berechnet. Wertet x zu 0 bzw. 1 aus, so ist dies bereits die Ausgabe, ohne daß y noch ausgewertet werden muß. • Der Sinn ist nicht nur eine Verringerung des Aufwandes, sondern auch die Vermeidung von Sonderfällen. Beispiel: (x==0)||(y/x> &, ^, |

plus, minus mal, geteilt, Rest Shift links, rechts Shift rechts mit 0-Erweiterung bitweises AND, XOR, OR

• boolean-wertig ==, != = ?:

gleich, ungleich Größenvergleich dreistelliges IF

(b)?x:y = “falls b, dann x sonst y“

GhK

Seiteneffekte von ++ und --

FB 17 Mathematik / Informatik

• Normalerweise erwartet man von einer Operation, daß sie Eingaben entgegennimmt und eine Ausgabe abliefert, aber die Eingaben unverändert läßt, ++ und -- sind anders! • ++x und --x erhöhen oder erniedrigen den Wert von x um 1 und liefern dann diesen veränderten Wert von x ab. • x++ und x-- liefern zuerst den Wert von x ab und erhöhen oder erniederigen danach den Wert von x • Beispiel: hat x den Wert 5 , so ist die Wirkung von: y=++x y=x++ y=--x y=x-x: 6 6 4 4 y: 6 5 4 5 • Man nennt ein solches Verhalten einer Funktion einen Seiteneffekt.

GhK

char-Typ

FB 17 Mathematik / Informatik

• Der typ char kann beliebige unicode-Zeichen enthalten • Literale (werden in Hochkommata ‘ ‘ oder “ “ eingeschlossen ): –alle druckbaren Ascii-Zeichen außer ‘ “ und \

.

–Die Escape-Sequenzen: \n (neue Zeile) \t (tabulator) \b (Rückschritt) \r (Rücklauf) \f (neue Seite) \‘ ( Hochkomma) \“ (Quotation) \\ (Backslash) –Unicode-Zeichen : \uxxxx dabei ist xxxx eine Folge von 1 bis 4 Hexadezimalziffern.

• Beispiele ‘ ‘

Leerzeichen

‘\‘‘

Hochkomma

‘\‘

„Fehler“

‘\u5c‘

„derselbe Fehler“

‘\\u22‘

Backslash

‘\u3240‘

• Operationen: ==, !=, ?:

GhK

real-Typen

FB 17 Mathematik / Informatik

Gleitkommazahlen gibt es in zwei Genauigkeiten float und double, die nach IEEE Standard 754 festgelegt sind, nach diesem Standard gibt es außer den Zahlen noch : • +inf das Ergebnis + Unendlich bei einem Überlauf

• -inf das Ergebnis - Unendlich bei einem Unterlauf

• NaN das Ergebnis „not a number“, wenn eine Operation kein sinnvolles Ergebnis haben kann, z.B. Division durch 0 oder Wurzel aus einer negativen Zahl. Ist x = 0, +inf oder -inf, so ist NaN*x=x Achtung:

Es wird nie ein Fehler "Division durch 0" moniert!

GhK

Operationen auf reals

FB 17 Mathematik / Informatik

• einstellig ++ -+, -

Inkrement Dekrement Vorzeichen

x+1 x-1 x , -x

• zweistellig +, *, /

plus, minus mal, geteilt

• boolean-wertig = =, != = ?:

gleich, ungleich Größenvergleich dreistelliges IF (b)?x:y = “falls b, dann x sonst y“

GhK

real Literale

FB 17 Mathematik / Informatik

• Die Gleitkommazahlen haben die Literaldarstellung: Vorzeichen Ziffernfolge Ziffernfolge Exponent Endung dabei sind 

• Vorzeichen :

| 

optional 



• Exponent :

| Vorzeichen Ziffernfolge

optional

| | | optional • Endung : wenn ein Exponent vorkommt, ist auch der Dezimalpunkt optional.





• Die Zahl 256.0172 hat also z.B. folgende Darstellungen: 2560172E-4D, .2560172e3, 2.560172e2f, ...

GhK

Zeichenketten

FB 17 Mathematik / Informatik

• Ein besonderer Datentyp in Java ist der String , der eine Folge von unicode-Zeichen darstellt. • Literale: Wie bei char werden Einzelzeichen und escapesequenzen in Folge notiert und die Folge in Hochkommata eingeschlossen. • Beispiele: “Ausgabe:\n“ , ‘dies ist ein langer String‘, ““ • Operationen: +

(Conkatenation) ‘Milch‘+‘Mann‘ steht für ‘MilchMann‘

= =, !=

(Identität, Vorsicht!!)

length( )

(Länge)

length(‘der Hund ist tot.\n‘) ist 18

charAt( ) , equals( ) , compareTo( ) , IndexOf( ) , ...

GhK

Referenztyp String

FB 17 Mathematik / Informatik

• String ist kein elementarer Typ, obwohl er praktisch wie ein elementarer Typ behandelt wird. • Elementare Daten haben einen Speicherplatz fester Größe, in dem ihr Wert abgespeichert ist. Auch Strings haben einen Speicherplatz fester Größe, in dem steht aber nur eine Referenz (Verweis, Zeiger) auf den Speicherplatz, wo die Zeichenfolge abgelegt ist. • == und != fragen ab, ob zwei Strings auf denselben Speicherplatz verweisen. x!=y besagt also nicht notwendig, daß die Zeichenreihen verschieden sind, sondern lediglich, daß sie an unterschiedlichen Stellen abgelegt sind. Ob zwei Strings dieselbe Zeichenreihe sind, wird mit equals( ) überprüft. • Java achtet darauf , daß gleichlautende String Konstanten nicht mehrmals an verschiedenen Stellen abgelegt werden.

GhK

Spezielle Strings

FB 17 Mathematik / Informatik

• null ist kein String, sondern allgemein ein leerer Zeiger, wo mal ein Verweis (z.B. auf einen String) hinein kann. • ‘‘ (bzw. ““) ist der leere String, d.h. der einzige String von Länge 0. • ‘ ‘(bzw. “ “) ist der String der Länge 1, der als einziges Zeichen das Leerzeichen (space) enthält. • In String-literalen können alle Zeichen wie bei char verwendet werden: – alle druckbaren Ascii-Zeichen außer ‘ “ und \ . – Die Escape-Sequenzen: \n (neue Zeile) \t (tabulator) \b (Rückschritt) \r (Rücklauf) \f (neue Seite) \‘ ( Hochkomma) \“ (Quotation) \\ (Backslash) – Unicode-Zeichen : \uxxxx dabei ist xxxx eine Folge von 1 bis 4 Hexadezimalziffern.

• Strings sind im Wesentlichen unveränderlich. Eine Veränderung einer String-Variable kann nur dadurch erzeugt werden, daß man einen neuen String des gewünschten Inhalts erzeugt und dann die Variable darauf verweisen läßt.

GhK

Java hat keine Zeiger

FB 17 Mathematik / Informatik

Die Behauptung, Java habe keine Zeiger, ist in gewissem Sinn zwar richtig, aber im Grunde genommen völlig falsch. • Andere Programmiersprachen haben Zeiger, das sind Speicheradressen, die der Programmierer manipulieren kann. Letzteres geht in Java tatsächlich nicht. • Alle Datentypen (= Klassen) in Java, außer den elementaren Typen sind Referenztypen, also Zeiger auf eine entsprechend große Speicherstelle. In diesem Sinne ist Java ohne Zeiger also nicht denkbar. Der Unterschied zu anderen Programmiersprachen ist, daß die Speicherverwaltung aus Sicherheitsgründen jedem programmierten Zugriff entzogen ist. Alles was ein Java-Programm tun kann, ist Speicher anfordern und die zugeteilte Adresse im Zeiger ablegen.

GhK

Felder (Arrays)

FB 17 Mathematik / Informatik

• Felder (arrays) sind Folgen von Daten, die alle denselben Typ T besitzen, das Feld wird dann mit T[] deklariert. String ist so ähnlich wie ein char array. • Auch Felder sind Referenztypen, also Zeiger auf einen Speicherbereich und werden bei der Deklaration T[] Name mit null (dem leeren Zeiger) initialisiert. • Beispiele: – int[] a;

//deklariert ein int-Feld a

– String[] b

//deklariert ein String-Feld b

– short[][] c

//deklariert ein doppelt indiziertes short-Feld c

GhK

Erzeugen von Feldern

FB 17 Mathematik / Informatik

• Die Deklaration eines Referenztyps (z.B. Feld) erzeugt nur den Zeiger null, der noch auf nichts zeigt. Deshalb muß ein solcher Typ vor Gebrauch erst erzeugt werden, d.h. Speicher muß reserviert und die Adresse im Zeiger abgelegt werden. (Standardmethode new) • a = new int[5]

a

0 0 0 0 0

ein Feld von 5 integers wird erzeugt und jeder Eintrag mit 0 initialisiert.

• double[] d = {1.1, 1.21, 1.331}; d

1.1

1.21 1.331

ein Feld von 3 doubles wird deklariert, erzeugt und mit den angegebenen Werten initialisiert.

• b = new String[] {“Die“, “Erzeugung“, “von“, “Feldern“}; ein Feld von Strings wird deklariert, erzeugt und mit den angegebenen Werten initialisiert. die Erzeugung von Feldern b

GhK

Zugriff auf Felder

FB 17 Mathematik / Informatik

• Der Inhalt von Feldkomponenten kann angesprochen werden (zum Lesen oder zum Schreiben), indem man den Feldnamen A und in eckigen Klammern [] die Position i anspricht : A[i] • Die Positionen beginnen mit 0 und gehen bis length(A)-1 • Beispiel: int[] x = new int[n] //auch for (int i=0; i