Kapitel 01 Java -1- Startet Startet Schreibt Quellcode Programmierer Programmierer Anwender Funktionsweise von Java kom aus pilie gefü rt vo hrt v n on Speichert unter Erzeugt die Ausgabe Wird Erzeugt .class Datei Wird package kapitel01; public class Test{ public static void main(String[] args) { System.out.println("Hallo"); } } Java-Compiler Java Virtual Machine (JVM) -2- Test.java Test.class Hallo Compiler Test.java ist sy Test.java ntaktisch korre kt Test.class Java Compiler Test.java ist syn taktisch falsch Fehlermeldung mit nützlicher Information -3- Test.class Java Virtual Machine (JVM) JVM Führt das Programm aus -4- r ufzeitfe itfehle Kein La Laufz e hler Das Programm wird normal beendet Löst eine Ausnahme aus Kapitel 1 Mindmap Java wurde1995 von Sun Microsystems entwickelt Desktop-Anwendungen Webanwendungen Anwendungen für Mobiltelefone und kleine Geräte Prüft syntaktische Korrektheit Erzeugt Bytecode-Datei Führt Bytecode-Dateien aus Stellt Laufzeitfehler fest Instanzvariablen zum Speichern von Daten Klassenname Virtuelle Maschine für Java (JVM) Java Compiler Java Micro Edition ME Java Enterprise Edition EE Java Standard Edition SE Java ist eine objektorientierte Programmiersprache Mehrere Varianten Funktionsweise von Java Struktur einer Klasse Konstruktoren zum Erzeugen von Objekten Methoden zum Manipulieren der Daten -5- Kapitel 02 Ein Schnelleinstieg in Java -6- Mindmap Erstes Java Programm verstehen main -Methode und System.out.println Fehlender Strichpunkt Fehlendes Anführungszeichen Typische Fehler Umlaute und Sonderzeichen im Quelltext Öffnende Klammern nicht geschlossen Code außerhalb der Klasse Methode Mechanismus zum Verarbeiten der Daten Kapselt Daten und Methoden, die darauf operieren Objekt Wird als Instanz einer Klasse bezeichnet Variable Platzhalter: Speichert Daten eines bestimmten Typs Kapitel 2 Speichert eine Folge von Objekten des gleichen Typs Liste (ArrayList<T> ) public class MeineKlasse{…} Eigene Klassen definieren Konstruktor Zum Erzeugen von Objekten Ändern den Kontrollfluss des Programms Bedingungen und Schleifen if-then-else Anweisung for -, while -Schleifen Daten von der Konsole einlesen Vererbung Scanner s = new Scanner(System.in); String name = s.nextLine(); double preis = s.nextDouble(); Klasse A erbt von Klasse B -7- A verfügt über alle Variablen und Methoden von B Kapitel 03 Klassen und Objekten -8- Syntax von Methoden Zugriffsrechte/Sichtbarkeit Modifikatoren (optional) static Statische Methoden abstract Abstrakte Methoden Rückgabetyp (obligatorisch) void Primitiver Typ oder Klassentyp Aussagekräftiger Name Methodenname (obligatorisch) Syntax einer Methodendeklaration final Unveränderbare Methoden Oft Verb (+ Substantiv) In runde Klammern eingeschlossen Kann leer sein Parameterliste (obligatorisch) Runde Klammern dürfen nicht fehlen () Kann mehrere Parameter enthalten Durch Kommas getrennt ( Param1,..., Paramn) Folge von Anweisungen In geschweifte Klammern eingeschlossen { Anweisung1; Methodenrumpf ... Anweisungn; } Obligatorisch für konkrete Methoden, optional für abstrakte Methoden -9- Methode Liefert nichts zurück Liefert einen Wert vom Typ X zurück Methode, die einen Wert berechnet Validierungs-Methode Getter-Methode JUnit Test (vgl. 11.10) Methode, die den Objektzustand ändert Methode, die den Objektzustand ausdruckt Setter-Methode Rückgabewert von Methoden Rückgabetyp ist void Rückgabetyp ist X - 10 - Jedes Objekt hat Eindeutige Speicheradresse Eigenschaften von Objekten Identität Aktuelle Werte seiner Instanzvariablen Methoden des Objekts Zustand Verhalten - 11 - Konstruktor 1 public class Student { 2 private String name; 3 private String matrikelnummer; 4 private int semester; 5 6 // Konstruktor I 7 public Student(String name, String matrikelnummer, int semester) { 8 this.name = name; 9 this.matrikelnummer = matrikelnummer; 10 this.semester = semester; 11 } 12 13 // Konstruktor II 14 public Student(String name, String matrikelnummer) { 15 this(name, matrikelnummer, 1); 16 } 17 18 // Konstruktor III 17 public Student(String name) { 18 this(name, null, 0); 19 } 20 21 // Methode zum Drucken eines Studenten 22 public void printStudent(){ 23 System.out.println(“Student<name: “ + name 24 + “, matrikelnummer: “ + matrikelnummer 25 + “, semester: “ + semester + “>”); 26 } 27 28 public static void main(String[] args) { 29 Student obj1 = new Student("Sepp”); 30 Student obj2 = new Student("Anne", "67342"); 31 Student obj3 = new Student("Sara", "76345",5); 32 Student obj4 = new Student("Alex", "12345",1); 33 34 obj1.printStudent(); 35 obj2.printStudent(); 36 obj3.printStudent(); 37 obj4.printStudent(); 38 } 39 } - 12 - Konstruktor III obj1: Student this.name = “Seep” this.matrikelnummer = null; this.semester = 0 Konstruktor II obj2: Student this.name = “Anne” this.matrikelnummer = “67342” this.semester = 0 Konstruktor I obj3: Student this.name = “Sara” this.matrikelnummer = “76345” this.semester = 5 Konstruktor I obj4: Student this.name = “Alex” this.matrikelnummer = “12345” this.semester = semester = 1 Konstruktor Deklaration Aufruf Mindmap Konstruktor Modifikatoren Klassenname ( Parameterliste) { Anweisungen } public Student (String name) { this.name = name; } Klassenname obj = new Klassenname( Werte); Student s = new Student(“Sara”); - 13 - Mindmap Zugriffsrecht private Modifikator für Zugriffsrecht Sichtbarkeit: eigene Klasse Default (kein Modifikator) Sichtbarkeit: Klasse + Paket Sichtbarkeit: Klasse + Paket + Unterklassen protected public Überall sichtbar - 14 - Mindmap Legt Struktur von Objekten fest Klasse Bestimmt das Verhalten von Objekten Wird zum Erzeugen von Objekten verwendet Modifikator für Zugriffsrecht Primitiver Typ Typ Referenztyp Speichert Daten Modifikator Datentyp Variablenname; Deklaration private int alter; Variable Variablenname = Wert; Zuweisung alter = 25; Kapitel 3 Operiert auf Daten und modifiziert Objektzustände Modifikatoren Typ Methodenname ( Parameterliste) { Anweisungen Methode } Rückgabetyp: void Rückgabetyp: X Methode liefert nichts zurück Methode liefert einen Wert vom Typ X zurück Ist Instanz einer Klasse Identität Objekt Charakteristika Zustand Verhalten Konstruktor Regeln zum Klassendesign - 15 - Kapitel 04 Mehr zu Klassen und Objekten - 16 - Mindmap Software-Design Lebewesen (Person, Tier) Gegenstand (Speisekarte, Fahrzeug) Klasse identifizieren Organisation (Firma, Uni) Konzept (Name, Speisekarteneintrag) Klasse definieren public Klassenname { ... } String -Variablen für Namen, Zeichenketten Objekteigenschaften durch Instanzvariablen abbilden boolean -Variablen für Wahrheitswerte int - und double -Variablen für Zahlen SoftwareDesign Klassenname () { Anweisungen Default Konstruktor } Konstruktoren definieren Konstruktor(en) mit Parametern Schreibzugriff auf Instanzvariablen Verhalten durch Methoden abbilden Lesezugriff auf Instanzvariablen Klassenname ( Parameter) { Anweisungen } Setter-Methoden Getter-Methoden Business-Methoden und Programmlogik - 17 - Mindmap Sofwareentwurf groß Klasse: Student Klassen identifizieren und benennen Klasse: Pruefungsamt Name private Name name; Matrikelnummer Student private String matrikelnummer; Eigenschaften festlegen Semesteranzahl private int semester; Studenten Prüfungsamt Software für Prüfungsamt entwerfen Default Konstrukturen definieren Mit Parametern Methoden definieren private ArrayList<Student> studenten; public Pruefungsamt () { ... } public Student (...) { ... } Getter-Methoden public String getName () { return name; } Setter-Methoden public void setName (String name) { this.name = name; } BusinessMethoden - 18 - public boolean wechsleStudienfach (...){ ... } Software für Prüfungsamt entwerfen Name name; Mindmap Softwareentwurf klein Klasse: Student } } Student (...) { ... Pruefungsamt () { ... Studenten Semesteranzahl Matrikelnummer Name Klasse: Pruefungsamt Student Prüfungsamt Default } } Student findeStudent (...){ ... void setName (String name) { this.name = name; } String getName () { return name; Mit Parametern Setter Getter Klassen identifizieren und benennen Eigenschaften festlegen Konstrukturen definieren Methoden definieren BusinessMethoden - 19 - Kapitel 4 Statische Variablen Statische Methoden Rekursive Methoden Software-Design Mindmap Existieren unabhängig von den Instanzen der Klasse Zählen von Instanzen Modifikatoren static Typ Variablenname; Beispiel für Verwendung Können ohne Instanz der Klasse ausgeführt werden static Typ Methodenname ( Parameterliste) { Anweisungen } Lese-/Schreibzugriff auf statische Variablen Hilfsmethoden Eine Methode ruft sich selber auf Typischer Einsatz Direkt Methode a ruft Methode b auf und b ruft a auf. Mathematische Funktionen Indirekt - 20 - Kapitel 05 Primitive Typen - 21 - Mindmap byte short Ganze Zahlen int Zahlen long Primitive Datentypen float Gleitkommazahlen double char Zeichen Unicode boolean Wahrheitswerte Casting Typumwandlung Boxing und Unboxing +, -, *, /, % Kapitel 5 Präfix Arithmetische Operationen ++ , -Postfix ==, != Für alle Werte Vergleichsoperationen <, <=, >, >= Für Zahlen Für Boole’sche Werte Logische Operationen &, |, ! Strikt Nicht Strikt &&, || &, |, ^, ~ Bitweise Operationen << , >> , >>> Priorität Auswertung von Operationen Assoziativität Beeinflussung durch Klammern - 22 - Kapitel 06 Referenztypen - 23 - Mindmap Eindimensionale Arrays Folge von Elementen gleichen Typs Typ[] name; Deklaration int[] a; Typ[] name = {Wert 0, …, Wert n-1}; Deklaration und Initialisierung int[] a = {1, 3, 7}; new Typ[Länge] Erzeugung a = new int[3]; Eindimensionales Array name[Index] = Wert; Zuweisung an Element a[0] = 5; a[1] = 34; For-each Schleife for (int i : a) { ... } Iteration for -Schleife for (int i=0; i<a.length; i++){ ... a[i] ... } - 24 - Mehrdimensionales Array Array von Arrays Deklaration Deklaration und Initialisierung Erzeugung Mindmap Mehrdimensionale Arrays Typ[][] name; int[][] a; Typ[][] = {{ Wert 0,0, ..., Wert 0,m-1}, ... { Wert k,0, ..., Wert k,n-1}}; int[][] a = {{1},{1,2},{1,2,3}} new Typ[Länge 1 ][Länge 2 ] } for(int[] is : a) { for(int j : is) { ... j ... a[2][1] = 15; name[ index1 ][ index2 ] = Wert; a = new int[6][3]; Zuweisung an Element Iteration: geschachtelte Schleifen } - 25 - Mindmap groß Folge von Elementen gleichen Typs Typ[] name; Deklaration int[] a; Typ[] name = { Wert 0, …, Wert n-1}; Deklaration und Initialisierung int[] a = {1, 3, 7}; new Typ[ Länge] Erzeugung a = new int[5]; Eindimensional name[ Index] = Wert; Zuweisung an Element a[0] = 5; a[1] = 34; for (int i : a) { ... } For-each Schleife Iteration for (int i=0; i<a.length; i++){ ... a[i] ... } For-Schleife Array Ein Array von Arrays Typ[][] name; Deklaration int[][] a; Kapitel 6 Typ[][] = {{ Wert 0,0, …, Wert 0,m-1}, ... { Wert k,0, …, Wert k,n-1}}; Deklaration und Initialisierung int[][] a = {{1},{1,2},{1,2,3}} Mehrdimensional new Typ[ Länge1][ Länge2] Erzeugung a = new int[6][3]; name[ Index1][ index2]= Wert; Zuweisung an Element a[2][1] = 15; Iteration: geschachtelte Schleifen for(int i=0; i<a.length; i++){ for(int j=0; j<a[i].length; j++) { ... a[i][j] ... } } Aufzählungstyp, fasst mehrere Konstanten zusammen. enum Enumname { Konstante1, …, Konstanten } Enum Deklaration public enum Richtung {NORD, SUED, OST, WEST} Vordifinierte Javaklasse für Zeichenketten + String Wichtige Operationen equals - 26 - Kapitel 6 Array Enum String Eindimensional Mehrdimensional Aufzählungstyp } Mindmap Konstanten ... enum Enumname { Konstante1, Fasst mehrere Konstanten zusammen Deklaration public enum Richtung { NORD, SUED, OST, WEST } equals + Vordefinierte Javaklasse für Zeichenketten Wichtige Operationen substring - 27 - Kapitel 07 Kontrollfluss - 28 - Mindmap groß Fasst mehrere Anweisungen zusammen Block { ... } { Anweisung1; ...; Anweisungn } if ( Bedingung) Bedingung == true Block1 else Block1 wird ausgeführt Bedingung == false Block2 Block2 wird ausgeführt if ( Bedingung1) Block1 if /else Es wird nur der erste Block ausgeführt, dessen Bedingung true ergibt else if ( Bedingung2) Block2 ... else if ( Bedingungn) Geschachtelt Wenn alle Bedingungen false ergeben, wird Blockn+1 ausgeführt Blockn else Blockn+1 Variable hat Typ byte , short , int , char oder String switch ( Variable) { case m: Anweisungenm; break; case n: Anweisungenn; break; ... default: Anweisungendef; } switch /case Wert von Variable Anweisungenm werden ausgeführt n Anweisungenn werden ausgeführt Die entsprechenden Anweisungen werden ausgeführt ... anderer Wert Kapitel 7 while ( Bedingung) Block; while m Anweisungendef werden ausgeführt Bedingung wird vor der Ausführung von Block überprüft Block wird ausgeführt, so lange Bedingung wahr ist Init wird zuerst ausgeführt for ( Init; Bedingung; Update) for Bedingung wird getestet bevor Block ausgeführt wird Block; Wenn Bedingung wahr ist werden Block und Update ausgeführt; Bedingung wird wieder getestet Schleifen Zur Iteration über Arrays und Collections for ( Typ Element : Collection) Block; for-each Block wird ausgeführt, dann wird Bedingung getestet do do-while Element durchläuft die Elemente von Collection Block while ( Bedingung); Block wird ausgeführt, so lange Bedingung wahr ist Kann nur In Schleifen und switch /case -Anweisungen verwendet werden break Bricht die Schleife/Anweisung ab Steueranweisung Kann nur in Schleifen verwendet werden continue Startet den nächsten Durchlauf der Schleife - 29 - Mindmap Bedingungen if ( Bedingung) Block1 else Block2 Einfach Bedingung == true : Block1 wird ausgeführt Bedingung == false : Block2 wird ausgeführt if ( Bedingung1) Block1 if/ then/ else else if ( Bedingung2) Block2 ... else if ( Bedingungn) Blockn else Blockn+1 Geschachtelt Es wird nur der erste Block ausgeführt, dessen Bedingung true ergibt Wenn alle Bedingungen false ergeben, wird Blockn+1 ausgeführt Bedingte Anweisung switch ( Variable) { case m: Anweisungenm; break; case n: Anweisungenn; break; ... default: Anweisungendef; } Variable hat Typ byte , short , int , char oder String switch/ case Wert von Variable m Anweisungenm werden ausgeführt n Anweisungenn werden ausgeführt ... Anderer Wert - 30 - Die entsprechenden Anweisungen werden ausgeführt Anweisungendef werden ausgeführt Schleifen while for for-each do/while while ( Bedingung) Block; Mindmap Schleifen Bedingung wird vor der Ausführung von Block überprüft Block wird ausgeführt, so lange Bedingung wahr ist for ( Init; Bedingung; Update) Block; Init wird zuerst ausgeführt Bedingung wird getestet, bevor Block ausgeführt wird Wenn Bedingung wahr ist, werden Block und Update ausgeführt; Bedingung wird wieder getestet for ( Typ Element : Collection) Block; Zur Iteration über Arrays und Collections Block Element durchläuft die Elemente von Collection do while ( Bedingung); Block wird ausgeführt, dann wird Bedingung getestet Block wird ausgeführt, so lange Bedingung wahr ist - 31 - Kapitel 7 Block { ... } Mindmap Fasst mehrere Anweisungen zusammen { Anweisung1; ...; Anweisungn } if/then/else Kann nur in Schleifen verwendet werden Bricht die Schleife/ Anweisung ab Kann nur In Schleifen und switch /case -Anweisungen verwendet werden switch/case break do-while for-each for while Bedingte Anweisung Schleife Steueranweisung continue Startet den nächsten Durchlauf der Schleife - 32 - Kapitel 08 Vererbung - 33 - Die Klasse Object hashCode equals Oberklasse aller Klassen Methoden von Object toString Mindmap Object “Semantischer” Vergleich Implementierung für eigene Klassen int -Wert für Objekt Wird equals überschrieben, so muss hashCode überschrieben werden. Ist x.equals(y) wahr, so müssen x und y den gleichen Hash-Wert haben Wandelt Objekte in Strings um Wird von System.out.println verwendet - 34 - Mindmap A übernimmt alle Instanzvariablen und Methoden von B A kann weitere Instanzvariablen und Methoden enthalten A kann Methoden von B überschreiben Klasse A erbt von B A: Unterklasse, Subklasse, Kindklasse Bezeichnungen B: Superklasse, Oberklasse, Elternklasse Syntax class A extends B { ... } Schlüsselwort Kapitel 8 In Methoden und Konstruktoren super In Konstruktoren Polymorphie Aufruf von Methoden der Oberklasse Zugriff auf Instanzvariablen der Oberklasse Aufruf eines Konstruktors der Oberklasse Variablen können Instanzen von Subklassen ihres statischen Typs speichern Welche Methode aufgerufen wird, wird zur Laufzeit bestimmt Dynamisches Binden Methodenname Auswahl der Methode Anzahl und statische Typen der Argumente Dynamischer Typ von this Die Klasse Object - 35 - Kapitel 09 Generische Typen und Interface - 36 - Mindmap groß class Klassenname < T1, ..., Tn> { ... } Generische Klasse public class Paar<T1,T2> { T1 erstesElement; ... } Eine Klasse, von der keine direkten Instanzen erzeugt werden können. abstract Klassenname { ... } Abstraktion Anwendung Superklasse für konkrete Klassen Abstrakte Klasse Wiederverwendung Polymorphismus Ist eine Methode abstrakt so muss die Klasse abstrakt sein. Regeln Eine abstrakte Klasse darf Konstruktoren und sowohl konkrete als auch abstrakte Methoden haben Konkrete Subklassen einer abstrakten Klasse müssen alle abstrakten Methoden implementieren Darf nur Konstanten und abstrakte Methoden enthalten Kapitel 9 interface interfacename { ... } Wie abstrakte Klasse Anwendung Schnittstelle in Client/Server-Anwendungen Interface Mehrfachvererbung: eine Klasse kann mehrere Interfaces implementieren Abstrakte Klassen dürfen abstrakte Methoden von Interfaces erben, ohne sie zu implementieren Regeln Eine konkrete Klasse, die ein Interface implementiert muss alle Methoden des Interface implementieren Geschachtelte Klasse Wird in einer anderen Klasse definiert Hat Zugriff auf private Elemente der sie umschließenden Klasse Wird innerhalb eines Code-Blocks deklariert Deklaration und Erzeugen einer Instanz im gleichen Ausdruck Anonyme Klasse Comparator<Person> c = new Comparator<Person>() { @Override public int compare(Person p1, Person p2) { ... } }; - 37 - Generische Klasse Mindmap Generische Klasse Klasse, die durch Typparameter spezialisiert werden kann class Klassenname < T1, ..., Tn> { ... } public class Paar<T1,T2> { T1 erstesElement; T2 zweitesElement; ... } Paar<String, Object> p1 = new Paar<String, Object>(); Seit Java 7 auch: Paar<String, Object> p2 = new Paar<>(); - 38 - Abstrakte Klasse Mindmap Abstrakte Klasse Eine Klasse, von der keine direkten Instanzen erzeugt werden können Abstraktion Wiederverwendung Polymorphie Ist eine Methode abstrakt, so muss die Klasse abstrakt sein Eine abstrakte Klasse darf Konstruktoren und sowohl konkrete als auch abstrakte Methoden besitzen Superklasse für konkrete Klassen abstract Klassenname { ... } Anwendung Regeln Konkrete Subklassen einer abstrakten Klasse müssen alle abstrakten Methoden implementieren - 39 - Interface Mindmap Interface Darf nur Konstanten und abstrakte Methoden enthalten Abstrakte Klassen dürfen abstrakte Methoden von Interfaces erben, ohne sie zu implementieren Mehrfachvererbung: Eine Klasse kann mehrere Interfaces implementieren Schnittstelle in Client/Server-Anwendungen Wie abstrakte Klasse interface Interfacename { ... } Anwendung Regeln Eine konkrete Klasse, die ein Interface implementiert, muss alle Methoden des Interface implementieren - 40 - Geschachtelte Klasse Mindmap Geschachtelte Klasse Wird in einer anderen Klasse definiert Deklaration und Erzeugen einer Instanz im gleichen Ausdruck Wird innerhalb eines Code-Blocks deklariert Hat Zugriff auf private Elemente der sie umschließenden Klasse Anonyme Klasse } Comparator<A> c = new Comparator<A>() { @Override public int compare(A a1, A a2) { ... }; - 41 - Mindmap Generische Klasse Abstrakte Klasse Kapitel 9 Interface Geschachtelte Klasse - 42 - Anonyme Klasse Kapitel 10 Das Java Collections Framework - 43 - Mindmap Iterable<E> Collection<E> Map<K,V> Wichtige Interfaces Iterator<E> RandomAccess Zum Durchlaufen einer Collection Iterator<E> next() Liefert das aktuelle Element des Iterators; setzt das nächste Element als neues aktuelles Element hasNext() Liefert true , solange der Iterator nicht am Ende der Collection ist Eine Folge von Elementen vom Typ E Implementiert Collection<E> Aggregattyp Geordnet, ungeordnet isEmpty, size Kapitel 10 Wichtige Methoden Collection<E> contains, containsAll iterator LinkedList<E> ArrayList<E> Wichtige Implementierungen ArrayDeque<E> HashSet<E> TreeSet<E> Abbildung von K nach V (Wörterbuch) TreeMap<K,V> Map<K, V> Wichtige Implementierungen HashMap<K,V> LinkedHashMap<K,V> WeakHashMap<K,V> - 44 - Kapitel 11 Ausnahmebehandlung - 45 - Mindmap Exceptions Error Java Exception-Hierarchie Throwable Exception Erben von Error oder RuntimeException ClassCastException Unchecked Exceptions Beispiele NullPointerException IndexOutOfBoundsException Können oft vermieden werden Checked Exceptions Erben nicht von Error oder RuntimeException Müssen in Signatur von Methoden angegeben werden Exceptions throw Exception-Instanz; Auslösen von Exceptions Exception ex = new Exception(“Fehler!”); throw ex; throw new Exception(“Fehler!”); try { ... } catch ( ExceptionTyp1 ex) { ... } ... catch ( ExceptionTypn ex) { ... } finally { ... } Behandeln von Exceptions Erbt indirekt von Throwable Benutzerdefinierte Exception-Klassen Zwei Konstruktoren - 46 - Default Mit String-Parameter Kapitel 11 Fehlerarten Benutzerfehler Gerätefehler Mindmap Mangelnde Ressourcen Softwarefehler Test-Methoden durch die @Test -Annotation markieren Testklasse definieren assert Zusicherung : Fehlermeldung; Angabe der Fehlermeldung assert Zusicherung; Ist die Zusicherung falsch, wird eine Exception geworfen Überprüfen eine Zusicherung vom Typ boolean Ausnahmebehandlung Assertions JUnit Test Eine Instanz der zu testenden Klasse erzeugen und Ist/Soll-Vergleich mit JUnit-Methoden durchführen - 47 -