Rheinwerk Computing :: Java SE 8 Standard-Bibliothek - Inhaltsverzeichnis (original) (raw)
Vorwort
Organisation der Kapitel
1 Neues in Java 8 und Java 7
1.1 Sprachänderungen in Java 8
1.1.1 Statische ausprogrammierte Methoden in Schnittstellen
1.1.2 Default-Methoden
1.1.3 Erweiterte Schnittstellen deklarieren und nutzen
1.1.4 Erweiterte Schnittstellen, Mehrfachvererbung und Mehrdeutigkeiten *
1.1.5 Bausteine bilden mit Default-Methoden *
1.2 Lambda-Ausdrücke und funktionale Programmierung
1.2.1 Code = Daten
1.2.2 Funktionale Schnittstellen und Lambda-Ausdrücke im Detail
1.2.3 Methoden-Referenz
1.2.4 Konstruktor-Referenz
1.2.5 Implementierung von Lambda-Ausdrücken
1.2.6 Funktionale Programmierung mit Java
1.2.7 Funktionale Schnittstelle aus dem java.util.function-Paket
1.2.8 Optional ist keine Nullnummer
1.2.9 Was ist jetzt so funktional?
1.2.10 Zum Weiterlesen
1.3 Bibliotheksänderungen in Java 8
1.4 JDK 8-HotSpot-JVM-Änderungen
1.5 Auf Java 7/8-Syntax mit NetBeans und Eclipse migrieren
1.5.1 Java 8-Syntax-Migration mit NetBeans
1.5.2 Java 8-Syntax-Migration mit Eclipse
1.5.3 File-Klassen auf NIO.2 umstellen
1.6 Zum Weiterlesen
2 Fortgeschrittene String-Verarbeitung
2.1 Erweitere Zeicheneigenschaften
2.1.1 isXXX(….)-Methoden
2.1.2 Unicode-Blöcke
2.1.3 Unicode-Skripte
2.2 Reguläre Ausdrücke
2.2.1 Pattern.matches(…) bzw. String#matches(…)
2.2.2 Die Klassen Pattern und Matcher
2.2.3 Finden und nicht matchen
2.2.4 Gruppen
2.2.5 Gierige und nicht gierige Operatoren *
2.2.6 Mit MatchResult alle Ergebnisse einsammeln *
2.2.7 Suchen und Ersetzen mit Mustern
2.2.8 Hangman Version 2
2.3 Zerlegen von Zeichenketten
2.3.1 Zerlegen von Zeichensequenzen über String oder Pattern
2.3.2 Mehr vom Scanner
2.3.3 Die Klasse StringTokenizer *
2.3.4 BreakIterator als Zeichen-, Wort-, Zeilen- und Satztrenner *
2.3.5 StreamTokenizer *
2.4 Zeichenkodierungen, XML/HTML-Entities, Base64 *
2.4.1 Unicode und 8-Bit-Abbildungen
2.4.2 Kodierungen über die Klasse String vornehmen
2.4.3 Das Paket java.nio.charset und der Typ Charset
2.4.4 Konvertieren mit OutputStreamWriter-/InputStreamReader-Klassen
2.4.5 XML/HTML-Entities ausmaskieren
2.4.6 Base64-Kodierung
2.5 Ausgaben formatieren
2.5.1 Die Formatter-Klasse *
2.5.2 Formatieren mit Masken *
2.5.3 Format-Klassen
2.5.4 Zahlen, Prozente und Währungen mit NumberFormat und DecimalFormat formatieren *
2.5.5 MessageFormat und Pluralbildung mit ChoiceFormat
2.6 Sprachabhängiges Vergleichen und Normalisierung *
2.6.1 Die Klasse Collator
2.6.2 Effiziente interne Speicherung für die Sortierung
2.6.3 Normalisierung
2.7 Phonetische Vergleiche *
2.8 Zum Weiterlesen
3 Threads und nebenläufige Programmierung
3.1 Threads erzeugen
3.1.1 Threads über die Schnittstelle Runnable implementieren
3.1.2 Thread mit Runnable starten
3.1.3 Die Klasse Thread erweitern
3.2 Thread-Eigenschaften und -Zustände
3.2.1 Der Name eines Threads
3.2.2 Wer bin ich?
3.2.3 Die Zustände eines Threads *
3.2.4 Schläfer gesucht
3.2.5 Mit yield() auf Rechenzeit verzichten
3.2.6 Der Thread als Dämon
3.2.7 Freiheit für den Thread – das Ende
3.2.8 Einen Thread höflich mit Interrupt beenden
3.2.9 UncaughtExceptionHandler für unbehandelte Ausnahmen
3.2.10 Der stop() von außen und die Rettung mit ThreadDeath *
3.2.11 Ein Rendezvous mit join(…) *
3.2.12 Arbeit niederlegen und wieder aufnehmen *
3.2.13 Priorität *
3.3 Der Ausführer (Executor) kommt
3.3.1 Die Schnittstelle Executor
3.3.2 Glücklich in der Gruppe – die Thread-Pools
3.3.3 Threads mit Rückgabe über Callable
3.3.4 Mehrere Callable abarbeiten
3.3.5 ScheduledExecutorService für wiederholende Ausgaben und Zeitsteuerungen nutzen
3.4 Synchronisation über kritische Abschnitte
3.4.1 Gemeinsam genutzte Daten
3.4.2 Probleme beim gemeinsamen Zugriff und kritische Abschnitte
3.4.3 Punkte nebenläufig initialisieren
3.4.4 i++ sieht atomar aus, ist es aber nicht *
3.4.5 Kritische Abschnitte schützen
3.4.6 Kritische Abschnitte mit ReentrantLock schützen
3.4.7 Synchronisieren mit synchronized
3.4.8 Synchronized-Methoden der Klasse StringBuffer *
3.4.9 Mit synchronized synchronisierte Blöcke
3.4.10 Dann machen wir doch gleich alles synchronisiert!
3.4.11 Lock-Freigabe im Fall von Exceptions
3.4.12 Deadlocks
3.4.13 Mit synchronized nachträglich synchronisieren *
3.4.14 Monitore sind reentrant – gut für die Geschwindigkeit *
3.4.15 Synchronisierte Methodenaufrufe zusammenfassen *
3.5 Synchronisation über Warten und Benachrichtigen
3.5.1 Die Schnittstelle Condition
3.5.2 It’s Disco-Time *
3.5.3 Warten mit wait(…) und Aufwecken mit notify()/notifyAll() *
3.5.4 Falls der Lock fehlt – IllegalMonitorStateException *
3.6 Datensynchronisation durch besondere Concurrency-Klassen *
3.6.1 Semaphor
3.6.2 Barrier und Austausch
3.6.3 Stop and go mit Exchanger
3.7 Atomare Operationen und frische Werte mit volatile *
3.7.1 Der Modifizierer volatile bei Objekt-/Klassenvariablen
3.7.2 Das Paket java.util.concurrent.atomic
3.8 Teile und herrsche mit Fork und Join *
3.8.1 Algorithmendesign per »teile und herrsche«
3.8.2 Nebenläufiges Lösen von D&C-Algorithmen
3.8.3 Fork und Join
3.9 CompletionStage und CompletableFuture *
3.10 Mit dem Thread verbundene Variablen *
3.10.1 ThreadLocal
3.10.2 InheritableThreadLocal
3.10.3 ThreadLocalRandom als schneller nebenläufiger Zufallszahlengenerator
3.10.4 ThreadLocal bei der Performance-Optimierung
3.11 Threads in einer Thread-Gruppe *
3.11.1 Aktive Threads in der Umgebung
3.11.2 Etwas über die aktuelle Thread-Gruppe herausfinden
3.11.3 Threads in einer Thread-Gruppe anlegen
3.11.4 Methoden von Thread und ThreadGroup im Vergleich
3.12 Zeitgesteuerte Abläufe
3.12.1 Die Typen Timer und TimerTask
3.12.2 Job-Scheduler Quartz
3.13 Einen Abbruch der virtuellen Maschine erkennen
3.13.1 Shutdown-Hook
3.13.2 Signale
3.14 Zum Weiterlesen
4 Datenstrukturen und Algorithmen
4.1 Datenstrukturen und die Collection-API
4.1.1 Designprinzip mit Schnittstellen, abstrakten und konkreten Klassen
4.1.2 Die Basisschnittstellen Collection und Map
4.1.3 Die Utility-Klassen Collections und Arrays
4.1.4 Das erste Programm mit Container-Klassen
4.1.5 Die Schnittstelle Collection und Kernkonzepte
4.1.6 Schnittstellen, die Collection erweitern, und Map
4.1.7 Konkrete Container-Klassen
4.1.8 Generische Datentypen in der Collection-API
4.1.9 Die Schnittstelle Iterable und das erweiterte for
4.2 Listen
4.2.1 Erstes Listen-Beispiel
4.2.2 Auswahlkriterium ArrayList oder LinkedList
4.2.3 Die Schnittstelle List
4.2.4 ArrayList
4.2.5 LinkedList
4.2.6 Der Feld-Adapter Arrays.asList(…)
4.2.7 ListIterator *
4.2.8 toArray(…) von Collection verstehen – die Gefahr einer Falle erkennen
4.2.9 Primitive Elemente in Datenstrukturen verwalten
4.3 Mengen (Sets)
4.3.1 Ein erstes Mengen-Beispiel
4.3.2 Methoden der Schnittstelle Set
4.3.3 HashSet
4.3.4 TreeSet – die sortierte Menge
4.3.5 Die Schnittstellen NavigableSet und SortedSet
4.3.6 LinkedHashSet
4.4 Queues (Schlangen) und Deques
4.4.1 Queue-Klassen
4.4.2 Deque-Klassen
4.4.3 Blockierende Queues und Prioritätswarteschlangen
4.4.4 PriorityQueue
4.5 Stack (Kellerspeicher, Stapel)
4.5.1 Die Methoden von java.util.Stack
4.6 Assoziative Speicher
4.6.1 Die Klassen HashMap und TreeMap
4.6.2 Einfügen und Abfragen des Assoziativspeichers
4.6.3 Über die Bedeutung von equals(…) und hashCode() bei Elementen
4.6.4 Eigene Objekte hashen
4.6.5 LinkedHashMap und LRU-Implementierungen
4.6.6 IdentityHashMap
4.6.7 Das Problem veränderter Elemente
4.6.8 Aufzählungen und Ansichten des Assoziativspeichers
4.6.9 Die Arbeitsweise einer Hash-Tabelle *
4.6.10 Die Properties-Klasse
4.7 Mit einem Iterator durch die Daten wandern
4.8 Iterator-Schnittstelle
4.8.1 Der Iterator kann (eventuell auch) löschen
4.8.2 Operationen auf allen Elementen durchführen
4.8.3 Einen Zufallszahlen-Iterator schreiben
4.8.4 Iteratoren von Sammlungen, das erweiterte for und Iterable
4.8.5 Fail-Fast-Iterator und die ConcurrentModificationException
4.8.6 Die Schnittstelle Enumerator *
4.9 Algorithmen in Collections
4.9.1 Die Bedeutung von Ordnung mit Comparator und Comparable
4.9.2 Sortieren
4.9.3 Den größten und kleinsten Wert einer Collection finden
4.9.4 Nichtänderbare Datenstrukturen, immutable oder nur lesen?
4.9.5 Null Object Pattern und leere Sammlungen/Iteratoren zurückgeben
4.9.6 Echte typsichere Container
4.9.7 Mit der Halbierungssuche nach Elementen fahnden
4.9.8 Ersetzen, Kopieren, Füllen, Umdrehen, Rotieren *
4.9.9 Listen durchwürfeln *
4.9.10 Häufigkeit eines Elements *
4.9.11 Singletons *
4.9.12 nCopies(…) *
4.10 Datenstrukturen mit Änderungsmeldungen
4.10.1 Das Paket javafx.collections
4.10.2 Fabrikmethoden in FXCollections
4.10.3 Änderungen melden über InvalidationListener
4.10.4 Änderungen melden über XXXChangeListener
4.10.5 Change-Klassen
4.10.6 Weitere Hilfsmethoden einer ObservableList
4.10.7 Melden von Änderungen an Arrays
4.10.8 Transformierte FXCollections
4.10.9 Weitere statische Methoden in FXCollections
4.11 Stream-API
4.11.1 Stream erzeugen
4.11.2 Terminale Operationen
4.11.3 Intermediäre Operationen
4.11.4 Streams mit primitiven Werten
4.11.5 Stream-Beziehungen, AutoCloseable
4.11.6 Stream-Builder
4.11.7 Spliterator
4.11.8 Klasse StreamSupport
4.12 Spezielle threadsichere Datenstrukturen
4.12.1 Zu Beginn nur synchronisierte Datenstrukturen in Java 1.0
4.12.2 Nicht synchronisierte Datenstrukturen in der Standard-Collection-API
4.12.3 Nebenläufiger Assoziativspeicher und die Schnittstelle ConcurrentMap
4.12.4 ConcurrentLinkedQueue
4.12.5 CopyOnWriteArrayList und CopyOnWriteArraySet
4.12.6 Wrapper zur Synchronisation
4.12.7 Blockierende Warteschlangen
4.12.8 ArrayBlockingQueue und LinkedBlockingQueue
4.12.9 PriorityBlockingQueue
4.12.10 Transfer-Warteschlangen – TransferQueue und LinkedTransferQueue
4.13 Google Guava (Google Collections Library)
4.13.1 Beispiel Multi-Set und Multi-Map
4.13.2 Datenstrukturen aus Guava
4.13.3 Utility-Klassen von Guava
4.13.4 Prädikate
4.13.5 Transformationen
4.14 Die Klasse BitSet für Bitmengen *
4.14.1 Ein BitSet anlegen
4.14.2 BitSet füllen und Zustände erfragen
4.14.3 Mengenorientierte Operationen
4.14.4 Weitere Methoden von BitSet
4.14.5 Primzahlen in einem BitSet verwalten
4.15 Zum Weiterlesen
5 Raum und Zeit
5.1 Weltzeit *
5.2 Wichtige Datum-Klassen im Überblick
5.2.1 Der 1.1.1970
5.2.2 System.currentTimeMillis()
5.2.3 Einfache Zeitumrechnungen durch TimeUnit
5.3 Sprachen der Länder
5.3.1 Sprachen und Regionen über Locale-Objekte
5.4 Internationalisierung und Lokalisierung
5.4.1 ResourceBundle-Objekte und Ressource-Dateien
5.4.2 Ressource-Dateien zur Lokalisierung
5.4.3 Die Klasse ResourceBundle
5.4.4 Ladestrategie für ResourceBundle-Objekte
5.4.5 Ladeprozess und Format anpassen *
5.5 Die Klasse Date
5.5.1 Objekte erzeugen und Methoden nutzen
5.5.2 Date-Objekte sind nicht immutable
5.6 Calendar und GregorianCalendar
5.6.1 Die abstrakte Klasse Calendar
5.6.2 Calendar nach Date und Millisekunden fragen
5.6.3 Abfragen und Setzen von Datumselementen über Feldbezeichner
5.6.4 Kalender-Typen *
5.6.5 Kalender-Exemplare bauen über den Calendar.Builder
5.6.6 Wie viele Tage hat der Monat, oder wie viele Monate hat ein Jahr? *
5.6.7 Wann beginnt die Woche und wann die erste Woche im Jahr? *
5.6.8 Der gregorianische Kalender
5.7 Zeitzonen in Java *
5.7.1 Zeitzonen durch die Klasse TimeZone repräsentieren
5.7.2 SimpleTimeZone
5.7.3 Methoden von TimeZone
5.9 Formatieren und Parsen von Datumsangaben
5.9.1 Ausgaben mit printf(…)
5.9.2 Ausgaben mit Calendar-Methoden getDisplayName(…) *
5.9.3 Mit DateFormat und SimpleDateFormat formatieren
5.9.4 Parsen von Datumswerten
5.10 Date-Time-API in Java 8
5.10.1 Datumsklasse LocalDate
5.10.2 Ostertage *
5.10.3 Die Klasse YearMonth
5.10.4 Die Klasse MonthDay
5.10.5 Aufzählung DayOfWeek und Month
5.10.6 Klasse LocalTime
5.10.7 Klasse LocalDateTime
5.10.8 Klasse Year
5.10.9 Zeitzonen-Klassen ZoneId und ZoneOffset
5.10.10 Temporale Klassen mit Zeitzoneninformationen
5.10.11 Klassen Period und Duration
5.10.12 Klasse Instant
5.10.13 Parsen und Formatieren von Datumszeitwerten
5.10.14 Das Paket java.time.temporal *
5.10.15 Konvertierungen zwischen der klassischen API und Date-Time-API
5.11 Die Default-Falle
5.12 Zum Weiterlesen
6 Dateien, Verzeichnisse und Dateizugriffe
6.1 Alte und neue Welt in java.io und java.nio
6.1.1 java.io-Paket mit File-Klasse
6.1.2 NIO.2 und java.nio-Paket
6.2 Dateisysteme und Pfade
6.2.1 FileSystem und Path
6.2.2 Die Utility-Klasse Files
6.2.3 Dateien kopieren und verschieben
6.2.4 Dateiattribute *
6.2.5 Neue Dateien, Verzeichnisse, symbolische Verknüpfungen anlegen und löschen
6.2.6 MIME-Typen herausfinden *
6.2.7 Verzeichnislistings (DirectoryStream/Stream) und Filter *
6.2.8 Rekursives Ablaufen des Verzeichnisbaums *
6.2.9 Rekursiv nach Dateien/Ordnern suchen mit Files.find(…) *
6.2.10 Dateisysteme und Dateisystemattribute *
6.2.11 Verzeichnisse im Dateisystem überwachen *
6.3 Datei- und Verzeichnis-Operationen mit der Klasse File
6.3.1 Dateien und Verzeichnisse mit der Klasse File
6.3.2 Verzeichnis oder Datei? Existiert es?
6.3.3 Verzeichnis- und Dateieigenschaften/-attribute
6.3.4 Umbenennen und Verzeichnisse anlegen
6.3.5 Verzeichnisse auflisten und Dateien filtern
6.3.6 Dateien berühren, neue Dateien anlegen, temporäre Dateien
6.3.7 Dateien und Verzeichnisse löschen
6.3.8 Wurzelverzeichnis, Laufwerksnamen, Plattenspeicher *
6.3.9 URL-, URI- und Path-Objekte aus einem File-Objekt ableiten *
6.3.10 Mit Locking Dateien sperren *
6.3.11 Sicherheitsprüfung *
6.3.12 Zugriff auf SMB-Server mit jCIFS *
6.4 Dateien mit wahlfreiem Zugriff
6.4.1 Ein RandomAccessFile zum Lesen und Schreiben öffnen
6.4.2 Aus dem RandomAccessFile lesen
6.4.3 Schreiben mit RandomAccessFile
6.4.4 Die Länge des RandomAccessFile
6.4.5 Hin und her in der Datei
6.5 Wahlfreier Zugriff mit SeekableByteChannel und ByteBuffer *
6.5.1 SeekableByteChannel
6.5.2 ByteBuffer
6.5.3 Beispiel mit Path + SeekableByteChannel + ByteBuffer
6.5.4 FileChannel
6.6 Zum Weiterlesen
7 Datenströme
7.1 Stream-Klassen für Bytes und Zeichen
7.1.1 Lesen aus Dateien und Schreiben in Dateien
7.1.2 Byteorientierte Datenströme über Files beziehen
7.1.3 Zeichenorientierte Datenströme über Files beziehen
7.1.4 Funktion von OpenOption bei den Files.newXXX(…)-Methoden
7.1.5 Ressourcen aus dem Klassenpfad und aus JAR‐Archiven laden
7.1.6 Die Schnittstellen Closeable, AutoCloseable und Flushable
7.2 Basisklassen für die Ein-/Ausgabe
7.2.1 Die abstrakten Basisklassen
7.2.2 Übersicht über Ein-/Ausgabeklassen
7.2.3 Die abstrakte Basisklasse OutputStream
7.2.4 Ein Datenschlucker *
7.2.5 Die abstrakte Basisklasse InputStream
7.2.6 Ströme mit SequenceInputStream zusammensetzen *
7.2.7 Die abstrakte Basisklasse Writer
7.2.8 Die Schnittstelle Appendable *
7.2.9 Die abstrakte Basisklasse Reader
7.3 Formatierte Textausgaben
7.3.1 Die Klassen PrintWriter und PrintStream
7.3.2 System.out, System.err und System.in
7.4 Die FileXXX-Stromklassen
7.4.1 Kopieren mit FileOutputStream und FileInputStream
7.4.2 Das FileDescriptor-Objekt *
7.4.3 Mit dem FileWriter Texte in Dateien schreiben
7.4.4 Zeichen mit der Klasse FileReader lesen
7.5 Schreiben und Lesen aus Strings und Byte-Feldern
7.5.1 Mit dem StringWriter ein String-Objekt füllen
7.5.2 CharArrayWriter
7.5.3 StringReader und CharArrayReader
7.5.4 Mit ByteArrayOutputStream in ein Byte-Feld schreiben
7.5.5 Mit ByteArrayInputStream aus einem Byte-Feld lesen
7.6 Datenströme filtern und verketten
7.6.1 Streams als Filter verketten (verschachteln)
7.6.2 Gepufferte Ausgaben mit BufferedWriter und BufferedOutputStream
7.6.3 Gepufferte Eingaben mit BufferedReader/BufferedInputStream
7.6.4 LineNumberReader zählt automatisch Zeilen mit *
7.6.5 Daten mit der Klasse PushbackReader zurücklegen *
7.6.6 DataOutputStream/DataInputStream *
7.6.7 Basisklassen für Filter *
7.6.8 Die Basisklasse FilterWriter *
7.6.9 Ein LowerCaseWriter *
7.6.10 Eingaben mit der Klasse FilterReader filtern *
7.6.11 Anwendungen für FilterReader und FilterWriter *
7.7 Vermittler zwischen Byte-Streams und Unicode-Strömen
7.7.1 Datenkonvertierung durch den OutputStreamWriter
7.7.2 Automatische Konvertierungen mit dem InputStreamReader
7.8 Kommunikation zwischen Threads mit Pipes *
7.8.1 PipedOutputStream und PipedInputStream
7.8.2 PipedWriter und PipedReader
7.9 Prüfsummen
7.9.1 Die Schnittstelle Checksum
7.9.2 Die Klasse CRC32
7.9.3 Die Adler32-Klasse
7.10 Persistente Objekte und Serialisierung
7.10.1 Objekte mit der Standardserialisierung speichern und lesen
7.10.2 Zwei einfache Anwendungen der Serialisierung *
7.10.3 Die Schnittstelle Serializable
7.10.4 Nicht serialisierbare Attribute aussparen
7.10.5 Das Abspeichern selbst in die Hand nehmen
7.10.6 Tiefe Objektkopien *
7.10.7 Versionenverwaltung und die SUID
7.10.8 Wie die ArrayList serialisiert *
7.10.9 Probleme mit der Serialisierung
7.11 Alternative Datenaustauschformate
7.11.1 Serialisieren in XML-Dateien
7.11.2 XML-Serialisierung von JavaBeans mit JavaBeans Persistence *
7.11.3 Die Open-Source-Bibliothek XStream *
7.11.4 Binäre Serialisierung mit Google Protocol Buffers *
7.12 Zum Weiterlesen
8 Die eXtensible Markup Language (XML)
8.1 Auszeichnungssprachen
8.1.1 Die Standard Generalized Markup Language (SGML)
8.1.2 Extensible Markup Language (XML)
8.2 Eigenschaften von XML-Dokumenten
8.2.1 Elemente und Attribute
8.2.2 Beschreibungssprache für den Aufbau von XML-Dokumenten
8.2.3 Schema – die moderne Alternative zu DTD
8.2.4 Namensraum (Namespace)
8.2.5 XML-Applikationen *
8.3 Die Java-APIs für XML
8.3.1 Das Document Object Model (DOM)
8.3.2 Simple API for XML Parsing (SAX)
8.3.3 Pull-API StAX
8.3.4 Java Document Object Model (JDOM)
8.3.5 JAXP als Java-Schnittstelle zu XML
8.3.6 DOM-Bäume einlesen mit JAXP *
8.4 Java Architecture for XML Binding (JAXB)
8.4.1 Bean für JAXB aufbauen
8.4.2 Utility-Klasse JAXB
8.4.3 Ganze Objektgraphen schreiben und lesen
8.4.4 JAXBContext und Marshaller/Unmarshaller nutzen
8.4.5 Validierung
8.4.6 Weitere JAXB-Annotationen *
8.4.7 Beans aus XML-Schema-Datei generieren
8.5 Serielle Verarbeitung mit StAX
8.5.1 Unterschiede der Verarbeitungsmodelle
8.5.2 XML-Dateien mit dem Cursor-Verfahren lesen
8.5.3 XML-Dateien mit dem Iterator-Verfahren verarbeiten *
8.5.4 Mit Filtern arbeiten *
8.5.5 XML-Dokumente schreiben
8.6 Serielle Verarbeitung von XML mit SAX *
8.6.1 Schnittstellen von SAX
8.6.2 SAX-Parser erzeugen
8.6.3 Operationen der Schnittstelle ContentHandler
8.6.4 ErrorHandler und EntityResolver
8.7 XML-Dateien mit JDOM verarbeiten
8.7.1 JDOM beziehen
8.7.2 Paketübersicht *
8.7.3 Die Document-Klasse
8.7.4 Eingaben aus der Datei lesen
8.7.5 Das Dokument im XML-Format ausgeben
8.7.6 Der Dokumenttyp *
8.7.7 Elemente
8.7.8 Zugriff auf Elementinhalte
8.7.9 Liste mit Unterelementen erzeugen *
8.7.10 Neue Elemente einfügen und ändern
8.7.11 Attributinhalte lesen und ändern
8.7.12 XPath
8.8 Transformationen mit XSLT *
8.8.1 Templates und XPath als Kernelemente von XSLT
8.8.2 Umwandlung von XML-Dateien mit JDOM und JAXP
8.9 XML-Schema-Validierung *
8.9.1 SchemaFactory und Schema
8.9.2 Validator
8.9.3 Validierung unterschiedlicher Datenquellen durchführen
8.10 Zum Weiterlesen
9 Dateiformate
9.1 Einfache Dateiformate für strukturierte Daten
9.1.1 Property-Dateien mit java.util.Properties lesen und schreiben
9.1.2 CSV-Dateien
9.1.3 JSON-Serialisierung mit Jackson
9.2 Dokumentenformate
9.2.1 (X)HTML
9.2.2 PDF-Dokumente
9.2.3 Microsoft Office-Dokumente
9.2.4 OASIS Open Document Format
9.3 Datenkompression *
9.3.1 Java-Unterstützung beim Komprimieren
9.3.2 Daten packen und entpacken
9.3.3 Datenströme komprimieren
9.3.4 ZIP-Archive
9.3.5 JAR-Archive
9.4 Bildformate
9.5 Audiodateien
9.5.1 Die Arbeit mit Applets AudioClip
9.5.2 AudioClip von JavaFX
9.5.3 MIDI-Dateien abspielen
9.5.4 ID-Tags aus mp3-Dateien
10 Grafische Oberflächen mit Swing
10.1 AWT, JavaFoundation Classes und Swing
10.1.1 Das Abstract Window Toolkit (AWT)
10.1.2 Java Foundation Classes (JFC)
10.1.3 Was Swing von AWT-Komponenten unterscheidet
10.2 Mit NetBeans zur ersten Swing-Oberfläche
10.2.1 Projekt anlegen
10.2.2 Eine GUI-Klasse hinzufügen
10.2.3 Programm starten
10.2.4 Grafische Oberfläche aufbauen
10.2.5 Swing-Komponenten-Klassen
10.2.6 Funktionalität geben
10.3 Aller Swing-Anfang – Fenster zur Welt
10.3.1 Eine Uhr, bei der die Zeit nie vergeht
10.3.2 Swing-Fenster mit javax.swing.JFrame darstellen
10.3.3 Mit add(…) auf den Container
10.3.4 Fenster schließbar machen – setDefaultCloseOperation(int)
10.3.5 Sichtbarkeit des Fensters
10.3.6 Größe und Position des Fensters verändern
10.3.7 Fenster- und Dialogdekoration, Transparenz *
10.3.8 Die Klasse Toolkit *
10.3.9 Zum Vergleich: AWT-Fenster darstellen *
10.4 Beschriftungen (JLabel)
10.4.1 Mehrzeiliger Text, HTML in der Darstellung
10.5 Icon und ImageIcon für Bilder auf Swing-Komponenten
10.5.1 Die Klasse ImageIcon
10.6 Es tut sich was – Ereignisse beim AWT
10.6.1 Die Ereignisquellen und Horcher (Listener) von Swing
10.6.2 Listener implementieren
10.6.3 Listener bei dem Ereignisauslöser anmelden/abmelden
10.6.4 Adapterklassen nutzen
10.6.5 Innere Mitgliedsklassen und innere anonyme Klassen
10.6.6 Aufrufen der Listener im AWT-Event-Thread
10.6.7 Ereignisse, etwas genauer betrachtet *
10.7 Schaltflächen
10.7.1 Normale Schaltflächen (JButton)
10.7.2 Der aufmerksame ActionListener
10.7.3 Schaltflächen-Ereignisse vom Typ ActionEvent
10.7.4 Basisklasse AbstractButton
10.7.5 Wechselknopf (JToggleButton)
10.8 Textkomponenten
10.8.1 Text in einer Eingabezeile
10.8.2 Die Oberklasse der Textkomponenten (JTextComponent)
10.8.3 Geschützte Eingaben (JPasswordField)
10.8.4 Validierende Eingabefelder (JFormattedTextField)
10.8.5 Einfache mehrzeilige Textfelder (JTextArea)
10.8.6 Editor-Klasse (JEditorPane) *
10.9 Swing Action *
10.10 JComponent und Component als Basis aller Komponenten
10.10.1 Hinzufügen von Komponenten
10.10.2 Tooltips (Kurzhinweise)
10.10.3 Rahmen (Border) *
10.10.4 Fokus und Navigation *
10.10.5 Ereignisse jeder Komponente *
10.10.6 Die Größe und Position einer Komponente *
10.10.7 Komponenten-Ereignisse *
10.10.8 UI-Delegate – der wahre Zeichner *
10.10.9 Undurchsichtige (opake) Komponente *
10.10.10 Properties und Listener für Änderungen *
10.11 Container
10.11.1 Standardcontainer (JPanel)
10.11.2 Bereich mit automatischen Rollbalken (JScrollPane)
10.11.3 Reiter (JTabbedPane)
10.11.4 Teilungskomponente (JSplitPane)
10.12 Alles Auslegungssache – die Layoutmanager
10.12.1 Übersicht über Layoutmanager
10.12.2 Zuweisen eines Layoutmanagers
10.12.3 Im Fluss mit FlowLayout
10.12.4 BoxLayout
10.12.5 Mit BorderLayout in alle Himmelsrichtungen
10.12.6 Rasteranordnung mit GridLayout
10.12.7 Der GridBagLayoutmanager *
10.12.8 Null-Layout *
10.12.9 Weitere Layoutmanager
10.13 Rollbalken und Schieberegler
10.13.1 Schieberegler (JSlider)
10.13.2 Rollbalken (JScrollBar) *
10.14 Kontrollfelder, Optionsfelder, Kontrollfeldgruppen
10.14.1 Kontrollfelder (JCheckBox)
10.14.2 ItemSelectable, ItemListener und das ItemEvent
10.14.3 Sich gegenseitig ausschließende Optionen (JRadioButton)
10.15 Fortschritte bei Operationen überwachen *
10.15.1 Fortschrittsbalken (JProgressBar)
10.15.2 Dialog mit Fortschrittsanzeige (ProgressMonitor)
10.16 Menüs und Symbolleisten
10.16.1 Die Menüleisten und die Einträge
10.16.2 Menüeinträge definieren
10.16.3 Einträge durch Action-Objekte beschreiben
10.16.4 Mit der Tastatur – Mnemonics und Shortcut
10.16.5 Der Tastatur-Shortcut (Accelerator)
10.16.6 Tastenkürzel (Mnemonics)
10.16.7 Symbolleisten alias Toolbars
10.16.8 Popup-Menüs
10.16.9 System-Tray nutzen *
10.17 Das Model-View-Controller-Konzept
10.18 Auswahlmenüs, Listen und Spinner
10.18.1 Listen (JList)
10.18.2 Auswahlmenü (JComboBox)
10.18.3 Drehfeld (JSpinner) *
10.18.4 Datumsauswahl
10.19 Tabellen (JTable)
10.19.1 Ein eigenes Tabellen-Model
10.19.2 Basisklasse für eigene Modelle (AbstractTableModel)
10.19.3 Ein vorgefertigtes Standardmodell (DefaultTableModel)
10.19.4 Ein eigener Renderer für Tabellen
10.19.5 Zell-Editoren
10.19.6 Automatisches Sortieren und Filtern mit RowSorter *
10.20 Bäume (JTree)
10.20.1 JTree und sein TreeModel und TreeNode
10.20.2 Selektionen bemerken
10.20.3 Das TreeModel von JTree *
10.21 JRootPane und JDesktopPane *
10.21.1 Wurzelkomponente der Top-Level-Komponenten (JRootPane)
10.21.2 JDesktopPane und die Kinder von JInternalFrame
10.21.3 JLayeredPane
10.22 Dialoge und Window-Objekte
10.22.1 JWindow und JDialog
10.22.2 Modal oder nichtmodal?
10.22.3 Standarddialoge mit JOptionPane
10.22.4 Der Dateiauswahldialog
10.22.5 Der Farbauswahldialog JColorChooser *
10.23 Flexibles Java-Look-and-Feel
10.23.1 Look-and-Feel global setzen
10.23.2 UIManager
10.23.3 Die Windows-Optik mit JGoodies Looks verbessern *
10.24 Swing-Komponenten neu erstellen oder verändern *
10.24.1 Überlagerungen mit dem Swing-Komponenten-Dekorator JLayer
10.25 Die Zwischenablage (Clipboard)
10.25.1 Clipboard-Objekte
10.25.2 Mit Transferable auf den Inhalt zugreifen
10.25.3 DataFlavor ist das Format der Daten in der Zwischenablage
10.25.4 Einfügungen in der Zwischenablage erkennen
10.25.5 Drag & Drop
10.26 Undo durchführen *
10.27 AWT, Swing und die Threads
10.27.1 Ereignisschlange (EventQueue) und AWT-Event-Thread
10.27.2 Swing ist nicht threadsicher
10.27.3 invokeLater(…) und invokeAndWait(…)
10.27.4 SwingWorker
10.27.5 Eigene Ereignisse in die Queue setzen *
10.27.6 Auf alle Ereignisse hören *
10.28 Barrierefreiheit mit der Java Accessibility API
10.29 Zeitliches Ausführen mit dem javax.swing.Timer
10.30 Die Zusatzkomponentenbibliothek SwingX
10.30.1 Im Angebot: Erweiterte und neue Swing-Komponenten
10.30.2 Überblick über erweiterte Standard-Swing-Klassen
10.30.3 Neue Swing-Klassen
10.30.4 Weitere SwingX-Klassen
10.30.5 SwingX-Installation
10.31 Zum Weiterlesen
11 Grafikprogrammierung
11.1 Grundlegendes zum Zeichnen
11.1.1 Die paint(Graphics)-Methode für das AWT-Frame
11.1.2 Die ereignisorientierte Programmierung ändert Fensterinhalte
11.1.3 Zeichnen von Inhalten auf ein JFrame
11.1.4 Auffordern zum Neuzeichnen mit repaint(…)
11.1.5 Java 2D-API
11.2 Einfache Zeichenmethoden
11.2.1 Linien
11.2.2 Rechtecke
11.2.3 Ovale und Kreisbögen
11.2.4 Polygone und Polylines
11.3 Zeichenketten schreiben und Fonts
11.3.1 Zeichenfolgen schreiben
11.3.2 Die Font-Klasse
11.3.3 Font-Metadaten durch FontMetrics *
11.4 Geometrische Objekte
11.4.1 Die Schnittstelle Shape
11.4.2 Pfade *
11.5 Das Innere und Äußere einer Form
11.5.1 Farben und die Paint-Schnittstelle
11.5.2 Farben mit der Klasse Color
11.5.3 Composite und XOR *
11.5.4 Dicke und Art der Linien von Formen bestimmen über Stroke *
11.6 Bilder
11.6.1 Eine Übersicht über die Bilder-Bibliotheken
11.6.2 Bilder mit ImageIO lesen
11.6.3 Ein Bild zeichnen
11.6.4 Splash-Screen *
11.6.5 Bilder skalieren *
11.6.6 Schreiben mit ImageIO
11.6.7 Asynchrones Laden mit getImage(…) und dem MediaTracker *
11.7 Weitere Eigenschaften von Graphics *
11.7.1 Eine Kopie von Graphics erstellen
11.7.2 Koordinatensystem verschieben
11.7.3 Beschnitt (Clipping)
11.7.4 Zeichenhinweise durch RenderingHints
11.7.5 Transformationen mit einem AffineTransform-Objekt
11.8 Drucken *
11.8.1 Drucken der Inhalte
11.8.2 Bekannte Drucker
11.9 Benutzerinteraktionen automatisieren, Robot und Screenshots *
11.9.1 Der Roboter
11.9.2 Automatisch in die Tasten hauen
11.9.3 Automatisierte Maus-Operationen
11.9.4 Methoden zur Zeitsteuerung
11.9.5 Bildschirmabzüge (Screenshots)
11.9.6 Funktionsweise und Beschränkungen
11.9.7 MouseInfo und PointerInfo
11.10 Zum Weiterlesen
12 JavaFX
12.1 Das erste Programm mit JavaFX
12.2 Zentrale Typen in JavaFX
12.2.1 Szenegraph-Knoten und Container-Typen
12.2.2 Datenstrukturen
12.3 JavaFX-Komponenten und Layout-Container-Klassen
12.3.1 Überblick über die Komponenten
12.3.2 Listener/Handler zur Ereignisbeobachtung
12.3.3 Panels mit speziellen Layouts
12.4 Webbrowser
12.5 Geometrische Objekte
12.5.1 Linien und Rechtecke
12.5.2 Kreise, Ellipsen, Kreisförmiges
12.5.3 Es werde kurvig – quadratische und kubische Splines
12.5.4 Pfade *
12.5.5 Polygone und Polylines
12.5.6 Beschriftungen, Texte, Fonts
12.5.7 Die Oberklasse Shape
12.6 Füllart von Formen
12.6.1 Farben mit der Klasse Color
12.7 Grafiken
12.7.1 Klasse Image
12.7.2 ImageView
12.7.3 Programm-Icon/Fenster-Icon setzen
12.7.4 Zugriff auf die Pixel und neue Pixel-Bilder *
12.8 Deklarative Oberflächen mit FXML
12.9 Diagramme (Charts)
12.9.1 Kuchendiagramm
12.9.2 Balkendiagramm
12.10 Animationen
12.10.1 FadeTransition
12.10.2 ScaleTransition
12.10.3 Transitionen parallel oder sequenziell durchführen
12.11 Medien abspielen
12.12 Das Geometry-Paket *
12.13 JavaFX-Scene in Swing-Applikationen einbetten
12.14 Zum Weiterlesen
13 Netzwerkprogrammierung
13.1 Grundlegende Begriffe
13.2 URI und URL
13.2.1 Die Klasse URI
13.2.2 Die Klasse URL
13.2.3 Informationen über eine URL *
13.2.4 Der Zugriff auf die Daten über die Klasse URL
13.3 Die Klasse URLConnection *
13.3.1 Methoden und Anwendung von URLConnection
13.3.2 Protokoll- und Content-Handler
13.3.3 Im Detail: Von der URL zur URLConnection
13.3.4 Der Protokoll-Handler für JAR-Dateien
13.3.5 Basic Authentication und Proxy-Authentifizierung
13.4 Mit GET und POST Daten übergeben *
13.4.1 Kodieren der Parameter für Serverprogramme
13.4.2 In Wikipedia suchen und mit GET-Request absenden
13.4.3 POST-Request absenden
13.5 Host- und IP-Adressen
13.5.1 Lebt der Rechner?
13.5.2 IP-Adresse des lokalen Hosts
13.5.3 Das Netz ist klasse *
13.5.4 NetworkInterface
13.6 Mit dem Socket zum Server
13.6.1 Das Netzwerk ist der Computer
13.6.2 Sockets
13.6.3 Eine Verbindung zum Server aufbauen
13.6.4 Server unter Spannung – die Ströme
13.6.5 Die Verbindung wieder abbauen
13.6.6 Informationen über den Socket *
13.6.7 Reine Verbindungsdaten über SocketAddress *
13.7 Client-Server-Kommunikation
13.7.1 Warten auf Verbindungen
13.7.2 Ein Multiplikationsserver
13.7.3 Blockierendes Lesen
13.8 Apache HttpComponents und Commons Net *
13.8.1 HttpComponents
13.8.2 Apache Commons Net
13.9 Arbeitsweise eines Webservers *
13.9.1 Das Hypertext Transfer Protocol (HTTP)
13.9.2 Anfragen an den Server
13.9.3 Die Antworten vom Server
13.9.4 Webserver mit com.sun.net.httpserver.HttpServer
13.10 Verbindungen durch einen Proxy-Server *
13.10.1 System-Properties
13.10.2 Verbindungen durch die Proxy-API
13.11 Datagram-Sockets *
13.11.1 Die Klasse DatagramSocket
13.11.2 Datagramme und die Klasse DatagramPacket
13.11.3 Auf ein hereinkommendes Paket warten
13.11.4 Ein Paket zum Senden vorbereiten
13.11.5 Methoden der Klasse DatagramPacket
13.11.6 Das Paket senden
13.12 E-Mail *
13.12.1 Wie eine Elektropost um die Welt geht
13.12.2 Das Simple Mail Transfer Protocol und RFC 822
13.12.3 POP (Post Office Protocol)
13.12.4 Die JavaMail API
13.12.5 E-Mails mittels POP3 abrufen
13.12.6 Multipart-Nachrichten verarbeiten
13.12.7 E-Mails versenden
13.12.8 Ereignisse und Suchen
13.13 Tiefer liegende Netzwerkeigenschaften *
13.13.1 MAC-Adressen auslesen
13.13.2 Internet Control Message Protocol (ICMP)
13.14 Zum Weiterlesen
14 Verteilte Programmierung mit RMI
14.1 Entfernte Objekte und Methoden
14.1.1 Stellvertreter helfen bei entfernten Methodenaufrufen
14.1.2 Standards für entfernte Objekte
14.2 Java Remote Method Invocation
14.2.1 Zusammenspiel von Server, Registry und Client
14.2.2 Wie die Stellvertreter die Daten übertragen
14.2.3 Probleme mit entfernten Methoden
14.2.4 Nutzen von RMI bei Middleware-Lösungen
14.2.5 Zentrale Klassen und Schnittstellen
14.2.6 Entfernte und lokale Objekte im Vergleich
14.3 Auf der Serverseite
14.3.1 Entfernte Schnittstelle deklarieren
14.3.2 Remote-Objekt-Implementierung
14.3.3 Stellvertreterobjekte
14.3.4 Der Namensdienst (Registry)
14.3.5 Remote-Objekt-Implementierung exportieren und beim Namensdienst anmelden
14.3.6 Einfaches Logging
14.3.7 Aufräumen mit dem DGC *
14.4 Auf der Client-Seite
14.5 Entfernte Objekte übergeben und laden
14.5.1 Klassen vom RMI-Klassenlader nachladen
14.6 Weitere Eigenschaften von RMI
14.6.1 RMI und CORBA
14.6.2 RMI über HTTP getunnelt
14.6.3 Automatische Remote-Objekt-Aktivierung
14.7 Java Message Service (JMS)
14.8 Zum Weiterlesen
15 RESTful und SOAP-Web-Services
15.1 Web-Services
15.2 RESTful Web-Services
15.2.1 Aus Prinzip REST
15.2.2 Jersey
15.2.3 JAX-RS-Annotationen für den ersten REST-Service
15.2.4 Test-Server starten
15.2.5 REST-Services konsumieren
15.2.6 Content-Handler, Marshaller und verschiedene MIME-Typen
15.2.7 REST-Parameter
15.2.8 REST-Services mit Parametern über die Jersey-Client-API aufrufen
15.2.9 PUT-Anforderungen und das Senden von Daten
15.2.10 PUT/POST/DELETE-Sendungen mit der Jersey-Client-API absetzen
15.3 Daily Soap und das SOAP-Protokoll
15.3.1 Die technische Realisierung
15.3.2 Web-Service-APIs und Implementierungen
15.3.3 @WebService
15.3.4 Einen Web-Service definieren
15.3.5 Web-Services veröffentlichen
15.3.6 Einen JAX-WS-Client implementieren
15.4 Zum Weiterlesen
16 Technologien für die Infrastruktur
16.1 Property-Validierung durch Bean Validation
16.1.1 Technische Abhängigkeiten und POJOs
16.2 Wie eine Implementierung an die richtige Stelle kommt
16.2.1 Arbeiten mit dem ServiceLoader
16.2.2 Die Utility-Klasse Lookup als ServiceLoader-Fassade
16.2.3 Contexts and Dependency Injection (CDI) aus dem JSR-299
16.3 Zum Weiterlesen
17 Typen, Reflection und Annotationen
17.1 Metadaten
17.1.1 Metadaten durch Javadoc-Tags
17.2 Metadaten der Typen mit dem Class-Objekt
17.2.1 An ein Class-Objekt kommen
17.2.2 Eine Class ist ein Type
17.3 Klassenlader
17.3.1 Das Verzeichnis jre/lib/endorsed *
17.3.2 Die Klasse java.lang.ClassLoader
17.3.3 Hot Deployment mit dem URL-Classloader *
17.4 Metadaten der Typen mit dem Class-Objekt
17.4.1 Der Name des Typs
17.4.2 Was das Class-Objekt beschreibt *
17.4.3 instanceof mit Class-Objekten *
17.4.4 Oberklassen finden *
17.4.5 Implementierte Interfaces einer Klasse oder eines Interfaces *
17.4.6 Modifizierer und die Klasse Modifier *
17.4.7 Die Arbeit auf dem Feld *
17.5 Attribute, Methoden und Konstruktoren
17.5.1 Reflections – Gespür für die Attribute einer Klasse
17.5.2 Schnittstelle Member für Eigenschaften
17.5.3 Field-Klasse
17.5.4 Methoden einer Klasse erfragen
17.5.5 Properties einer Bean erfragen
17.5.6 Konstruktoren einer Klasse
17.5.7 Annotationen
17.6 Objekte erzeugen und manipulieren
17.6.1 Objekte erzeugen
17.6.2 Die Belegung der Variablen erfragen
17.6.3 Eine generische eigene toString()-Methode *
17.6.4 Variablen setzen
17.6.5 Bean-Zustände kopieren *
17.6.6 Private Attribute ändern
17.6.7 Methoden aufrufen
17.6.8 Statische Methoden aufrufen
17.6.9 Dynamische Methodenaufrufe bei festen Methoden beschleunigen *
17.6.10 java.lang.reflect.Parameter
17.7 Eigene Annotationstypen *
17.7.1 Annotationen zum Laden von Ressourcen
17.7.2 Neue Annotationen deklarieren
17.7.3 Annotationen mit genau einem Attribut
17.7.4 Element-Wert-Paare (Attribute) hinzufügen
17.7.5 Annotationsattribute vom Typ einer Aufzählung
17.7.6 Felder von Annotationsattributen
17.7.7 Vorbelegte Attribute
17.7.8 Annotieren von Annotationstypen
17.7.9 Deklarationen für unsere Ressourcen-Annotationen
17.7.10 Annotierte Elemente auslesen
17.7.11 Auf die Annotationsattribute zugreifen
17.7.12 Komplettbeispiel zum Initialisieren von Ressourcen
17.7.13 Mögliche Nachteile von Annotationen
17.8 Zum Weiterlesen
18 Dynamische Übersetzung und Skriptsprachen
18.1 Codegenerierung
18.1.1 Generierung von Java-Quellcode
18.1.2 Codetransformationen
18.1.3 Erstellen von Java-Bytecode
18.2 Programme mit der Java Compiler API übersetzen
18.2.1 Java Compiler API
18.2.2 Fehlerdiagnose
18.2.3 Eine im String angegebene Kompilationseinheit übersetzen
18.2.4 Wenn Quelle und Ziel der Speicher sind
18.3 Ausführen von Skripten
18.3.1 Java-Programme mit JavaScript schreiben
18.3.2 Kommandozeilenprogramme jrunscript und jjs
18.3.3 javax.script-API
18.3.4 JavaScript-Programme ausführen
18.3.6 Alternative Sprachen für die JVM
18.3.7 Von den Schwierigkeiten, dynamische Programmiersprachen auf die JVM zu bringen *
18.4 Zum Weiterlesen
19 Logging und Monitoring
19.1 Logging mit Java
19.1.1 Logging-APIs
19.1.2 Logging mit java.util.logging
19.1.3 Logging mit log4j *
19.1.4 Die Simple Logging Facade
19.1.5 Aktuelle Entwicklungen der Java-Logging-APIs
19.2 Systemzustände überwachen
19.3 MBean-Typen, MBean-Server und weitere Begriffe
19.3.1 MXBeans des Systems
19.4 Geschwätzige Programme und JConsole
19.4.1 JConsole
19.5 Der MBeanServer
19.6 Eine eigene Standard-MBean
19.6.1 Management-Schnittstelle
19.6.2 Implementierung der Managed-Ressource
19.6.3 Anmeldung beim Server
19.6.4 Eine eigene Bean in JConsole einbringen
19.7 Zum Weiterlesen
20 Sicherheitskonzepte
20.1 Zentrale Elemente der Java-Sicherheit
20.1.1 Sichere Java Virtual Machine
20.1.2 Der Sandkasten (Sandbox)
20.1.3 Security-API der Java SE
20.1.4 Cryptographic Service Providers
20.2 Sicherheitsmanager (Security-Manager)
20.2.1 Der Sicherheitsmanager bei Applets
20.2.2 Sicherheitsmanager aktivieren
20.2.3 Rechte durch Policy-Dateien vergeben
20.2.4 Erstellen von Rechtedateien mit dem grafischen Policy-Tool
20.2.5 Kritik an den Policies
20.3 Signierung
20.3.1 Warum signieren?
20.3.2 Digitale Ausweise und die Zertifizierungsstelle
20.3.3 Mit keytool Schlüssel erzeugen
20.3.4 Signieren mit jarsigner
20.4 Kryptografische Hashfunktion
20.4.1 Die MDx-Reihe
20.4.2 Secure Hash Algorithm (SHA)
20.4.3 Mit der Security-API einen Fingerabdruck berechnen
20.4.4 Die Klasse MessageDigest
20.5 Verschlüsseln von Daten(-strömen) *
20.5.1 Den Schlüssel, bitte
20.5.2 Verschlüsseln mit Cipher
20.5.3 Verschlüsseln von Datenströmen
20.6 Zum Weiterlesen
21 Datenbankmanagement mit JDBC
21.1 Relationale Datenbanken
21.1.1 Das relationale Modell
21.2 Datenbanken und Tools
21.2.1 HSQLDB
21.2.2 Weitere Datenbanken *
21.2.3 Eclipse Data Tools Platform (DTP) zum Durchschauen von Datenbanken
21.3 JDBC und Datenbanktreiber
21.3.1 Treibertypen *
21.3.2 JDBC-Versionen *
21.4 Eine Beispielabfrage
21.4.1 Schritte zur Datenbankabfrage
21.4.2 Ein Client für die HSQLDB-Datenbank
21.5 Mit Java an eine Datenbank andocken
21.5.1 Der Treiber-Manager *
21.5.2 Den Treiber laden
21.5.3 Eine Aufzählung aller Treiber *
21.5.4 Log-Informationen *
21.5.5 Verbindung zur Datenbank auf- und abbauen
21.6 Datenbankabfragen
21.6.1 Abfragen über das Statement-Objekt
21.6.2 Ergebnisse einer Abfrage in ResultSet
21.6.3 Java und SQL-Datentypen
21.6.4 Date, Time und Timestamp
21.6.5 Unicode in der Spalte korrekt auslesen
21.6.6 Eine SQL-NULL und wasNull() bei ResultSet
21.6.7 Wie viele Zeilen hat ein ResultSet? *
21.7 Elemente einer Datenbank ändern
21.7.1 Einzelne INSERT-, UPDATE- oder DELETE-Anweisungen senden
21.7.2 Aktualisierbares ResultSet
21.7.3 Batch-Updates
21.8 Die Ausnahmen bei JDBC, SQLException und Unterklassen
21.8.1 JDBC-Fehlerbasisklasse SQLException
21.8.2 SQLWarning
21.9 ResultSet und RowSet *
21.9.1 Die Schnittstelle RowSet
21.9.2 Implementierungen von RowSet
21.9.3 Der Typ CachedRowSet
21.9.4 Der Typ WebRowSet
21.10 Vorbereitete Anweisungen (Prepared Statements)
21.10.1 PreparedStatement-Objekte vorbereiten
21.10.2 Werte für die Platzhalter eines PreparedStatement
21.11 Transaktionen
21.13 Vorbereitete Datenbankverbindungen
21.13.1 DataSource
21.13.2 Gepoolte Datenbankverbindungen
21.14 Zum Weiterlesen
22 Java Native Interface (JNI)
22.1 Java Native Interface und Invocation-API
22.2 Eine C-Funktion in ein Java-Programm einbinden
22.2.1 Den Java-Code schreiben
22.3 Dynamische Bibliotheken erzeugen
22.3.1 Die Header-Datei erzeugen
22.3.2 Implementierung der Funktion in C
22.3.3 Die C-Programme übersetzen und die dynamische Bibliothek erzeugen
22.4 Nativ die String-Länge ermitteln
22.5 Erweiterte JNI-Eigenschaften
22.5.1 Klassendefinitionen
22.5.2 Zugriff auf Attribute
22.5.3 Methoden aufrufen
22.5.4 Threads und Synchronisation
22.5.5 @Native Markierungen *
22.6 Einfache Anbindung von existierenden Bibliotheken
22.6.1 JNA (Java Native Access)
22.6.2 BridJ
22.6.3 Generieren von JNI-Wrappern aus C++-Klassen und C-Headern
22.6.4 COM-Schnittstellen anzapfen
22.7 Invocation-API
22.8 Zum Weiterlesen
23 Dienstprogramme für die Java-Umgebung
23.1 Programme des JDK
23.2 Monitoringprogramme vom JDK
23.2.1 jps
23.2.2 jstat
23.2.3 jmap
23.2.4 jstack
23.2.5 jcmd
23.2.6 VisualVM
23.3 Programmieren mit der Tools-API
23.3.1 Java-Tools in Java implementiert
23.3.2 Tools aus eigenen Java-Programmen ansprechen
23.3.3 API-Dokumentation der Tools
23.3.4 Eigene Doclets
23.3.5 Auf den Compiler-AST einer Klasse zugreifen
23.4 Ant
23.4.1 Bezug und Installation von Ant
23.4.2 Das Build-Skript build.xml
23.4.3 Build den Build
23.4.4 Properties
23.4.5 Externe und vordefinierte Properties
23.4.6 Weitere Ant-Tasks
23.5 Disassembler, Decompiler und Obfuscator
23.5.1 Der Diassembler javap *
23.5.2 Decompiler
23.5.3 Obfuscatoren
23.6 Weitere Dienstprogramme
23.6.1 Sourcecode Beautifier
23.6.2 Java-Programme als Systemdienst ausführen
23.7 Zum Weiterlesen
Stichwortverzeichnis
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.
