Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Java-Intensivkurs WS07/08 Folie 1 Ashraf Abu Baker Johann Wolfgang Goethe-Universität Professur für Graphische Datenverarbeitung.

Ähnliche Präsentationen


Präsentation zum Thema: "Java-Intensivkurs WS07/08 Folie 1 Ashraf Abu Baker Johann Wolfgang Goethe-Universität Professur für Graphische Datenverarbeitung."—  Präsentation transkript:

1 Java-Intensivkurs WS07/08 Folie 1 Ashraf Abu Baker Johann Wolfgang Goethe-Universität Professur für Graphische Datenverarbeitung Fachbereich Informatik und Mathematik Prof. Dr. Detlef Krömker

2 Java-Intensivkurs WS07/08 Folie 2 Interfaces Ein Interface (Schnittstelle) besteht aus einer Sammlung von statischen Konstanten und abstrakten Methoden, die als public deklariert sind Ein Interface kann als abstrakte Klasse aufgefasst werden, die nur abstrakte Methodendeklarationen und statische Kostanten umfasst Interfaces werden mit dem Schlüsselwort interface deklariert, dürfen keine Konstruktoren definieren und können daher nicht instanziiert werden

3 Java-Intensivkurs WS07/08 Folie 3 Interfaces Alle in einem Interface definierten Attribute sind automatisch statische Konstanten, die initialisiert werden müssen public interface GeometricObjectInterface {//Interface declaration public static final int CIRCLE=0; public static final int RECTANGLE=1; public static final int SQUARE=2; public int getType(); public abstract float getCircumference(); //Berechnet den Umfang eines geometrischen Objektes }

4 Java-Intensivkurs WS07/08 Folie 4 Interfaces Interfaces werden erstellt, um von Klassen implementiert zu werden Eine Klasse, die ein Interface implementiert, muss alle Methoden des Interfaces überschreiben: public class Circle implements GeometricObjectInterface{ public float radius; public Circle(float radius){this.radius=radius;} public int getType(){ return GeometricObjectInterface.CIRCLE;} public float getCircumference(){ return (float)(2*Math.PI*radius);}}

5 Java-Intensivkurs WS07/08 Folie 5 Interfaces public class Square implements GeometricObjectInterface{ public float side; public Square(float side){this.side=side;} public float getCircumference(){ return 4*side;} public int getType(){ return GeometricObjectInterface.SQUARE; }

6 Java-Intensivkurs WS07/08 Folie 6 Interfaces Eine Klasse, die nicht alle Methoden eines Interfaces implementiert, muss als abstract deklariert werden Interfaces können wie Klassen voneinander abgeleitet werden Interfaces können als ein restriktiver Mechanismus für Mehrfachvererbung verwendet werden So kann eine Klasse mehrere Interfaces implementieren. Sie muss dann zu jedem Interface alle darin definierten Methoden implementieren:

7 Java-Intensivkurs WS07/08 Folie 7 Das Interface Comparable Eine Klasse, die dieses Interface implementiert, definiert eine Ordnung auf ihre Objekte und macht sie paarweise vergleichbar Ihre Objekte können z.B. von Sortiermethoden sortiert werden public interface Comparable { public int compareTo(T o); }

8 Java-Intensivkurs WS07/08 Folie 8 Comparable public class ComparablePoint extends Point implements Comparable{ public float x1; public float public int compareTo(ComprablePoint p) { if(x1

9 Java-Intensivkurs WS07/08 Folie 9 Comparable Alle Wrapper-Klassen und viele andere Klassen wie String, Date, File… implementieren das Comparable Interface

10 Java-Intensivkurs WS07/08 Folie 10 Namenskonventionen Ein Namenskonvention ist eine Empfehlung wie Pakete, Klassen, Variablen, Methoden, Interfaces… etc. sinnvoll bezeichnet werden sollen Paketnamenskonvention: Paketnamen sollten aus Kleinbuchstaben bestehen Sollten kurze Nomen (Substantive) sein Sie dürfen auch Ziffern enthalten Beispiel: de.frankfurt.cs.gdv.visian3d

11 Java-Intensivkurs WS07/08 Folie 11 Namenskonventionen Klassennamen: Beginnen mit einem Großbuchstaben und sollten Nomen (Substantive) sein Besteht ein Klassenname aus mehreren Silben wie z.B. BinaryNode, RedBlackTree so beginnt jeder Silbe beginnt ebenfalls mit einem Buchstaben Beispiele: Point, ComplexNumber, VisualBinarySearchTree…

12 Java-Intensivkurs WS07/08 Folie 12 Namenskonventionen Methodennamen: Beginnen mit Kleinbuchstaben Sollten Verbe get(), run(), save()… sein Besteht ein Methodenname aus mehreren Silben wie z.B. getUserName() so beginnt jeder Silbe beginnt mit einem Buchstaben Boolesche Funktionen sollten mit is, has, can, etc. anfangen run(), getLeftChild(),setName(), isReady(), shouldWait()..

13 Java-Intensivkurs WS07/08 Folie 13 Namenskonventionen Variablennamen: Beginnen mit Kleinbuchstaben Darauffolgende Silben fangen mit einem Großbuchstaben an Sie sollten kurz und ausdrucksstark sein Boolesche Variablen sollten mit is, has, can etc. anfangen age, userName, isVisible, hasTicket, canStart, shouldRestarted….

14 Java-Intensivkurs WS07/08 Folie 14 Namenskonventionen Konstantennamen: Bestehen aus Großbuchstaben Silben werden durch einen Unterstrich getrennt SIZE, MAX_VALUE, EDGE_COLOR

15 Java-Intensivkurs WS07/08 Folie 15 Namenskonventionen Interfaces : Beginnen mit einem Großbuchstaben und sollten Nomen (Substantive) sein Silben beginnen ebenfalls mit einem Buchstaben GeometricObjectInterface

16 Java-Intensivkurs WS07/08 Folie 16 Object, Math und String Object ist die Oberklasse aller Java-Klassen Jede Klasse, die nicht explizit von einer anderen Klasse abgeleitet wird, wird implizit von Object abgeleitet Klasse Object verfügt über zahlreiche Methoden: class A { } //ist äquivalent zu class A extends Object { }

17 Java-Intensivkurs WS07/08 Folie 17 Object public String toString(): Liefert eine String-Darstellung eines Objektes zurück Wird z.B. von der Methode System.out.println() aufgerufen Standardimplementierung der Methode liefert den Klassennamen und den HashCode des Objektes im Hexdezimal-Format als String zurück: //Standardimplementierung von toString() in der Klasse Object public String toString(){ return }

18 Java-Intensivkurs WS07/08 Folie 18 Object Will man eine sinnvolle String-Darstellung des Objektes haben, dann muss die Methode überschrieben werden: Bankkonto alexKonto=new Bankkonto(35870,"Alex M.",2103); System.out.println(alexKonto); Ausgabe:

19 Java-Intensivkurs WS07/08 Folie 19 Object Überschreibung der toString-Methode in Bankkonto //Überschreibung von toString() in Bankkonto public String toString(){ return "Kontoinformation:\r\n"+ "Kontonummer: "+kontoNummer+"\r\n"+ "Kontoinhaber(in): "+inhaber+"\r\n"+ "Kontostand: "+kontoStand+" \r\n"; } Bankkonto alexKonto=new Bankkonto(35870,"Alex M.",2103); System.out.println(alexKonto); Ausgabe: Kontoinformation: Kontonummer: 2150 Kontoinhaber(in): Alex M. Kontostand:

20 Java-Intensivkurs WS07/08 Folie 20 Objektvergleiche Zwei Möglichkeiten, Objekte zu vergleichen Mit "==" boolean equals(Object o) Für primitive Variablen überprüft ==, ob die beiden Variablen den gleichen Wert haben Für Referenzen überprüft ==, ob zwei Referenzen auf dasselbe Objekt verweisen -Es werden die Referenzwerte (Speicheradressen) verglichen

21 Java-Intensivkurs WS07/08 Folie 21 Objektvergleiche boolean equals(Object o) Überprüft zwei verschiedene Objekte auf inhaltliche Gleichheit (Vergleicht die Objekte nicht die Referenzen) Die standardmäßige Implementierung von boolean equals(Object o) führ lediglich einen Referenzvergleich durch und ist somit äquivalent zu == boolean equals(Object o) sollte in der eigenen Klasse überschrieben werden //Standardimplementierung von equals(Object o) in der Klasse Object public boolean equals(Object o){ return this==o;}

22 Java-Intensivkurs WS07/08 Folie 22 HashCode Ein HashCode ist: Ein Integerwert Repräsentiert die Eindeutigkeit eines Objektes Zwei Objekte, die gemäß der equals()-Methoden gleich sind, müssen den gleichen HashCode haben Wird verwendet in den Collections (Datenstruktren), die hashbasiert sind

23 Java-Intensivkurs WS07/08 Folie 23 Math Enthält eine Sammlung von mathematischen Methoden und Kostanten Ist als final deklariert darf nicht abgeleitet werden Enthält nur einen privaten Konstruktor kann nicht instanziiert werden //Kompilierfehler: The constructor Math() is not visible Math math=new Math();

24 Java-Intensivkurs WS07/08 Folie 24 Math MethodeR ü ckgabe abs(int i)Absolutbetrag von i ceil(double d)Nächste Ganzzahl größer gleich i exp(double a)eaea floor(double d)Nächste Ganzzahl kleiner gleich i log(double a)ln(a) max(int i1, i2)Maximum der Zahlen i1 und i2 min(int i1, i2)Minimum der Zahlen i1 und i2 pow(double a, double b)abab random()Eine Zahl aus dem Intervall[0.0,1.0] sin(double d)Sinus-Funktion cos(double d)Kosinus-Funktion tan(double d)Tangens-Funktion round(double d)Rundet d zur nächsten Ganzzahl

25 Java-Intensivkurs WS07/08 Folie 25 String Eine Zeichenkette (String) in Java ist eine indizierte geordnete Folge von Unicode-Zeichen Indexierung beginnt bei 0 Strings sind unveränderbar (immutable) Strings ist final Ein String-Objekt kann entweder mit einem Konstruktor der Klasse String oder als String-Literal erstellt werden

26 Java-Intensivkurs WS07/08 Folie 26 String public static void stringCompare(){ String s1=new String("use the equals()-method to compare strings"); String s2=new String("use the equals()-method to compare strings"); String s3="use the equals()-method to compare strings";//String- Literal String s4="use the equals()-method to compare strings";//String- Literal boolean s1_s2 = false, s3_s4 = false s2_s3 = false; if(s1==s2) s1_s2=true; if(s3==s4) s3_s4=true; if(s2==s3) s2_s3=true; System.out.println(s1_s2+" "+s3_s4+" "+s2_s3); s2=s3; if(s2==s3) s2_s3=true; System.out.println(s2_s3); Ausgabe: false true false true

27 Java-Intensivkurs WS07/08 Folie 27 String int length(): Liefert die Länge der Zeichenkette zurück charAt(int index): Liefert das Zeichen an Position index zurück -index muss zwischen 0 und length()-1 liegen, sonst wird eine java.lang.StringIndexOutOfBoundsException geworfen substring(int begin, int end): Liefert den Teilstring zurück, der am Index begin beginnt und am Index end-1 einschließlich endet substring(int begin): Liefert den Teilstring von der angegebenen Position bis zum Ende des Strings zurück

28 Java-Intensivkurs WS07/08 Folie 28 String trim(): Liefert den String zurück, der entsteht, wenn alle Leerzeichen am Anfang und am Ende des Strings entfernt werden equalsIgnoreCase(): Vergleicht String miteinander ohne Groß-/Kleinschreibung zu beachten toLowerCase() Wandelt den String in Kleinbuchstaben um, liefert ihn zurück toUpperCase(): Wandelt den String in Großbuchstaben um, liefert ihn zurück

29 Java-Intensivkurs WS07/08 Folie 29 String replace(char oldChar, char newChar): Ersetzt alle vorkommen des Zeichens oldChar durch das Zeichen newChar:

30 Java-Intensivkurs WS07/08 Folie 30 Exceptions Ausnahmen (Exceptions) sind Java-Klassen zur Erkennung und Behandlung von Laufzeitfehlern Ein Laufzeitfehler ist ein Fehler, der während der Ausführung eines Programms auftritt und während des Kompiliervorganges nicht erkannt werden kann Ein Exception-Objekt repräsentiert einen Laufzeitfehler, der den normalen Ablauf des Programms stört oder gar beendet

31 Java-Intensivkurs WS07/08 Folie 31 Exceptions Drei Arten von Fehlern Vermeidbare Fehler (Bugs): Das sind Fehler, die durch den Programmierer verursacht werden und praktisch vermieden werden können -Division durch 0 -Zugriff auf einen ungültigen Arrayindex -Zugriff auf eine null-Referenz

32 Java-Intensivkurs WS07/08 Folie 32 Fehlerarten in Java Unvermeidbare Fehler: Ein Programm versucht auf einen Server zuzugreifen, der gerade ausgeschaltet ist Ein Programm versucht eine Datei zu öffnen, die beschädigt ist bzw. gelöscht wurde Ein Programm fordert den Benutzer auf eine Zahl einzugeben. Stattdessen gibt der Benutzer ein String ein

33 Java-Intensivkurs WS07/08 Folie 33 Fehlerarten in Java Systemfehler (System Errors): Das sind schwerwiegende nicht behebbare Fehler, nach deren Auftreten die Fortsetzung des Programms nicht sinnvoll bzw. gar nicht möglich ist Führen zu einem Programmabbruch und zur Beendigung des Interpreters -Beispiele: Speicherüberlauffehler (Memory Overflow), Fehler in der JVM

34 Java-Intensivkurs WS07/08 Folie 34 Fehlerbehandlung Zur Behandlung von Laufzeitfehlern stellt Java das Exception- Konzept zur Verfügung Wenn ein Programmteil (eine Methode oder Anweisung) einen Fehler verursacht, löst die JVM eine Ausnahme (throwing exception), die vom Programm abgefangen (catching exception) und behandelt (handling exception) werden kann Zur Behandlung einer Ausnahme übergibt die JVM an das Programm ein Exception-Objekt, das Informationen über den Fehler enthält wie z.B. Fehlerart, Fehlerbezeichnung Programmzustand zum Zeitpunkt des Auftreten des Fehlers …etc

35 Java-Intensivkurs WS07/08 Folie 35 Fehlerbehandlung //try to convert a string to a number convertStringToNubmer(String numberString){ try{ float number = Float.parseFloat(numberString); System.out.println("Converting "+numberString+ " to a number succeeded: "+number); }//Catching the exception catch (NumberFormatException exceptionObject){ //handling the exception System.out.println("Exception: Unable to convert " +numberString+" to a number!"); System.out.println(exceptionObject.getMessage()); System.out.println("Printing the stack trace..."); exceptionObject.printStackTrace();}} Die Behandlung von Ausnahmen erfolgt mittels der try-catch- Anweisung:

36 Java-Intensivkurs WS07/08 Folie 36 Fehlerbehandlung convertStringToNubmer("549.34"); Ausgabe: Converting to a number succeeded: convertStringToNubmer("549,34"); Ausgabe: Exception: Unable to convert 549,34 to a number! For input string: "549,34" Printing the stack trace... java.lang.NumberFormatException: For input string: "549,34" at sun.misc.FloatingDecimal.readJavaFormatString(Unknown Source) at java.lang.Float.parseFloat(Unknown Source) at exceptions.SimpleException.convertStringToNubmer(SimpleException.java: 25) at exceptions.SimpleException.main(SimpleException.java:39)

37 Java-Intensivkurs WS07/08 Folie 37 Throwable Die Vaterklasse aller Exceptions ist die Klasse java.lang.Throwable Zwei wichtige Methoden: getMessage() Wenn ein Laufzeitfehler auftritt, generiert die JVM ein Ausnahme-Objekt und speichert in ihm eine Textnachricht getMessage() gibt diese Nachricht zurück printStackTrace() liefert eine Art Momentaufnahme des Programmstacks (stack trace) zum Zeitpunkt des Auftretens des Fehlers in Form einer Textnachricht zurück

38 Java-Intensivkurs WS07/08 Folie 38 Ausnahmetypen Zwei Arten von Ausnahmen Geprüfte Ausnahmen (checked exceptions) Laufzeitausnahmen (runtime exceptions) Laufzeitausnahmen repräsentieren vermeidbare Fehler Beispiele: ArrayIndexOutOfBoundsException, NegativeArraySizeException, NullPointerException und StringIndexOutOfBoundsException int x=1/3; int y=2/x;//Division durch null --> // Laufzeitausnahme: ArithmeticException:/by zero

39 Java-Intensivkurs WS07/08 Folie 39 Ausnahmetypen Die geprüften Ausnahmen dagegen repräsentieren unvermeidbare Fehler und Systemfehler Beispiele FileNotFoundException und IOException public void printFile(String fileName){ //try to read and print the given file BufferedReader input = null; try { input = new BufferedReader( new FileReader(fileName) ); String line = null; while (( line = input.readLine()) != null){ System.out.println(line); } } catch (IOException ex){ ex.printStackTrace();}

40 Java-Intensivkurs WS07/08 Folie 40 Ausnahmetypen Alle aus der Klasse java.lang.RunTimeException abgeleiteten Exceptions sind Laufzeitausnahmen Laufzeitausnahmen können, jedoch müssen nicht abgefangen und behandelt werden try{ int x=1/3; int y=2/x } catch(ArithmeticException exceptionObject){// Catching the exception //handling the exception System.out.println("x ist 0. Division wurde nicht ausgeführt!"); }

41 Java-Intensivkurs WS07/08 Folie 41 Ausnahmetypen Alle aus der Klasse java.lang.Exception abgeleiteten Exceptions sind geprüfte Exceptions Geprüfte Ausnahmen dagegen müssen vom Programmierer mittels einer try-catch-Anweisung immer abgefangen und behandelt werden

42 Java-Intensivkurs WS07/08 Folie 42 Auslösen einer Exception Der Programmierer kann Methoden definieren, die selbst Ausnahmen auslösen: Eine Methode kann eine oder mehrere Ausnahmen werfen Dies erfolgt mithilfe der throws Anweisung public long factorial(int n) throws NegativeValueException { //if n<0 then throw an exception if(n<0) throw new NegativeValueException ("invalid parameter: "+n); //else return factorial(n) }

43 Java-Intensivkurs WS07/08 Folie 43 Behandeln einer Exception Da factorial() eine geprüfte Ausnahme wirft (siehe API- Dokumentation), muss jede andere Methode, die factorial() aufrufen will, dies innerhalb einer try-catch- Anweisung tun public long calculator(int n) { // the calculator method calls the factorial method try{ return factorial(n); } catch (Exception exceptionObject){ System.out.println("The input parameter of factorial "+ +"must be a positive number!"); }

44 Java-Intensivkurs WS07/08 Folie 44 Weitergabe von Exceptions Es ist auch möglich das Abfangen und die Behandlung einer Ausnahme an die aufrufende Methode weiterzugeben, wie das folgende Beispiel zeigt: public long calculator(int n) throws Exception { int x= n/2; return factorial(x); }

45 Java-Intensivkurs WS07/08 Folie 45 Behandlung von mehreren Ausnahmen public void printFile(String fileName){ //try to read and print the given file BufferedReader input = null; try { input = new BufferedReader( new FileReader(fileName) ); String line = null; while (( line = input.readLine()) != null){ System.out.println(line); } catch (FileNotFoundException ex) { ex.printStackTrace(); } catch (IOException ex){ ex.printStackTrace(); }

46 Java-Intensivkurs WS07/08 Folie 46 finally Am Ende einer try-catch-Anweisung kann ein finally- Block stehen Der fianlly-Block wird immer ausgeführt, unabhängig davon, ob eine Ausnahme aufgetreten ist oder nicht

47 Java-Intensivkurs WS07/08 Folie 47 finally public void finalyMethod(){ try{Random rand=new Random(); int x=rand.nextInt(6); System.out.println("x="+x); int y=2/x;//Division durch null -->ArithmeticException:/by 0 } catch (ArithmeticException arithmeticExceptionObject){ System.out.println("ArithmeticException..."); } finally{ System.out.println("Finally-Block"); }

48 Java-Intensivkurs WS07/08 Folie 48 Erstellung eigener Exception-Klassen Zur Erstellung einer eigenen Exception-Klasse, muss entschieden werden, ob die neue Ausnahme eine geprüfte oder eine Laufzeitausnahme sein soll Eine Laufzeitausnahme muss von der Klasse java.lang.RuntimeException oder von einer ihrer Unterklassen abgeleitet werden Eine geprüfte Ausnahme muss von der Klasse java.lang.Exception oder von einer ihrer Unterklassen abgeleitet werden Die Klasse soll zwei Konstruktoren deklarieren, einen parameterlosen Konstruktor und einen Konstruktor, der als Parameter eine Textnachricht (message) übergeben bekommt

49 Java-Intensivkurs WS07/08 Folie 49 Erstellung einer geprüften Exception /** * Checked exception used in the method factorial of the class * SimpleException * */ public class NegativeValueException extends Exception{ public NegativeValueException(){ } public NegativeValueException(String message){ super(message); }

50 Java-Intensivkurs WS07/08 Folie 50 Erstellung einer Laufzeit-Exception /** * Runtime exception used in the method auszahlen() of the class * exceptions.Bankkonto */ public class KreditLimitUeberschrittenException extends RuntimeException{ public KreditLimitUeberschrittenException(){ } public KreditLimitUeberschrittenException(String message){ super(message); }


Herunterladen ppt "Java-Intensivkurs WS07/08 Folie 1 Ashraf Abu Baker Johann Wolfgang Goethe-Universität Professur für Graphische Datenverarbeitung."

Ähnliche Präsentationen


Google-Anzeigen