Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

04.05.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 1 Arithmetik in Java Ganzzahl-Division Nulldivision führt zu einer ArithmeticException.

Ähnliche Präsentationen


Präsentation zum Thema: "04.05.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 1 Arithmetik in Java Ganzzahl-Division Nulldivision führt zu einer ArithmeticException."—  Präsentation transkript:

1 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Arithmetik in Java Ganzzahl-Division Nulldivision führt zu einer ArithmeticException Gleitpunkt-Division Nulldivision führt zu keiner ArithmeticException, anstelle dessen werden die Werte NEGATIVE_INFINITY und POSITIVE_INFINITY benutzt eine Zahl die keine ist: NaN nicht definierte arithmetische Operationen liefern den Wert NaN (Not a Number) float f; f = Float.NEGATIVE_INFINITY + Float.POSITIVE_INFINITY; System.out.println(Float.toString(f)) // => NaN

2 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Typkonvertierungen (Primitivtypen) Konvertieren von Primitivtypen erfolgt bei einer Zuweisung, wenn der Typ der Variablen und des zugewiesenen Ausdrucks nicht identisch sind bei einer Auswertung eines arithmetischen Ausdrucks, wenn die Operanden unterschiedlich sind beim Aufruf einer Methode, falls die Typen der aktuellen Parameter nicht mit denen der formalen Parameter übereinstimmen byte short intlongfloatdouble char Explizites Casting (typename) value(int) (x/y)

3 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Typkonvertierung (Referenztypen) Umwandlungsarten Umwandlung eines Objekts vom Typ T in seine Basisklassen Umwandlung eines Objektes T in eine aus T abgeleitete Klasse (classname) object Primitivtypen Referenztypen Kein automatisches oder explizites Casting Die Wrapperklassen Integer, Long, Float, Double, Char,... entsprechen je einem primitiven Datentyp int i = 1903; Integer intObj = new Integer(i); myVector.addElement(intObj);

4 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Variablen Variablenarten: Instanz- und Klassenvariablen, lokale Variablen Variablen deklarieren int currentversion; boolean isSuspended; Werte für Variablen zuweisen currentVersion = 1; isSuspended = true; int a, b, c = 5; lokale Variablen müssen Werte haben bevor sie benutzt werden Anfangswerte für Instanz- und Klassenvariablen null - für Klassenvariablen 0- für numerische Variablen ´\u0000´- für Zeichen false - für boolesche Variablen Konstantendefinition final currentVersion = 1;

5 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Zeichenketten Zeichenketten sind Objekte der Klasse java.lang.String String s1 = ´´Eine konstante Zeichenkette´´ StringBuffer s2 = ´´ Eine veränderbare Zeichenkette´´ Verkettung von Zeichenketten String s = ´´Ein String aus´´ + ´´ zwei Hälften´´ Kopieren von Zeichenketten String s; StringBuffer sb = new StringBuffer(´´ABC´´); s = sb.toString(); automatische Konvertierung von Zeichenketten for(int i = 1; i <= 10; i++) System.out.println(´´Der ´´ + i + ´´. String´´);

6 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Die Klassen String und StringBuffer Methoden der Klasse java.lang.String length()- liefert die Länge des String-Objekts charAt()- liefert das Zeichen an der bezeichneten Position equals()- Vergleichen von Zeichenketten substring()- liefert den Teilstring Methoden der Klasse java.lang.StringBuffer append()- hängt eine Zeichenkette am Ende des Strings ein insert()- fügt eine Zeichenkette an einer bestimmten Stelle ein delete()- löscht einen Teil des Strings replace()- ersetzt einen Teil des Strings length()- liefert die Länge der momentan enthaltenen Zeichenkette

7 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Reihungen In Java sind Reihungen (engl. Arrays) spezielle Objekte Elementtyp einer Reihung wird Basistyp genannt in Java kann der Basistyp einer Reihung ein numerischer Type oder ein Referenztyp sein Gemeinsamkeiten von Objekten und Reihungen Reihungen werden wie Objekte dynamisch angelegt Reihungen sind Referenztypen Reihungen sind wie alle Klassen in Java Unterklassen der Klasse Object Elemente einer Reihung werden wie Zustandsvariablen von Objekten automatisch initialisiert Unterschiede zwischen Objekten und Reihungen Arrays haben keine Konstruktoren. Statt dessen gibt es für Arrays eine spezielle Syntax des new-Operators Es können keine Unterklassen von Arrays definiert werden.

8 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Deklaration und Erzeugen von Reihungen Deklaration von Reihungsvariablen int a1 []; int [] a1; String names []; Erzeugen von Reihungsobjekten durch den new-Operator a1 = new int[4]; int a2 [] = new int[4]; String names [] = new String[4] automatische Initialisierung eines Reihungsobjektes bei der Erzeugung numerischer Basistyp => vordefinierter Anfangswert des Basistyps ist der Basistyp ein Referenztyp => vordefinierte Anfangswert null

9 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Initialisierung und Zugriff auf Reihungen Zugriff auf Reihungselemente a1[0] = 1; a1[1] = 2; a1[2] = 3; a1[3] = 4; names[0]=´´Karl´´; names[1]=´´Jan´´; names[2]=´´Uwe´´; names[3]=new String(´´Hans´´); Reihungslänge ist durch die Instanzvariable length gegeben for(int i = 0; i < a1.length; i++) a1 [i] = i + 1; Zugriffsfehler führt zu einer ArrayOutOfBoundsExecption a1[4] =... // keine Ausnahmebehandlung => Laufzeitfehler Direktes Initialisieren von Reihungselementen int a1 [] = {1, 2, 3, 4}; String names[] = {´´Karl´´, ´´Jan´´, ´´Uwe´´, new String(´´Hans´´)};

10 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Mehrdimensionale Reihungen Reihungen die als Basistyp eine Reihung haben ChessPiece [][] chessBoard ; chessBoard = new chessPiece[8][8]; chessBoard[0][0] = new ChessPiece(´´Rook´´); chessBoard[1][0] = new ChessPiece(´Pawn´); direktes Initialisieren mehrdimensionaler Reihungen int a [][] = { {1, 2, 3},{1, 2, 3}}; int a [][] = new int[2][3]; a[0][0] = 1; a[0][1] = 2; a[0][2] = 3; a[1][0] = 1; a[1][1] = 2; a[1][2] = 3; mehrdimensionale Reihungen müssen nicht rechteckig sein int a [][] = {{0}, {1,2},{1,2,1}};

11 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Objekte in Java

12 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Die Definition von Klassen Eine Klassendefinition besteht aus dem Schlüsselwort class und dem Klassennamen Der Körper einer Klasse enthält Variablen- und Methodendefinitionen class Point { int x, y, color; void moveTo(int newX, int newY){ x = newX; y = newY; } void moveRel(int dx, int dy){ x += dx; y += dy; }

13 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Objekte einer Klasse Erzeugen von Objekten (= Instanzen) einer Klasse Point start, end; start = new Point(); end = new Point(); Bei der Benutzung des new-Operators wird Speicherplatz für ein Objekt einer Klasse angefordert der Konstruktor, eine spezielle Methode zum Initialisieren von Objekten, aufgerufen startend x: 0 y: 0 color :0 MoveTo() moveRel() x: 0 y: 0 color :0 MoveTo() moveRel()

14 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Konstruktoren einer Klasse Konstruktoren einer Klasse haben den gleichen Namen Konstruktoren haben keinen Ergebnistyp eine Klasse kann mehrere Konstruktoren mit unterschiedlichen formalen Parametern haben Wenn ein Konstruktor einen anderen Konstruktor aufruft, dann muß dieser Aufruf die erste Anweisung des Konstruktors sein ist für eine Klasse kein Konstruktor definiert, so wird für die Klasse ein impliziter Konstruktor verwendet

15 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Definition von Konstruktoren class Point { int x, y, color; Point(){ x = 0; y = 0; color = 0; } Point(int newX, int newY){ x = newX; y = newY; color = 0; } Point(int newX, int newY, int newColor){ x = newX; y = newY; color = newColor; } void moveTo(int newX, int newY){... } void moveRel(int dx, int dy){... } }

16 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Verwendung von Konstruktoren Point start, end; start = new Point(); end = new Point(1,2,3); startend x: 0 y: 0 color :0 MoveTo() moveRel() x: 1 y: 2 color :3 MoveTo() moveRel()

17 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Der Schlüsselwort this Das this-Schlüsselwort liefert einen Verweis auf das Objekt in dem dieses Schlüsselwort steht Verwendung des this-Schlüsselwortes Aufruf einer Methode mit dem aktuellen Objekt als Parameter drawPoint(this); Zugriff auf überdeckte Variablen Point(int x, int y){ this.x = x; this.y =y; } Zugriff auf andere Konstruktoren einer Klasse Point(int x, int y, int color){ this(x,y); this.color = color; }

18 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Entfernen von Objekten Garbage Collector (GC) gibt nicht mehr benötigte Objekte frei –GC ist in Java ein Thread mit niedriger Priorität –der Aufruf des GC kann mit System.gc() erzwungen werden Unterstützung des GC durch den Programmierer Vector vec = new Vector(1000);... vec = null; GC ruft für ein Objekt die Methode finalize() auf protected void finalize() throws IOExecption{ if (fd != null){ if(fd != fd.in) close(); }

19 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Instanz- und Klassenvariablen Instanzvariablen enthalten die Attribute eines Objektes Definition zu Beginn der Klassendefinition int personalNummer; final mindestAnzahl; Instanzvariablen werden für jedes Objekt einer Klasse angelegt Instanzvariablen werden mit Instanz.variablenname aufgerufen benutzer.personalNummer Klassenvariablen sind globale Variablen innerhalb einer Klasse Klassenvariablen werden mit dem Modifier static definiert static int sum; final static int LEFT = 1; Klassenvariablen werden für eine Klasse nur einmal angelegt Klassenvariablen mit Klassenname.Variablenname angesprochen Benutzer.sum

20 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Beispiel zu Instanz- und Klassenvariablen class Benutzer{ int personalNummer; String name; String vorname; static int numUser = 0; static final int maxUser = 200; Benutzer(String name, String vorname){ personalNummer = numUser++; this.name = name; this.vorname = vorname; }... if (Benutzer.numUser + 1< Benutzer.maxUser){ Benutzer benutzer1 = new Benutzer(´´Müller´´, ´´Peter´´); Benutzer benutzer2 = new Benutzer(´´Meier´´, ´´Franz´´); int nummer = benutzer1.personalNummer; }

21 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Methoden Eine Methode wird folgendermaßen definiert: returntype Methodenname([parameter]){... } Methoden können lokale Variablendefinitionen enthalten lokale Variablen müssen vor dem ersten Gebrauch immer initialisiert werden, können Instanz- und Klassenvariablen überdecken Modellierung nicht fester Parameterzahl durch Reihungen int sum(int [] a){int [] n; int temp = 0;n = new int[10]; for(int i = 0; i < a.length; i++) int sum = sum(n); temp += a[i]; return temp; }

22 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Instanz- und Klassenmethoden Instanzmethoden beziehen sich auf ein konkretes Objekt wie zum Beispiel int sum (int a [] ){... } Klassenmethoden gehören zu einer Klasse und nicht zu einem bestimmten Objekt der Klasse werden mit dem Schlüsselwort static definiert können nur statische Teile (Variablen, Methoden) einer Klasse verwenden Beispiel: Klasse Math static int numUser(){static int maxUser(){ return numUser;return maxUser;} Methodenaufruf InstanzmethodenInstanz.methode(argument1,...) KlassenmethodenKlasse.methode oder Instanz.methode

23 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Parameterübergabe Parameter werden durch call-by-value übergeben jeder Java-Datentyp kann übergeben werden primitive Datentypen können nicht verändert werden nur Attribute von Objekten können verändert werden, nicht das Objekt selbst Beispiel: Parameter ist ein einfacher Typ void getnumber(int number){ number = 0; // Parameter nicht geändert } Beispiel: Objekt als Parameter void sub(Benutzer user){ user.name = ´´Müller´´; // Änderung außerhalb der Methode user = new Benutzer(´´Müller´´,´´Franz´´); // keine Veränderung }

24 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Überladen von Methoden Java bietet die Möglichkeit, Methoden zu überladen gleicher Methodenname unterschiedliche Parameteranzahl bzw. Parametertypen Rückgabewert spielt keine Rolle bei der Methodenzuordnung Auswahl der aufgerufenen Methode zur Übersetzungszeit Ist eine Zuordnung der aufrufenden Methode eindeutig, so wird die Methode ausgewählt, welche gleiche Parameteranzahl bzw. -typen hat ist die Zuordnung eines Methodenaufrufs nichteindeutig, wird die Methode ausgewählt, die zu allen in Frage kommenden Methoden die speziellste ist Eine Methode A ist spezieller als eine Methode B, falls die Parametertypen von A aus den Parametertypen von B abgeleitet werden können. Beispiel: sum(Float a, Float b) ist spezieller als sum(Object a, Object b) die Zuordnung der Parameterlisten muß eindeutig sein

25 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Beispiel zum Überladen von Methoden void swap(Object a, Object b){ Object temp = a; b = a; a = temp; } void swap(Float a, Float b){ Float temp = a; b = a; a = temp; } Float a = new Float(1.2); Float b = new Float(2.3); swap(a,b); // die Methode swap(Float a, Float b) wird aufgerufen // Aufruf swap(a,b) ändert die Aufrufumgebung nicht

26 , Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS Kapselung von Daten Gründe für die Datenkapselung Datenkonsistenz leichtere Modifikation des Codes weniger Dokumentation nötig Modifier zur Kapselung von Daten public überall sichtbar private nur innerhalb der eigenen Klasse zugreifbar default innerhalb eines Paketes zugreifbar package=> Pakete protected=> Vererbung Eigenschaften von Modifiern Modifier sind Präfixe, die Klassen, Methoden und Variablendefinitionen vorangestellt werden können Reihenfolge von Modifiern hat keine Bedeutung


Herunterladen ppt "04.05.1999, Dr. Wolfram Amme, Softwareentwicklung in Java, FSU Jena, SS 1999 1 Arithmetik in Java Ganzzahl-Division Nulldivision führt zu einer ArithmeticException."

Ähnliche Präsentationen


Google-Anzeigen