O'Reilly logo

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Java – Der umfassende Programmierkurs

Book Description

Verständlich, anschaulich, detailliert und nützlich - mit diesem Anspruch tritt das erfolgreiche Autorenteam Louis/Müller an, Einsteigern Java umfassend zu vermitteln. Die Autoren wissen, was Programmiereinsteiger wirklich brauchen: gut nachvollziehbare Erklärungen, ausführbare Codebeispiele, viele Übungen mit Lösungen, interessante Workshops und den Praxisbezug. Java - Der umfassende Programmierkurs vermittelt Ihnen Schritt für Schritt die grundlegenden Prinzipien der objektorientierten Programmierung. Darüber hinaus beschreibt das Buch aber auch alle wichtigen Aspekte und Möglichkeiten der Sprache Java und der Java-Klassenbibliothek und eignet sich daher auch als Nachschlagewerk für die tägliche Arbeit. Alle Neuerungen der Version Java 8 sind ebenfalls berücksichtigt. Als Bonuskapitel enthält das Buch eine Einführung in die Erstellung von Apps für Android-Smartphones.

Table of Contents

  1. Cover
  2. Titel
  3. Impressum
  4. Inhalt
  5. Einleitung
    1. An wen sich dieses Buch richtet
    2. Neuerungen in Java 8
    3. Aufbau dieses Buchs
      1. Allgemeine Konzeption
      2. Verwendung als Lehrbuch
      3. Verwendung als Nachschlagewerk
    4. Typografische Konventionen
    5. Verwendung der Codebeispiele
    6. Website zum Buch
      1. Buchergänzungen und Lösungen als Download
    7. Kontakt
  6. Teil I Einstieg
    1. Kapitel 1 Java war früher eine Eiche
      1. Das Green-Projekt und die Sprache Oak
      2. Aus Oak wird Java
      3. Java und Bill Gates
      4. C# und .NET
      5. Jüngste Entwicklung, Oracle und OpenJDK
    2. Kapitel 2 Einführung für Programmieranfänger
      1. Die Ansprüche sind gestiegen
      2. Vom Maschinencode zu den höheren Programmiersprachen
        1. Assembler
        2. Das Variablenkonzept
        3. Die höheren Programmiersprachen
        4. Kontrollstrukturen
          1. Die bedingte Ausführung
          2. Die Verzweigung
          3. Die Schleife
      3. Die strukturierte Programmierung
        1. Typisierung
          1. Typisierte Variablen
          2. Positive Folgen der Typisierung
          3. »Negative« Folgen der Typisierung
          4. Typumwandlungen
        2. Funktionen
          1. Definition und Aufruf
          2. Bibliotheken
      4. Die objektorientierte Programmierung
        1. Selbst definierte Datentypen
          1. 1. Stufe
          2. 2. Stufe
          3. 3. Stufe – die Klassendefinition
        2. Objektorientierte Problemlösung
        3. Objektorientierte Programmierung in Java
      5. Noch Fragen?
    3. Kapitel 3 Das erste Programm
      1. Programmerstellung in Java
        1. Portierbarkeit und Robustheit
          1. Plattformunabhängigkeit durch Interpretation
          2. Die Java-Standardbibliothek
          3. Robustheit
          4. Die Java-Laufzeitumgebung
        2. Effizienz und Schutz geistigen Eigentums
        3. Das Java-Modell und die Virtual Machine
      2. Installation des JDK
        1. Installation
          1. Windows
          2. Linux
          3. Deinstallation
        2. Anpassen des Systems
          1. Erweiterung des Systempfads
          2. Bei Problemen: Klassenpfad überprüfen
        3. Die Java-Dokumentation
        4. Wo Sie weitere Hilfe finden
      3. Welche Art Programm darf es sein?
      4. Konsolenanwendungen
        1. Ein einfaches Konsolengrundgerüst
          1. Kommentare
        2. Konsolenanwendungen erstellen und ausführen
      5. Klassen, Pakete und die Standardbibliothek
        1. Pakete
    4. Kapitel 4 Java-Stilkonventionen
      1. Bezeichner
      2. Blöcke
      3. Kommentare
      4. Sonstiges
    5. Kapitel 5 Workshop: Programmierwerkzeuge
      1. Lernen Sie Ihre Programmierwerkzeuge kennen
        1. Übung macht den Meister
        2. Der Compiler meckert
        3. Programme aus mehreren Quelldateien
        4. Quelltextpflege
  7. Teil II Java-Grundlagen
    1. Kapitel 6 Variablen
      1. Definition
        1. Die Bedeutung des Datentyps
        2. Vereinfachte Definition
        3. Regeln für die Namensgebung
        4. Initialisierung
      2. Verwendung
        1. Werte zuweisen
        2. Werte abfragen
      3. Gültigkeitsbereiche
      4. Literale und Konstanten
        1. Literale
        2. Symbolische Konstanten – konstante Variablen
      5. Ein- und Ausgabe
        1. Ausgabe
          1. System.out.println()
          2. System.out.printf()
          3. Console und printf()
          4. Unsere Empfehlung
        2. Eingabe
          1. Console und readLine()
          2. BufferedReader
          3. Scanner
          4. Unsere Empfehlung
      6. Übungen
    2. Kapitel 7 Datentypen
      1. Die elementaren Datentypen
        1. Integer-Typen
        2. Gleitkommatypen
        3. Zeichen
          1. Zeichentypen sind integrale Typen
          2. Escape-Sequenzen
          3. Unicode-Zeichen eingeben
        4. Boolesche Typen
          1. Steckbrief
      2. Die komplexen Datentypen
        1. Objektorientierte Programmierung in Java
        2. Wie sind OOP-Objekte beschaffen?
        3. Objekte und Klassen
          1. Die Klassendefinition
          2. Klassen und Objekte
        4. Die Objekterzeugung
          1. Klassen sind Referenztypen
          2. Der Konstruktor
          3. Programmieren mit Objekten
          4. Strings und andere vordefinierten Klassen
      3. Die Klasse String
      4. Typumwandlung
        1. Automatische oder implizite (»Widening«) Typumwandlungen
          1. Implizite Typumwandlungen für Referenztypen
        2. Explizite (»Narrowing«) Typumwandlungen
          1. Explizite Typumwandlungen für Referenztypen
      5. Wrapper-Klassen
        1. Nützliche Klassenelemente
        2. Autoboxing
      6. Übungen
    3. Kapitel 8 Operatoren und Ausdrücke
      1. Allgemeines
        1. Unär, binär, ternär
        2. Binäre numerische Promotionen
        3. Ausdrücke
        4. Anweisungen
          1. Die leere Anweisung;
      2. Operationen auf allen Datentypen
        1. Der Zuweisungsoperator =
          1. L- und R-Werte
        2. Die Gleichheitsoperatoren == und !=
        3. Der Typumwandlungsoperator (typ)
      3. Operationen auf numerischen Datentypen
        1. Vorzeichen
        2. Die arithmetischen Operatoren
          1. Division
          2. Modulo
        3. Inkrement und Dekrement
          1. Präfix- und Postfix-Notationen
        4. Die Bitoperatoren
          1. bitweises UND: &
          2. bitweises ODER: |
          3. bitweises XOR: ^
          4. bitweises Komplement: ~
          5. Linksverschiebung: <<
          6. Rechtsverschiebung: >>
          7. Rechtsverschiebung ohne Erhalt des Vorzeichens: >>>
        5. Die kombinierten Zuweisungen
        6. Die Vergleichsoperatoren
        7. Die Klasse Math
          1. Verwendung
        8. Zufallszahlen
          1. Math.random()
          2. java.util.Random
          3. Angepasste Zufallszahlen
      4. Operationen auf booleschen Typen
        1. Die logischen Operatoren
      5. Operationen auf Strings
        1. Der Konkatenationsoperator
        2. Die Klasse String
          1. Konstruktoren
          2. Methoden
      6. Operationen auf Referenztypen
        1. Die Basisklasse Object
          1. Die Methoden von Object
      7. Sonstige Operatoren
      8. Reihenfolge der Ausdrucksauswertung
        1. Priorität
        2. Klammerung
        3. Operandenauswertung
        4. Prioritätentabelle der Operatoren
      9. Nebeneffekte
      10. Übungen
    4. Kapitel 9 Kontrollstrukturen
      1. Entscheidungen und Bedingungen
        1. Bedingungen
        2. Die Vergleichsoperatoren
        3. String-Vergleiche
          1. boolean isEmpty()
          2. boolean equals(Object obj)
          3. boolean equalsIgnoreCase(String str)
          4. boolean contentEquals(StringBuffer str)
          5. int compareTo(Object obj) int compareTo(String str) int compareToIgnoreCase (String str)
        4. Die logischen Operatoren
          1. &&, & – logisches UND
          2. ||, | – logisches ODER
          3. ^ – logisches XOR
          4. ! – logisches NICHT
      2. Verzweigungen
        1. Die einfache if-Anweisung
        2. Die if-else-Verzweigung
          1. Verschachtelung
        3. Der Bedingungsoperator ?:
        4. Die switch-Verzweigung
          1. Menüs für Konsolenanwendungen
          2. case-Marken ohne break-Anweisung
      3. Schleifen
        1. Die while-Schleife
          1. Verwendung der Schleifenvariablen im Anweisungsblock
        2. Die do-while-Schleife
        3. Die for-Schleife
          1. Schleifenvariable in Schleifenkopf definieren
          2. Die for-Schleife für Arrays und Collections
        4. Endlosschleifen
        5. Schleifen mit mehreren Schleifenvariablen
          1. Schleifen mit mehreren Schleifenvariablen
        6. Performancetipps
      4. Sprunganweisungen
        1. Abbruchbefehle für Verzweigungen
        2. Abbruchbefehle für Schleifen
          1. Gewollte Endlosschleifen
        3. Abbruchbefehle mit Sprungmarken
          1. No goto
      5. Fallstricke
        1. Die leere Anweisung;
          1. Leere Schleifen
          2. Reduzierte for-Schleifen
          3. Vorsicht, Semikolon
        2. Nebeneffekte in booleschen Ausdrücken
        3. Warteschleifen (?)
      6. Übungen
    5. Kapitel 10 Workshop: Mastermind
      1. Eine Mastermind-Adaption
        1. Die Spielidee
        2. Erste Version
        3. Zweite Version
        4. Dritte Version
        5. Vierte Version
          1. Zufällige Kombinationen
          2. Testen und debuggen
  8. Teil III Objektorientierte Programmierung
    1. Kapitel 11 Klassen und Objekte
      1. Die Klassendefinition
        1. Syntax
          1. Die Klassenelemente
          2. Die optionalen Angaben
        2. Instanzbildung
        3. Mit Objekten programmieren
          1. Die null-Referenz
      2. Felder
        1. Initialisierung
        2. Objektvariablen als Felder
        3. Konstante Felder
          1. Static final-Konstanten
        4. Statische Felder
        5. Instanzvariablen und Klassenvariablen
      3. Methoden
        1. Methodendefinition
          1. Implementierung und Aufruf
        2. Datenverarbeitung und Datenaustausch
        3. Parameter
          1. Methodenaufruf
          2. Vorgang der Parameterübergabe
          3. Übergabe von Wert- und Referenztypen
          4. Übergabeverhalten ändern
        4. Rückgabewert
          1. Methoden vorzeitig beenden
        5. this
          1. this verwenden
        6. Statische Methoden
          1. Statische Methoden und private Konstruktoren
        7. Überladung
          1. Warum Überladung?
          2. Überladene Methoden aufeinander zurückführen
        8. Methoden mit variabler Anzahl Argumente
          1. Der Trick
          2. Die ...-Syntax
      4. Der Konstruktor
        1. Klassen ohne selbst definierten Konstruktor
        2. Der Standardkonstruktor
      5. Zugriffsspezifizierer
        1. Zugriffsspezifizierer für Klassen
        2. Zugriffsspezifizierer für Klassenelemente
      6. Klassendesign
        1. Was ist eine »gute« Klasse?
        2. Auswahl der Klassenelemente
        3. Zugriffsrechte und öffentliche Schnittstelle
          1. Die Klasse als Black Box
          2. Information Hiding
          3. Einfachheit
          4. Sicherheit
          5. get-/set-Methoden
          6. Die öffentliche Schnittstelle
        4. Einsatz des Konstruktors
        5. Objektauflösung
          1. Speicherbereinigung
          2. finalize()
          3. Eigene Aufräummethoden
        6. Einsatz von Methoden
          1. Nur-lesen- und Nur-schreiben-Felder
        7. Klassen als Methodensammlungen
          1. Instanzbildung verhindern
          2. Factory-Methoden
        8. Klassenerzeugung und statischer Klassencode
      7. Übungen
    2. Kapitel 12 Arrays und Aufzählungen (enum)
      1. Definition und Erzeugung
        1. Variablendefinition
        2. Array-Erzeugung
          1. Größenangaben (Länge)
          2. Initialisierungslisten
          3. Arrays von Objekten
      2. Auf Array-Elemente zugreifen
        1. Der indizierte Zugriff
        2. Arrays in Schleifen durchlaufen
          1. length
          2. Programmbeispiel
      3. Programmieren mit Arrays
        1. Array-Länge bestimmen
        2. java.util.Arrays
          1. Arrays in Strings umwandeln
          2. Füllen, Setzen, Löschen – mit fill(typ[] feld, typ wert)
          3. Arrays kopieren und vergrößern
          4. Vergleichen – mit equals(typ[] feld1, typ[] feld2)
          5. Sortieren – mit sort(typ[] feld)
          6. Suchen
        3. Arrays als Parameter
        4. Befehlszeilenargumente
      4. Mehrdimensionale Arrays
        1. Definition und Objekterzeugung
          1. Zugriff
          2. Initialisierungslisten
        2. Speicherbelegung
        3. Vorteile und Anwendung
        4. Dynamisch erzeugte Unterarrays variabler Länge
      5. Aufzählungen (enum)
        1. Definition und Verwendung
          1. Variablen definieren
          2. Aufzählungskonstanten vergleichen
          3. Aufzählungen und switch
          4. Aufzählungen und for
          5. Methoden für Aufzählungstypen
        2. Eigene enum-Klassen
      6. Übungen
    3. Kapitel 13 Pakete, Gültigkeitsbereiche und andere Fragen
      1. Pakete
        1. Klassen aus anderen Paketen verwenden
          1. Pakete importieren
        2. Statische Elemente aus anderen Paketen verwenden
          1. Statische Konstanten
        3. Klassen einem Paket zuordnen
          1. Pakete erzeugen
          2. Das unnamed-Paket
        4. Pakete auf der Festplatte
        5. Pakete kompilieren
      2. Gültigkeitsbereiche und Lebensdauer
        1. Gültigkeitsbereiche
          1. Lokale Variablen
          2. Parameter
          3. Felder
          4. Array-Elemente
        2. Redefinition
        3. Verdeckung
          1. Auflösung der Verdeckung (nur für Felder)
        4. Lebensdauer von Variablen
          1. Lokale Variablen
          2. Parameter
          3. Instanzvariablen
          4. Klassenvariablen
          5. Array-Elemente
        5. Lebensdauer von Objekten
          1. Heap und Speicherbereinigung
          2. Referenztypen versus Werttypen
        6. Übersicht über die Variablen
      3. Blöcke, lokale Variablen und »Definitive Assignment«
        1. Das Problem
        2. Definitive Assignment
        3. Lokale Variablen in switch-Anweisungen
      4. Innere Klassen
        1. Instanziierung innerer Klassen von außen
        2. Statische innere Klassen
        3. Lokale Klassen
        4. Anonyme Klassen
      5. Repräsentation von Daten
        1. Besonderheiten der komplexen Datentypen
        2. Besonderheiten der Integer-Typen
          1. Binär-, Oktal- und Hexadezimalzahlen
          2. Über- und Unterlauf
        3. Besonderheiten von Gleitkommatypen
          1. Null, NaN und die Unendlichkeit
          2. Signifikante Stellen und Genauigkeit
          3. Rundungsfehler im Binärsystem
        4. Über- und Unterlauf
          1. Integer-Promotion als Retter in der Not
          2. Überläufe können Fehlermeldungen provozieren
          3. Unerkannte Fehler
        5. cos(90 Grad) ist nicht gleich 0
          1. Rundungsfehler in Gleitkommavergleichen
          2. Achtung, mathematische Funktionen!
          3. FP-Strict – strictfp
      6. Speicherbereiche
        1. Methoden und Programmablauf
        2. Der Stack
      7. Übungen
    4. Kapitel 14 Workshop: Mastermind-Verbesserung
      1. Codeverbesserung durch Reorganisation
        1. Fünfte Version
        2. Sechste Version
        3. Siebte Version
  9. Teil IV Fortgeschrittene objektorientierte Programmierung
    1. Kapitel 15 Vererbung und Komposition
      1. Das Prinzip der Vererbung
        1. Der grundlegende Mechanismus
        2. Der Sinn der Vererbung
        3. Einige wichtige Fakten
      2. Wie greift man auf geerbte Elemente zu?
        1. Geerbte Elemente bilden Unterobjekte
          1. Warum bilden die geerbten Elemente Unterobjekte?
        2. Vier Zugriffsebenen
          1. public, Standard und private
          2. protected
      3. Wie initialisiert man geerbte Elemente?
        1. Konstruktor und Basisklassenkonstruktor
        2. Expliziter Aufruf eines Basisklassenkonstruktors
          1. Weiterreichung von Argumenten an Basisklassenkonstruktoren
          2. Auswahl eines Basisklassenkonstruktors
      4. Verdecken, überschreiben und überladen
        1. Verdeckung
          1. Verdeckung und geerbte Methoden
          2. Zugriff auf verdeckte Felder
        2. Überschreibung
        3. Überladung
      5. Vererbung und objektorientiertes Design
        1. Wann ist Vererbung gerechtfertigt?
        2. Vererbung versus Komposition
        3. Klassenhierarchien
          1. Es gibt eine oberste Basisklasse: java.lang.Object
      6. Übungen
    2. Kapitel 16 Polymorphie und generische Programmierung
      1. Polymorphe Variablen
        1. Abgeleitete Objekte als Basisklassenobjekte verwenden
        2. Rückverwandlung in Objekte abgeleiteter Klassen
      2. Polymorphe Methoden
        1. Polymorphie durch Überschreibung
        2. »Echte« Polymorphie
        3. Dynamische und statische Bindung
        4. Polymorphes Verhalten unterdrücken?
          1. static
          2. private
          3. final
      3. Generische Programmierung
        1. Basisklassen-Arrays
        2. Basisklassenparameter
        3. Typidentifizierung zur Laufzeit (RTTI)
          1. instanceof – Klassentyp eines Objekts feststellen
          2. getClass() – beliebige Objekte und Klassen vergleichen
        4. Noch einmal: Object
      4. Java Generics
        1. Syntax
          1. Verkürzte Variablendefinition (»Diamant-Operator«)
          2. Methoden parametrisieren
        2. Java Generics kontra Object-Implementierung
        3. Wildcard-Typ und Einschränkungen
          1. Der Wildcard-Typ
          2. Arrays von parametrisierten Klassen
          3. Eingeschränkte Wildcards
          4. Eingeschränkte Platzhalter
        4. Vererbung und Überladung
          1. Vererbung parametrisierter Klassen
          2. Überladung von Methoden mit Platzhaltern
        5. Hinter den Kulissen
          1. Umsetzung des Generics-Konzepts
          2. Untypisierte Verwendung parametrisierter Klassen
          3. Einschränkungen
      5. Übungen
    3. Kapitel 17 Abstrakte Klassen und Schnittstellen (Interfaces)
      1. Abstrakte Klassen
        1. Abstrakte Methoden
        2. Abstrakte Klassen
      2. Schnittstellen
        1. Was sind Schnittstellen?
          1. Vorzüge des Schnittstellenkonzepts
          2. Schnittstellen versus Klassen
        2. Schnittstellen definieren
          1. Schnittstellen vererben
        3. Schnittstellen implementieren
        4. Schnittstellen und Polymorphie
        5. Mehrere Schnittstellen implementieren
          1. Schnittstellen durch anonyme Klassen implementieren
      3. Übungen
    4. Kapitel 18 Fehlerbehandlung mit Exceptions
      1. Möglichkeiten der Fehlerbehandlung
        1. Fehler an Ort und Stelle abfangen
        2. Fehler durch Rückgabewerte codieren
        3. Fehlerbehandlung durch Exceptions
          1. Aufbau einer Exception-Behandlung
      2. Exceptions abfangen
        1. Mehrere catch-Blöcke
        2. Die Exception-Hierarchie
        3. Der Parameter des catch-Blocks
      3. Exceptions weiterleiten
        1. Weiterleitung mit throws
        2. Exceptions und Behandlungszwang
      4. Exceptions werfen
        1. Exceptions erneut werfen
        2. Exceptions verketten
      5. Eigene Exceptions definieren
      6. Programmfluss und Exception-Behandlung
        1. Die Problematik des gestörten Programmflusses
        2. finally
        3. Unterdrückte Exceptions
        4. try-catch-with-resources
      7. Übungen
    5. Kapitel 19 Programmieren mit Objekten
      1. Objekte auf Konsole ausgeben
      2. Objekte kopieren
        1. Flaches Kopieren mit clone()
          1. clone() überschreiben
        2. Tiefes Kopieren
      3. Objekte vergleichen
        1. Gleichheit feststellen
          1. Regeln für die Überschreibung von equals()
          2. Symmetrie herstellen
          3. hashCode() überschreiben
        2. Größenvergleiche
          1. Comparable und die Methode compareTo()
          2. Arrays von Objekten sortieren
      4. Objekte befragen mit Reflection
        1. Wer bist du?
        2. Welche Felder und Methoden besitzt du?
        3. Dynamisch Objekte erzeugen und verändern
        4. Die dunkle Seite der Macht: private Felder ändern
      5. Übungen
    6. Kapitel 20 Workshop: Überarbeitung einer Klassenhierarchie
      1. Die Vorgabe
      2. 1. Schritt – Umwandlung in eine Klassenhierarchie
      3. 2. Schritt – Absicherung gegen falschen Gebrauch
  10. Teil V Weiterführende und ergänzende Techniken
    1. Kapitel 21 Strings
      1. Was ist ein String?
      2. String-Literale
      3. Strings sind unveränderlich
      4. Pooling
      5. Zeichensätze und Kodierungen
      6. Die Klassen StringBuilder und StringBuffer
        1. Unterschiede
        2. Einsatz
      7. Die Klasse StringTokenizer
      8. String-Vergleiche mit regulären Ausdrücken
    2. Kapitel 22 Zeit, Datum und System
      1. Datum und Zeit
        1. Die Klassen LocalDate und LocalTime
          1. Datums- und Zeitangaben erzeugen
          2. Rechnen mit Datums- und Zeitangaben
          3. Datums- und Zeitangaben vergleichen
          4. Instant und (Lauf-)Zeitmessungen
        2. Die Klasse DateTimeFormatter
          1. Vordefinierte Formate
          2. Eigene Formate
          3. Lokalisierte Formate
      2. Runtime und Process
      3. System
      4. Zeitgeber
    3. Kapitel 23 Container (Collections)
      1. Programmieren mit Containern
        1. Container auswählen
          1. Wie sollen die Elemente verwahrt werden?
          2. Welche Anforderungen stelle ich an den Container?
        2. Container erzeugen
          1. Weitere Konstruktoren
          2. Nicht typisierte Verwendung
        3. Elementare Operationen
      2. Listen (List)
      3. Mengen (Set)
      4. Warteschlangen (Queue)
      5. Wörterbücher (Map)
      6. Iteratoren und for-Schleife
        1. Iteratoren
          1. Die Enumeration-Schnittstelle
        2. Die for-Schleife für Collections
      7. Suchen und Sortieren
        1. Die Schnittstelle Comparable
        2. Die Schnittstelle Comparator
        3. Die Klasse Collections
    4. Kapitel 24 Ein- und Ausgabe II
      1. Dateien und Verzeichnisse
        1. Die Path-Schnittstelle
        2. Dateizugriffe absichern
        3. Dateien und Verzeichnisse anlegen/löschen
        4. Temporäre Dateien und Verzeichnisse
        5. Zugriff auf Dateiattribute
        6. Dateien kopieren und verschieben
        7. Dateien in einem Verzeichnis auflisten
          1. Dateien filtern
        8. Einen Verzeichnisbaum durchlaufen
          1. Verzeichnisbaum kopieren
        9. Laufwerkbelegung ermitteln
        10. Auf JAR-/ZIP-Archive zugreifen
        11. Benachrichtigung über Verzeichnisänderungen
        12. Typ des Dateiinhalts bestimmen
      2. Altlasten: Dateien und Verzeichnisse bis Java 6
        1. Dateinamen und Dateipfade
        2. Dateien anlegen und löschen
        3. Verzeichnisse
          1. Dateien in einem Verzeichnis auflisten
          2. Dateifilter
          3. Laufwerkbelegung ermitteln
      3. Ein- und Ausgabestreams
        1. Das Stream-Konzept
        2. InputStream/OutputStream und Reader/Writer
        3. Ein-/Ausgabe in Dateien
          1. FileInputStream/FileOutputStream und FileReader/FileWriter
          2. BufferedInputStream/BufferedOutputStream und BufferedReader/BufferedWriter
          3. LineInputReader
          4. Wahlfreier Dateizugriff
          5. PrintStream und PrintWriter
          6. Zeichenkonvertierung mit InputStreamReader/OutputStreamWriter
          7. Portierfähiges Speichern: DataInputStream/DataOutputStream
        4. Ein-/Ausgabe in den Speicher
          1. ByteArrayInputStream und ByteArrayOutputStream
          2. CharArrayReader/CharArrayWriter und StringReader/StringWriter
        5. Standardeingabe und -ausgabe
        6. StreamTokenizer
        7. Serialisierung von Objekten
          1. Die Schnittstellen Serializable
          2. Die Schnittstelle Externalizable
      4. Formatieren und Scannen
        1. Scanner
          1. Methoden
          2. Benutzereingaben für Konsolenanwendungen einlesen
          3. Textpassagen in Dateien suchen
        2. Formatter und die Formatierungsstrings
          1. Methoden, die Formatierungsstrings unterstützen
          2. Formatierung mit Formatierungsstrings
      5. Verbesserte Konsolenunterstützung
        1. Arbeiten mit Console
        2. Die Problematik der Umlaute
        3. Passworteingaben
        4. readLine() mit gleichzeitiger Ausgabe
    5. Kapitel 25 Lambda-Ausdrücke
      1. Funktionale Schnittstellen und Lambda-Ausdrücke
      2. Das Paket java.util.function
      3. Variablenzugriff im Lambda-Ausdruck
      4. Methodenreferenzen
      5. Default-Methoden
        1. Default-Methoden-Kollisionen
      6. Collections-Erweiterungen
        1. forEach
        2. removeIf
      7. Massendatenverarbeitung: Streams
    6. Kapitel 26 Annotationen
      1. Vordefinierte Annotationen
      2. Selbst definierte Annotationen
    7. Kapitel 27 Workshop: Kellerautomat
      1. Klammerung und Kellerautomat
      2. Die Datenstruktur
      3. Die Verarbeitungslogik
  11. Teil VI GUI-Programmierung
    1. Kapitel 28 Grafische Benutzeroberflächen – erster Einstieg
      1. Die Grundpfeiler: AWT und JFC/Swing
      2. Ein Grundgerüst für Benutzeroberflächen mit Swing
        1. Panes
        2. Fenster schließen
        3. Komponenten hinzufügen
          1. Komponenten einfügen
          2. Die Komponentenreferenz
          3. Codeorganisation
          4. Layout-Manager
        4. Auf Ereignisse reagieren
    2. Kapitel 29 Benutzeroberflächen
      1. Model-View-Controller
      2. Das Hauptfenster (JFrame)
        1. Das Look & Feel
        2. Hauptfenster schließen
        3. Die Panes-Hierarchie
        4. Transparenz und Freiform
      3. Komponenten anordnen: Layout-Manager
        1. Der FlowLayout-Manager
        2. Der GridLayout-Manager
        3. Der GridBagLayout-Manager
        4. Der BorderLayout-Manager
        5. Der CardLayout-Manager
        6. Der OverlayLayout-Manager
        7. Der BoxLayout-Manager und die Containerklasse Box
        8. Der GroupLayout-Manager und die Klasse Group
          1. Beispiel 1: Simulation eines FlowLayouts
          2. Beispiel 2: Ausrichtung von Label-Textfelder-Kombinationen
        9. Null-Layout (kein Layout-Manager)
        10. Größenfestlegung
      4. Ereignisse behandeln
        1. Grundlegender Mechanismus
          1. Varianten
        2. Ereignisse und Ereignisempfänger (Listener)
        3. Adapterklassen
        4. Die Ereignis-Klassen
          1. ActionEvent
          2. ComponentEvent
          3. ContainerEvent
          4. WindowEvent
          5. FocusEvent
          6. InputEvent
          7. MouseEvent
          8. MouseWheelEvent
          9. KeyEvent
          10. ItemEvent
      5. Austauschbares Erscheinungsbild (Look & Feel)
      6. Swing-Beispielprogramm
    3. Kapitel 30 Komponenten (Steuerelemente)
      1. Component und JComponent
      2. Beschriftungsfelder – JLabel
      3. Schaltflächen, Kontrollkästchen und Optionsfelder
        1. Schaltflächen – JButton
        2. Wechselschalter – JToggleButton
        3. Schaltflächengruppen – ButtonGroup
        4. Kontrollkästchen – JCheckBox
        5. Optionsfelder – JRadioButton
      4. Listenfelder – JList
        1. Dynamisches Ändern von Einträgen
      5. Kombinationsfelder (JComboBox)
      6. Fortschrittsanzeige – JProgressBar
      7. JScrollPane
      8. Baum- und Tabellendarstellung
        1. JTree
          1. Anzeigen der Baumstruktur
          2. Auswahl von Knoten
        2. JTable
          1. Anzeigen der Tabelle
    4. Kapitel 31 Menüs
      1. Erstellen von Menüs
        1. Aufbau einer Menüleiste
          1. Untermenüs
          2. Kontrollkästchen und Optionsfelder
        2. Kontextmenüs (Pop-up-Menüs)
        3. Ereignisbehandlung
      2. Tastaturkürzel
        1. Mnemonics
        2. Accelerators
      3. Symbolleisten
      4. Die Zwischenablage
    5. Kapitel 32 Dialogfenster
      1. Standarddialoge
        1. JOptionPane
        2. JFileChooser
          1. Dateifilter
        3. JColorChooser
      2. Eigene Dialoge mit JDialog
      3. Modale und nicht modale Dialoge
    6. Kapitel 33 Grafik
      1. Grafikgrundlagen
        1. Gerätekontexte und Graphics-Objekte
          1. Bezugsquellen für Graphics-Instanzen
        2. paintComponent()
        3. Zeichengeräte und -methoden
          1. Text zeichnen
          2. Linien und Figuren zeichnen
          3. Farben
          4. Sonstige Methoden
          5. Java-2D
        4. Zeichnen in Swing
      2. Praxis der Grafikprogrammierung
        1. Automatisches Neuzeichnen mit paintComponent()
          1. Zeichenausgaben nach Bedarf
          2. Neuzeichnen veranlassen
        2. Außerhalb von paintComponent() zeichnen
        3. Swing und das Double Buffering
        4. Computergrafiken
      3. Bilder und Bilddateien
        1. Bilder laden und speichern
        2. Bilder anzeigen
        3. Bilder bearbeiten
          1. Bildsignierer
    7. Kapitel 34 Textverarbeitung
      1. Grundlagen
        1. Dokument und Ansicht (MVC-Architektur)
        2. Positionsanzeige (Caret)
        3. Textmarkierungen
        4. Vordefinierte Ereignisbehandlung (Actions)
        5. Scrollbarkeit
      2. Einzeilige Textfelder
        1. JTextField
        2. JPasswordField
      3. Texteditierung mit JTextArea
        1. Javedi-Editor
    8. Kapitel 35 Drucken und Drag & Drop
      1. Drucken
        1. Das Grundprinzip – Drucken unter Java 1.2
          1. Stilles Drucken ohne Benutzer – die javax.print-Erweiterung
        2. Texte drucken einfach gemacht – die print()-Methoden
          1. getPrintable()
          2. print()
        3. Bilder drucken
          1. Variante 1: Drucken mit eigener Printable-Implementierung
          2. Variante 2: Stilles Drucken aus Bilddatei
      2. Drag & Drop
        1. Grundlagen
        2. Die Drag-Unterstützung aktivieren
        3. Die Drop-Unterstützung konfigurieren
        4. Drag & Drop für Labels
        5. Datei-Drop für JTextArea-Komponenten (eigener TransferHandler)
          1. Die JTextArea-Komponente konfigurieren
          2. Die Klasse für den Datei-TransferHandler
    9. Kapitel 36 Sound
      1. Die Java-Sound-API
        1. Einführung
        2. Streaming-Wiedergabe
    10. Kapitel 37 Workshop: Java-Millionenquiz
      1. Aufbau und Erstellung
      2. Das Programm (Millionenspiel.java)
      3. Das Hauptfenster (Hauptfenster.java)
      4. Die Spielsteuerung (Spiellogik.java)
  12. Teil VII Spezielle Programmiergebiete und Methodik
    1. Kapitel 38 Datenbankzugriffe mit JDBC
      1. Datenbankgrundlagen
        1. Die relationale Datenbank
        2. JDBC und ODBC
        3. SQL – Structured Query Language
          1. Tabellen anlegen – CREATE TABLE
          2. Datensatz einfügen – INSERT
          3. Datensatz ändern – UPDATE
          4. Datensatz löschen – DELETE
          5. Datensätze suchen – SELECT
      2. MySQL-Datenbank anlegen
      3. Datenbankverbindung aufbauen
        1. Das Laden des Treibers
        2. Einsatz von DriverManager und Connection
      4. SQL-Abfragen durchführen
        1. Die Statement-Schnittstelle
        2. Die ResultSet-Schnittstelle
          1. Auslesen von Daten
          2. Scrolling und Schreiboperationen
      5. Java-DB
    2. Kapitel 39 Thread-Programmierung
      1. Einführung
      2. Threads
        1. Die Klasse Thread
        2. Die Schnittstelle Runnable
        3. Schlafen und Unterbrechen
        4. Daemons
        5. Nützliche Thread-Methoden
      3. Synchronisierung
        1. volatile-Variablen
        2. Gesicherte Abschnitte: synchronized
        3. Nachrichten mit wait() und notify()
        4. Pipes
      4. Threads und Swing
        1. Die Single-Thread-Rule
        2. Hintergrundaktivität mit SwingWorker
        3. Periodische Aktivitäten mit Timer
      5. Threads und Collections
    3. Kapitel 40 HTTP-Verbindungen (WWW)
      1. Uniform Resource Locator (URL)
      2. URL mit Sonderzeichen: x-www-form-urlencoded
    4. Kapitel 41 Praxis des Programmierens
      1. Der Softwareentwicklungszyklus
        1. Die Modellierungssprache UML
      2. Fallbeispiel – Temperaturregelung
        1. Anforderungsspezifikation
        2. Die Analysephase
        3. Die Designphase
          1. Implementierung
      3. Iterative und rekursive Algorithmen
      4. Entwurfsmuster (Design Patterns)
        1. Singleton
        2. Fabrikmethode (Factory method)
        3. Fassade (Façade)
        4. Delegation (Delegate)
        5. Beobachter (Observer)
      5. Automatisierte Tests
        1. Das Test-Framework JUnit
        2. Testobjekte vorgaukeln mit Mockito
      6. Logging
        1. Einen Logger erzeugen
        2. Loggen
        3. LogHandler
        4. Formatter LogHandler
  13. Teil VIII Bonus-Teil – Android-Programmierung
    1. Kapitel 42 Einführung in die App-Erstellung
      1. Die Dalvik-Maschine und die Android-Architektur
      2. App-Besonderheiten
        1. Bildschirmseiten kontra Fenster
        2. Activities kontra JFrame
        3. Intents statt Fensterinstanziierung
        4. Manifestdatei
        5. Ressourcen
        6. Kooperatives Verhalten
      3. Der App-Lebenszyklus
    2. Kapitel 43 Installation und erste App
      1. Download und Installation
        1. Installation
        2. Erster Start und Konfiguration
          1. Deinstallation
      2. Die erste App
        1. Das Projekt
          1. Das Projekt in Eclipse
        2. Das vorgegebene Codegerüst
        3. Bildschirmseite und Layoutdatei
        4. Ressourcen
        5. Die App erstellen (Build)
      3. Die App im Emulator testen
        1. AVD für Emulator anlegen
          1. App testen
      4. Die App auf dem Smartphone testen
        1. Automatische Übertragung mit Eclipse
    3. Kapitel 44 Aufbau von Benutzeroberflächen
      1. Benutzeroberfläche
        1. Die XML-Layoutdateien
          1. Aufbau
          2. Attribute
          3. Neue Layoutdateien anlegen
        2. Layout-Views
        3. Widgets
          1. Zugriff auf UI-Elemente
        4. Ereignisbehandlung
          1. Welche Ereignisse gibt es?
      2. Ressourcenmodell
        1. Texte
          1. String-Ressourcen verwenden
          2. String-Arrays
        2. Bilder
          1. Die Bilddatei
          2. Bilder in eine Bildschirmseite einblenden
          3. Bilder als Hintergrundbild einer Bildschirmseite verwenden
        3. Alternative Ressourcen anbieten
          1. Der Trick
      3. App-Symbol
      4. Der Intent-Mechanismus
        1. Explizite und implizite Intents
          1. Implizite Intents
          2. Explizite Intents
        2. Activities starten mit Intents
          1. Weitere Activities anlegen
          2. Intent-Objekt erzeugen und Activity aufrufen
          3. Intents empfangen
      5. Grafik
        1. Die Leinwand
        2. Die onDraw()-Methode
          1. Die Zeichenmethoden und -werkzeuge
        3. View in Bildschirmseite einbauen
    4. Kapitel 45 Google Play
      1. Die App vorbereiten
      2. Digitales Signieren
      3. Die App exportieren und signieren
      4. Bei Google Play registrieren
        1. Steuerliche Aspekte bei App-Verkauf
      5. App hochladen
    5. Kapitel 46 Workshop: Das Millionenquiz als App
      1. Die Activity (QuizActivity.java)
      2. Die Fragen (Frage.java)
      3. Die Spielsteuerung (Spiellogik.java)
      4. Der Abschlussbildschirm (AbschlussActivity.java)
  14. Index
  15. Über die Autoren
  16. Kolophon
  17. Teil IX Anhänge
    1. Anhang A Lösungen zu den Übungen
      1. Kapitel 6
      2. Kapitel 7
      3. Kapitel 8
      4. Kapitel 9
      5. Kapitel 11
      6. Kapitel 12
      7. Kapitel 13
      8. Kapitel 15
      9. Kapitel 16
      10. Kapitel 17
      11. Kapitel 18
      12. Kapitel 19
    2. Anhang B Die Java-Tools
      1. javac – der Compiler
      2. Arbeitsweise
        1. Die Class-Dateien
      3. Optionen
      4. Aufrufe
        1. Szenario 1: Quelltextdateien in einem Verzeichnis kompilieren
        2. Szenario 2: Quelltextdateien in verschiedenen Verzeichnissen kompilieren
        3. Szenario 3: Bestehende Class-Dateien verwenden
        4. Szenario 4: Aktualisierung versus Neukompilation
        5. Szenario 5: Quelltextdateien eines Pakets kompilieren
        6. Szenario 6: Quelltextdateien mehrerer Pakete kompilieren
        7. Szenario 7: Class-Dateien einer älteren Java-Plattform verwenden
        8. Szenario 8: Aufrufe automatisieren
      5. java – der Interpreter
        1. Aufrufe
        2. Optionen
      6. jar – Archive erstellen
        1. Aufrufe
        2. Optionen
      7. javadoc – Dokumentationen erstellen
      8. jdb – der Debugger
        1. Vorbereitungen
        2. Debug-Sitzung starten
        3. Wichtige jdb-Kommandos:
    3. Anhang C Anwendungen weitergeben
      1. Ohne JRE geht es nicht
      2. Java-Anwendungen ausführen: von .class bis .exe
        1. Class-Dateien
        2. JAR-Dateien
        3. BAT-Dateien
        4. EXE-Dateien
    4. Anhang D Installation von MySQL
      1. Der MySQL-Server
        1. Eintrag in den Systempfad
        2. Mit MySQL-Client anmelden
        3. Wichtige MySQL-Kommandos:
      2. Der JDBC-Treiber
    5. Anhang E Zahlensysteme
      1. Umrechnungen
      2. Bits und Bytes
        1. Bytes
        2. Words und DWords
      3. Die Hexadezimalzahlen
    6. Anhang F Tabellen
      1. Java-Schlüsselwörter
      2. Java-Datentypen
      3. Java-Operatoren
      4. Unicode-Zeichen (ASCII 0 bis 127)
      5. Unicode-Zeichen (Umlaute und Sonderzeichen)
      6. Unicode-Zeichen (griechisches Alphabet)
  18. Fußnoten
    1. Einleitung
    2. Kapitel 1
    3. Kapitel 2
    4. Kapitel 3
    5. Kapitel 5
    6. Kapitel 6
    7. Kapitel 7
    8. Kapitel 8
    9. Kapitel 9
    10. Kapitel 11
    11. Kapitel 12
    12. Kapitel 13
    13. Kapitel 15
    14. Kapitel 14
    15. Kapitel 18
    16. Kapitel 21
    17. Kapitel 23
    18. Kapitel 24
    19. Kapitel 25
    20. Kapitel 26
    21. Kapitel 30
    22. Kapitel 31
    23. Kapitel 32
    24. Kapitel 33
    25. Kapitel 36
    26. Kapitel 38
    27. Kapitel 39
    28. Kapitel 41
    29. Kapitel 42
    30. Anhang B
    31. Anhang D