Inhaltsverzeichnis
Vorwort
Organisation der Kapitel
Vorwort zur 1. Auflage
1 Neues in Java 7
1.1 Sprachänderungen
1.1.1 Zahlen im Binärsystem schreiben
1.1.2 Unterstriche bei Ganzzahlen
1.1.3 switch (String)
1.1.4 Zusammenfassen gleicher catch-Blöcke mit dem multi-catch
1.1.5 Präzisiertes rethrows
1.1.6 Automatisches Ressourcen-Management (try mit Ressourcen)
1.1.7 try mit Ressourcen
1.1.8 Ausnahmen vom close() bleiben bestehen
1.1.9 Die Schnittstelle AutoCloseable
1.1.10 Mehrere Ressourcen nutzen
1.1.11 Unterdrückte Ausnahmen *
1.2 JVM-Änderungen
1.2.1 invokedynamic
1.3 Neue Pakete und Klassen
1.3.1 Weitere Änderungen
2 Threads und nebenläufige Programmierung
2.1 Threads erzeugen
2.1.1 Threads über die Schnittstelle Runnable implementieren
2.1.2 Thread mit Runnable starten
2.1.3 Die Klasse Thread erweitern
2.2 Thread-Eigenschaften und -Zustände
2.2.1 Der Name eines Threads
2.2.2 Wer bin ich?
2.2.3 Die Zustände eines Threads *
2.2.4 Schläfer gesucht
2.2.5 Mit yield() auf Rechenzeit verzichten
2.2.6 Der Thread als Dämon
2.2.7 Das Ende eines Threads
2.2.8 Einen Thread höflich mit Interrupt beenden
2.2.9 UncaughtExceptionHandler für unbehandelte Ausnahmen
2.2.10 Der stop() von außen und die Rettung mit ThreadDeath *
2.2.11 Ein Rendezvous mit join() *
2.2.12 Arbeit niederlegen und wieder aufnehmen *
2.2.13 Priorität *
2.3 Der Ausführer (Executor) kommt
2.3.1 Die Schnittstelle Executor
2.3.2 Die Thread-Pools
2.3.3 Threads mit Rückgabe über Callable
2.3.4 Mehrere Callable abarbeiten
2.3.5 ScheduledExecutorService für wiederholende Ausgaben und Zeitsteuerungen nutzen
2.4 Synchronisation über kritische Abschnitte
2.4.1 Gemeinsam genutzte Daten
2.4.2 Probleme beim gemeinsamen Zugriff und kritische Abschnitte
2.4.3 Punkte parallel initialisieren
2.4.4 i++ sieht atomar aus, ist es aber nicht *
2.4.5 Kritische Abschnitte schützen
2.4.6 Kritische Abschnitte mit ReentrantLock schützen
2.4.7 Synchronisieren mit synchronized
2.4.8 Synchronized-Methoden der Klasse StringBuffer *
2.4.9 Mit synchronized synchronisierte Blöcke
2.4.10 Dann machen wir doch gleich alles synchronisiert!
2.4.11 Lock-Freigabe im Fall von Exceptions
2.4.12 Deadlocks
2.4.13 Mit synchronized nachträglich synchronisieren *
2.4.14 Monitore sind reentrant – gut für die Geschwindigkeit *
2.4.15 Synchronisierte Methodenaufrufe zusammenfassen *
2.5 Synchronisation über Warten und Benachrichtigen
2.5.1 Die Schnittstelle Condition
2.5.2 It’s Disco-Time *
2.5.3 Warten mit wait() und Aufwecken mit notify() *
2.5.4 Falls der Lock fehlt: IllegalMonitorStateException *
2.6 Datensynchronisation durch besondere Concurrency-Klassen *
2.6.1 Semaphor
2.6.2 Barrier und Austausch
2.6.3 Stop and go mit Exchanger
2.7 Atomare Operationen und frische Werte mit volatile *
2.7.1 Der Modifizierer volatile bei Objekt-/Klassenvariablen
2.7.2 Das Paket java.util.concurrent.atomic
2.8 Teile und herrsche mit Fork und Join *
2.8.1 Algorithmendesign per »teile und herrsche«
2.8.2 Paralleles Lösen von D&C-Algorithmen
2.8.3 Fork und Join
2.9 Mit dem Thread verbundene Variablen *
2.9.1 ThreadLocal
2.9.2 InheritableThreadLocal
2.9.3 ThreadLocalRandom als Zufallszahlengenerator
2.9.4 ThreadLocal bei der Performance-Optimierung
2.10 Threads in einer Thread-Gruppe *
2.10.1 Aktive Threads in der Umgebung
2.10.2 Etwas über die aktuelle Thread-Gruppe herausfinden
2.10.3 Threads in einer Thread-Gruppe anlegen
2.10.4 Methoden von Thread und ThreadGroup im Vergleich
2.11 Zeitgesteuerte Abläufe
2.11.1 Die Typen Timer und TimerTask
2.11.2 Job-Scheduler Quartz
2.12 Einen Abbruch der virtuellen Maschine erkennen
2.13 Zum Weiterlesen
3 Datenstrukturen und Algorithmen
3.1 Datenstrukturen und die Collection-API
3.1.1 Designprinzip mit Schnittstellen, abstrakten und konkreten Klassen
3.1.2 Die Basis-Schnittstellen Collection und Map
3.1.3 Die Utility-Klassen Collections und Arrays
3.1.4 Das erste Programm mit Container-Klassen
3.1.5 Die Schnittstelle Collection und Kernkonzepte
3.1.6 Schnittstellen, die Collection erweitern, und Map
3.1.7 Konkrete Container-Klassen
3.1.8 Generische Datentypen in der Collection-API
3.1.9 Die Schnittstelle Iterable und das erweiterte for
3.2 Listen
3.2.1 Erstes Listen-Beispiel
3.2.2 Auswahlkriterium ArrayList oder LinkedList
3.2.3 Die Schnittstelle List
3.2.4 ArrayList
3.2.5 LinkedList
3.2.6 Der Feld-Adapter Arrays.asList()
3.2.7 ListIterator *
3.2.8 toArray() von Collection verstehen – die Gefahr einer Falle erkennen
3.2.9 Primitive Elemente in Datenstrukturen verwalten
3.3 Mengen (Sets)
3.3.1 Ein erstes Mengen-Beispiel
3.3.2 Methoden der Schnittstelle Set
3.3.3 HashSet
3.3.4 TreeSet – die sortierte Menge
3.3.5 Die Schnittstellen NavigableSet und SortedSet
3.3.6 LinkedHashSet
3.4 Stack (Kellerspeicher, Stapel)
3.4.1 Die Methoden von Stack
3.5 Queues (Schlangen) und Deques
3.5.1 Queue-Klassen
3.5.2 Deque-Klassen
3.5.3 Blockierende Queues und Prioritätswarteschlangen
3.5.4 PriorityQueue
3.6 Assoziative Speicher
3.6.1 Die Klassen HashMap und TreeMap
3.6.2 Einfügen und Abfragen der Datenstruktur
3.6.3 Über die Bedeutung von equals() und hashCode()
3.6.4 Eigene Objekte hashen
3.6.5 IdentityHashMap
3.6.6 Das Problem von veränderten Elementen
3.6.7 Aufzählungen und Ansichten des Assoziativspeichers
3.6.8 Die Arbeitsweise einer Hash-Tabelle *
3.7 Die Properties-Klasse
3.7.1 Properties setzen und lesen
3.7.2 Properties verketten
3.7.3 Hierarchische Eigenschaften
3.7.4 Eigenschaften auf der Konsole ausgeben *
3.7.5 Properties laden und speichern
3.7.6 Klassenbeziehungen: Properties und Hashtable *
3.8 Mit einem Iterator durch die Daten wandern
3.8.1 Die Schnittstelle Iterator
3.8.2 Der Iterator kann (eventuell auch) löschen
3.8.3 Einen Zufallszahleniterator schreiben
3.8.4 Iteratoren von Sammlungen, das erweiterte for und Iterable
3.8.5 Fail-Fast-Iterator und die ConcurrentModificationException
3.8.6 Die Schnittstelle Enumerator *
3.9 Algorithmen in Collections
3.9.1 Die Bedeutung von Ordnung mit Comparator und Comparable
3.9.2 Sortieren
3.9.3 Den größten und kleinsten Wert einer Collection finden
3.9.4 Nicht-änderbare Datenstrukturen, immutable oder nur-lesen?
3.9.5 Null Object Pattern und leere Sammlungen/Iteratoren zurückgeben
3.9.6 Mit der Halbierungssuche nach Elementen fahnden
3.9.7 Ersetzen, Kopieren, Füllen, Umdrehen, Rotieren *
3.9.8 Listen durchwürfeln *
3.9.9 Häufigkeit eines Elements *
3.9.10 Singletons *
3.9.11 nCopies() *
3.10 Spezielle thread-sichere Datenstrukturen
3.10.1 Wait-free-Algorithmen
3.10.2 Nebenläufiger Assoziativspeicher und die Schnittstelle ConcurrentMap
3.10.3 ConcurrentLinkedQueue
3.10.4 CopyOnWriteArrayList und CopyOnWriteArraySet
3.10.5 Wrapper zur Synchronisation
3.10.6 Blockierende Warteschlangen
3.10.7 ArrayBlockingQueue und LinkedBlockingQueue
3.10.8 PriorityBlockingQueue
3.11 Google Guava (aka Google Collections Library)
3.11.1 Beispiel Multi-Set und Multi-Map
3.11.2 Datenstrukturen aus Guava
3.11.3 Utility-Klassen von Guava
3.11.4 Prädikate
3.11.5 Transformationen
3.12 Die Klasse BitSet für Bitmengen *
3.12.1 Ein BitSet anlegen, füllen und erfragen
3.12.2 Mengenorientierte Operationen
3.12.3 Methodenübersicht
3.12.4 Primzahlen in einem BitSet verwalten
3.13 Zum Weiterlesen
4 Raum und Zeit
4.1 Weltzeit *
4.2 Wichtige Datum-Klassen im Überblick
4.2.1 Der 1.1.1970
4.2.2 System.currentTimeMillis()
4.2.3 Einfache Zeitumrechnungen durch TimeUnit
4.3 Sprachen der Länder
4.3.1 Sprachen und Regionen über Locale-Objekte
4.4 Internationalisierung und Lokalisierung
4.4.1 ResourceBundle-Objekte und Ressource-Dateien
4.4.2 Ressource-Dateien zur Lokalisierung
4.4.3 Die Klasse ResourceBundle
4.4.4 Ladestrategie für ResourceBundle-Objekte
4.5 Die Klasse Date
4.5.1 Objekte erzeugen und Methoden nutzen
4.5.2 Date-Objekte sind nicht immutable
4.6 Calendar und GregorianCalendar
4.6.1 Die abstrakte Klasse Calendar
4.6.2 Der gregorianische Kalender
4.6.3 Calendar nach Date und Millisekunden fragen
4.6.4 Ostertage *
4.6.5 Abfragen und Setzen von Datumselementen über Feldbezeichner
4.6.6 Wie viele Tage hat der Monat, oder wie viele Monate hat ein Jahr? *
4.6.7 Wann beginnt die Woche und wann die erste Woche im Jahr? *
4.7 Zeitzonen in Java *
4.7.1 Zeitzonen durch die Klasse TimeZone repräsentieren
4.7.2 SimpleTimeZone
4.7.3 Methoden von TimeZone
4.8 Zeitdauern und der XML-Datentyp Duration *
4.8.1 DatatypeFactory als Fabrik
4.8.2 Die Duration-Klasse und ihre Methoden
4.9 Formatieren und Parsen von Datumsangaben
4.9.1 Ausgaben mit printf()
4.9.2 Mit DateFormat und SimpleDateFormat formatieren
4.9.3 Parsen von Datumswerten
4.10 Zum Weiterlesen
5 Dateien, Verzeichnisse und Dateizugriffe
5.1 Datei und Verzeichnis
5.1.1 Dateien und Verzeichnisse mit der Klasse File
5.1.2 Verzeichnis oder Datei? Existiert es?
5.1.3 Verzeichnis- und Dateieigenschaften/-attribute
5.1.4 Umbenennen und Verzeichnisse anlegen
5.1.5 Verzeichnisse auflisten und Dateien filtern
5.1.6 Dateien berühren, neue Dateien anlegen, temporäre Dateien
5.1.7 Dateien und Verzeichnisse löschen
5.1.8 Verzeichnisse nach Dateien iterativ durchsuchen *
5.1.9 Wurzelverzeichnis, Laufwerksnamen, Plattenspeicher *
5.1.10 URL-, URI- und Path-Objekte aus einem File-Objekt ableiten *
5.1.11 Mit Locking Dateien sperren *
5.1.12 Sicherheitsprüfung *
5.1.13 Zugriff auf SMB-Server mit jCIFS *
5.2 Dateien mit wahlfreiem Zugriff
5.2.1 Ein RandomAccessFile zum Lesen und Schreiben öffnen
5.2.2 Aus dem RandomAccessFile lesen
5.2.3 Schreiben mit RandomAccessFile
5.2.4 Die Länge des RandomAccessFile
5.2.5 Hin und her in der Datei
5.3 Dateisysteme unter NIO.2
5.3.1 FileSystem und Path
5.3.2 Die Utility-Klasse Files
5.3.3 Dateien kopieren und verschieben
5.3.4 Dateiattribute *
5.3.5 Neue Dateien, Verzeichnisse, symbolische Verknüpfungen anlegen und löschen
5.3.6 MIME-Typen testen *
5.3.7 Verzeichnislistings (DirectoryStream) und Filter *
5.3.8 Rekursive Abläufe des Verzeichnisbaums (FileVisitor) *
5.3.9 Dateisysteme und Dateisystemattribute *
5.3.10 Verzeichnisse im Dateisystem überwachen *
5.4 Wahlfreier Zugriff mit SeekableByteChannel und ByteBuffer *
5.4.1 SeekableByteChannel
5.4.2 ByteBuffer
5.4.3 Beispiel mit Path + SeekableByteChannel + ByteBuffer
5.4.4 FileChannel
5.5 Zum Weiterlesen
6 Datenströme
6.1 Stream-Klassen und Reader/Writer am Beispiel von Dateien
6.1.1 Mit dem FileWriter Texte in Dateien schreiben
6.1.2 Zeichen mit der Klasse FileReader lesen
6.1.3 Kopieren mit FileOutputStream und FileInputStream
6.1.4 Das FileDescriptor-Objekt *
6.1.5 Datenströme über Files mit NIO.2 beziehen
6.2 Basisklassen für die Ein-/Ausgabe
6.2.1 Die abstrakten Basisklassen
6.2.2 Übersicht über Ein-/Ausgabeklassen
6.2.3 Die abstrakte Basisklasse OutputStream
6.2.4 Die Schnittstellen Closeable, AutoCloseable und Flushable
6.2.5 Ein Datenschlucker *
6.2.6 Die abstrakte Basisklasse InputStream
6.2.7 Ressourcen aus dem Klassenpfad und aus Jar?Archiven laden
6.2.8 Ströme mit SequenceInputStream zusammensetzen *
6.2.9 Die abstrakte Basisklasse Writer
6.2.10 Die Schnittstelle Appendable *
6.2.11 Die abstrakte Basisklasse Reader
6.3 Formatierte Textausgaben
6.3.1 Die Klassen PrintWriter und PrintStream
6.3.2 System.out, System.err und System.in
6.4 Schreiben und Lesen aus Strings und Byte-Feldern
6.4.1 Mit dem StringWriter ein String-Objekt füllen
6.4.2 CharArrayWriter
6.4.3 StringReader und CharArrayReader
6.4.4 Mit ByteArrayOutputStream in ein Byte-Feld schreiben
6.4.5 Mit ByteArrayInputStream aus einem Byte-Feld lesen
6.5 Datenströme filtern und verketten
6.5.1 Streams als Filter verketten (verschachteln)
6.5.2 Gepufferte Ausgaben mit BufferedWriter und BufferedOutputStream
6.5.3 Gepufferte Eingaben mit BufferedReader/BufferedInputStream
6.5.4 LineNumberReader zählt automatisch Zeilen mit *
6.5.5 Daten mit der Klasse PushbackReader zurücklegen *
6.5.6 DataOutputStream/DataInputStream *
6.5.7 Basisklassen für Filter *
6.5.8 Die Basisklasse FilterWriter *
6.5.9 Ein LowerCaseWriter *
6.5.10 Eingaben mit der Klasse FilterReader filtern *
6.5.11 Anwendungen für FilterReader und FilterWriter *
6.6 Vermittler zwischen Byte-Streams und Unicode-Strömen
6.6.1 Datenkonvertierung durch den OutputStreamWriter
6.6.2 Automatische Konvertierungen mit dem InputStreamReader
6.7 Kommunikation zwischen Threads mit Pipes *
6.7.1 PipedOutputStream und PipedInputStream
6.7.2 PipedWriter und PipedReader
6.8 Prüfsummen
6.8.1 Die Schnittstelle Checksum
6.8.2 Die Klasse CRC32
6.8.3 Die Adler32-Klasse
6.9 Persistente Objekte und Serialisierung
6.9.1 Objekte mit der Standard-Serialisierung speichern und lesen
6.9.2 Zwei einfache Anwendungen der Serialisierung *
6.9.3 Die Schnittstelle Serializable
6.9.4 Nicht serialisierbare Attribute aussparen
6.9.5 Das Abspeichern selbst in die Hand nehmen
6.9.6 Tiefe Objektkopien *
6.9.7 Versionenverwaltung und die SUID
6.9.8 Wie die ArrayList serialisiert *
6.9.9 Probleme mit der Serialisierung
6.10 Alternative Datenaustauschformate
6.10.1 Serialisieren in XML-Dateien
6.10.2 XML-Serialisierung von JavaBeans mit JavaBeans Persistence *
6.10.3 Die Open-Source-Bibliothek XStream *
6.10.4 Binäre Serialisierung mit Google Protocol Buffers *
6.11 Tokenizer *
6.11.1 StreamTokenizer
6.12 Zum Weiterlesen
7 Die eXtensible Markup Language (XML)
7.1 Auszeichnungssprachen
7.1.1 Die Standard Generalized Markup Language (SGML)
7.1.2 Extensible Markup Language (XML)
7.2 Eigenschaften von XML-Dokumenten
7.2.1 Elemente und Attribute
7.2.2 Beschreibungssprache für den Aufbau von XML-Dokumenten
7.2.3 Schema – eine Alternative zu DTD
7.2.4 Namensraum (Namespace)
7.2.5 XML-Applikationen *
7.3 Die Java-APIs für XML
7.3.1 Das Document Object Model (DOM)
7.3.2 Simple API for XML Parsing (SAX)
7.3.3 Pull-API StAX
7.3.4 Java Document Object Model (JDOM)
7.3.5 JAXP als Java-Schnittstelle zu XML
7.3.6 DOM-Bäume einlesen mit JAXP *
7.4 Java Architecture for XML Binding (JAXB)
7.4.1 Bean für JAXB aufbauen
7.4.2 JAXBContext und die Marshaller
7.4.3 Ganze Objektgraphen schreiben und lesen
7.4.4 Validierung
7.4.5 Weitere JAXB-Annotationen *
7.4.6 Beans aus XML-Schema-Datei generieren
7.5 Serielle Verarbeitung mit StAX
7.5.1 Unterschiede der Verarbeitungsmodelle
7.5.2 XML-Dateien mit dem Cursor-Verfahren lesen
7.5.3 XML-Dateien mit dem Iterator-Verfahren verarbeiten *
7.5.4 Mit Filtern arbeiten *
7.5.5 XML-Dokumente schreiben
7.6 Serielle Verarbeitung von XML mit SAX *
7.6.1 Schnittstellen von SAX
7.6.2 SAX-Parser erzeugen
7.6.3 Operationen der Schnittstelle ContentHandler
7.6.4 ErrorHandler und EntityResolver
7.7 XML-Dateien mit JDOM verarbeiten
7.7.1 JDOM beziehen
7.7.2 Paketübersicht *
7.7.3 Die Document-Klasse
7.7.4 Eingaben aus der Datei lesen
7.7.5 Das Dokument im XML-Format ausgeben
7.7.6 Der Dokumenttyp *
7.7.7 Elemente
7.7.8 Zugriff auf Elementinhalte
7.7.9 Liste mit Unterelementen erzeugen *
7.7.10 Neue Elemente einfügen und ändern
7.7.11 Attributinhalte lesen und ändern
7.7.12 XPath
7.8 Transformationen mit XSLT *
7.8.1 Templates und XPath als Kernelemente von XSLT
7.8.2 Umwandlung von XML-Dateien mit JDOM und JAXP
7.9 XML-Schema-Validierung *
7.9.1 SchemaFactory und Schema
7.9.2 Validator
7.9.3 Validierung unterschiedlicher Datenquellen durchführen
7.10 Zum Weiterlesen
8 Dateiformate
8.1 Einfache Dateiformate für strukturierte Daten
8.1.1 Property-Dateien
8.1.2 CSV-Dateien
8.1.3 JSON-Serialisierung mit Jackson
8.2 Dokumentenformate
8.2.1 (X)HTML
8.2.2 PDF-Dokumente
8.2.3 Microsoft Office-Dokumente
8.2.4 OASIS Open Document Format
8.3 Datenkompression *
8.3.1 Java-Unterstützung beim Komprimieren
8.3.2 Daten packen und entpacken
8.3.3 Datenströme komprimieren
8.3.4 Zip-Archive
8.3.5 Jar-Archive
8.4 Bild-Formate
8.5 Audio-Dateien
8.5.1 Die Arbeit mit AudioClip
8.5.2 MIDI-Dateien abspielen
9 Grafische Oberflächen mit Swing
9.1 Fenster zur Welt
9.1.1 Swing-Fenster mit javax.swing.JFrame darstellen
9.1.2 Fenster schließbar machen – setDefaultCloseOperation()
9.1.3 Sichtbarkeit des Fensters
9.1.4 Größe und Position des Fensters verändern
9.1.5 Fenster- und Dialog-Dekoration, Transparenz *
9.1.6 Die Klasse Toolkit *
9.1.7 Dynamisches Layout während einer Größenänderung *
9.1.8 Zum Vergleich: AWT-Fenster darstellen *
9.2 Beschriftungen (JLabel)
9.2.1 Mehrzeiliger Text, HTML in der Darstellung
9.3 Icon und ImageIcon für Bilder auf Swing-Komponenten
9.3.1 Die Klasse ImageIcon
9.3.2 Die Schnittstelle Icon und eigene Icons zeichnen *
9.4 Es tut sich was – Ereignisse beim AWT
9.4.1 Die Ereignisquellen und Horcher (Listener) von Swing
9.4.2 Listener implementieren
9.4.3 Listener bei dem Ereignisauslöser anmelden/abmelden
9.4.4 Adapterklassen nutzen
9.4.5 Innere Mitgliedsklassen und innere anonyme Klassen
9.4.6 Aufrufen der Listener im AWT-Event-Thread
9.4.7 Ereignisse, etwas genauer betrachtet *
9.5 Schaltflächen
9.5.1 Normale Schaltflächen (JButton)
9.5.2 Der aufmerksame ActionListener
9.5.3 Schaltflächen-Ereignisse vom Typ ActionEvent
9.5.4 Basisklasse AbstractButton
9.5.5 Wechselknopf (JToggleButton)
9.6 Textkomponenten
9.6.1 Text in einer Eingabezeile
9.6.2 Die Oberklasse der Text-Komponenten (JTextComponent)
9.6.3 Geschützte Eingaben (JPasswordField)
9.6.4 Validierende Eingabefelder (JFormattedTextField)
9.6.5 Einfache mehrzeilige Textfelder (JTextArea)
9.6.6 Editor-Klasse (JEditorPane) *
9.7 Swing Action *
9.8 JComponent und Component als Basis aller Komponenten
9.8.1 Hinzufügen von Komponenten
9.8.2 Tooltips (Kurzhinweise)
9.8.3 Rahmen (Border) *
9.8.4 Fokus und Navigation *
9.8.5 Ereignisse jeder Komponente *
9.8.6 Die Größe und Position einer Komponente *
9.8.7 Komponenten-Ereignisse *
9.8.8 UI-Delegate – der wahre Zeichner *
9.8.9 Undurchsichtige (opake) Komponente *
9.8.10 Properties und Listener für Änderungen *
9.9 Container
9.9.1 Standardcontainer (JPanel)
9.9.2 Bereich mit automatischen Rollbalken (JScrollPane)
9.9.3 Reiter (JTabbedPane)
9.9.4 Teilungskomponente (JSplitPane)
9.10 Alles Auslegungssache: die Layoutmanager
9.10.1 Übersicht über Layoutmanager
9.10.2 Zuweisen eines Layoutmanagers
9.10.3 Im Fluss mit FlowLayout
9.10.4 BoxLayout
9.10.5 Mit BorderLayout in alle Himmelsrichtungen
9.10.6 Rasteranordnung mit GridLayout
9.10.7 Der GridBagLayoutmanager *
9.10.8 Null-Layout *
9.10.9 Weitere Layoutmanager
9.11 Rollbalken und Schieberegler
9.11.1 Schieberegler (JSlider)
9.11.2 Rollbalken (JScrollBar) *
9.12 Kontrollfelder, Optionsfelder, Kontrollfeldgruppen
9.12.1 Kontrollfelder (JCheckBox)
9.12.2 ItemSelectable, ItemListener und das ItemEvent
9.12.3 Sich gegenseitig ausschließende Optionen (JRadioButton)
9.13 Fortschritte bei Operationen überwachen *
9.13.1 Fortschrittsbalken (JProgressBar)
9.13.2 Dialog mit Fortschrittsanzeige (ProgressMonitor)
9.14 Menüs und Symbolleisten
9.14.1 Die Menüleisten und die Einträge
9.14.2 Menüeinträge definieren
9.14.3 Einträge durch Action-Objekte beschreiben
9.14.4 Mit der Tastatur: Mnemonics und Shortcut
9.14.5 Der Tastatur-Shortcut (Accelerator)
9.14.6 Tastenkürzel (Mnemonics)
9.14.7 Symbolleisten alias Toolbars
9.14.8 Popup-Menüs
9.14.9 System-Tray nutzen *
9.15 Das Model-View-Controller-Konzept
9.16 Auswahlmenüs, Listen und Spinner
9.16.1 Listen (JList)
9.16.2 Auswahlmenü (JComboBox)
9.16.3 Drehfeld (JSpinner) *
9.16.4 Datumsauswahl *
9.17 Tabellen (JTable)
9.17.1 Ein eigenes Tabellen-Model
9.17.2 Basisklasse für eigene Modelle (AbstractTableModel)
9.17.3 Ein vorgefertigtes Standard-Modell (DefaultTableModel)
9.17.4 Ein eigener Renderer für Tabellen
9.17.5 Zell-Editoren
9.17.6 Größe und Umrandung der Zellen *
9.17.7 Spalteninformationen *
9.17.8 Tabellenkopf von Swing-Tabellen *
9.17.9 Selektionen einer Tabelle *
9.17.10 Automatisches Sortieren und Filtern mit RowSorter *
9.18 Bäume (JTree)
9.18.1 JTree und sein TreeModel und TreeNode
9.18.2 Selektionen bemerken
9.18.3 Das TreeModel von JTree *
9.19 JRootPane und JDesktopPane *
9.19.1 Wurzelkomponente der Top-Level-Komponenten (JRootPane)
9.19.2 JDesktopPane und die Kinder von JInternalFrame
9.19.3 JLayeredPane
9.20 Dialoge und Window-Objekte
9.20.1 JWindow und JDialog
9.20.2 Modal oder nicht-modal?
9.20.3 Standarddialoge mit JOptionPane
9.20.4 Der Dateiauswahldialog
9.20.5 Der Farbauswahldialog JColorChooser *
9.21 Flexibles Java-Look-and-Feel
9.21.1 Look and Feel global setzen
9.21.2 UIManager
9.21.3 Die Windows-Optik mit JGoodies Looks verbessern *
9.22 Swing-Komponenten neu erstellen oder verändern *
9.22.1 Überlagerungen mit dem Swing-Komponenten-Dekorator JLayer
9.23 Die Zwischenablage (Clipboard)
9.23.1 Clipboard-Objekte
9.23.2 Mit Transferable auf den Inhalt zugreifen
9.23.3 DataFlavor ist das Format der Daten in der Zwischenablage
9.23.4 Einfügungen in der Zwischenablage erkennen
9.23.5 Drag & Drop
9.24 Undo durchführen *
9.25 AWT, Swing und die Threads
9.25.1 Ereignisschlange (EventQueue) und AWT-Event-Thread
9.25.2 Swing ist nicht thread-sicher
9.25.3 invokeLater() und invokeAndWait()
9.25.4 SwingWorker
9.25.5 Eigene Ereignisse in die Queue setzen *
9.25.6 Auf alle Ereignisse hören *
9.26 Barrierefreiheit mit der Java Accessibility API
9.27 Zeitliches Ausführen mit dem javax.swing.Timer
9.28 Die Zusatzkomponentenbibliothek SwingX
9.28.1 Im Angebot: Erweiterte und neue Swing-Komponenten
9.28.2 Überblick über erweiterte Standard-Swing-Klassen
9.28.3 Neue Swing-Klassen
9.28.4 Weitere SwingX-Klassen
9.28.5 SwingX-Installation
9.29 Alternativen zu programmierten Oberflächen, AWT und Swing *
9.29.1 Deklarative Beschreibungen der Oberfläche: Swing JavaBuilder, Swixml
9.29.2 SWT (Standard Widget Toolkit)
9.30 Zum Weiterlesen
10 Grafikprogrammierung
10.1 Grundlegendes zum Zeichnen
10.1.1 Die paint()-Methode für das AWT-Frame
10.1.2 Zeichnen von Inhalten auf ein JFrame
10.1.3 Auffordern zum Neuzeichnen mit repaint()
10.1.4 Java 2D-API
10.2 Einfache Zeichenmethoden
10.2.1 Linien
10.2.2 Rechtecke
10.2.3 Ovale und Kreisbögen
10.2.4 Polygone und Polylines
10.3 Zeichenketten schreiben und Fonts
10.3.1 Zeichenfolgen schreiben
10.3.2 Die Font-Klasse
10.3.3 Einen neuen Font aus einem gegebenen Font ableiten
10.3.4 Zeichensätze des Systems ermitteln *
10.3.5 Neue TrueType-Fonts in Java nutzen
10.3.6 Font-Metadaten durch FontMetrics *
10.4 Geometrische Objekte
10.4.1 Die Schnittstelle Shape
10.4.2 Kreisförmiges
10.4.3 Kurviges *
10.4.4 Area und die konstruktive Flächengeometrie *
10.4.5 Pfade *
10.4.6 Punkt in einer Form, Schnitt von Linien, Abstand Punkt/Linie *
10.5 Das Innere und Äußere einer Form
10.5.1 Farben und die Paint-Schnittstelle
10.5.2 Farben mit der Klasse Color
10.5.3 Die Farben des Systems über SystemColor *
10.5.4 Composite und Xor *
10.5.5 Dicke und Art der Linien von Formen bestimmen über Stroke *
10.6 Bilder
10.6.1 Eine Übersicht über die Bilder-Bibliotheken
10.6.2 Bilder mit ImageIO lesen
10.6.3 Ein Bild zeichnen
10.6.4 Programm-Icon/Fenster-Icon setzen
10.6.5 Splash-Screen *
10.6.6 Bilder im Speicher erzeugen *
10.6.7 Pixel für Pixel auslesen und schreiben *
10.6.8 Bilder skalieren *
10.6.9 Schreiben mit ImageIO
10.6.10 Asynchrones Laden mit getImage() und dem MediaTracker *
10.7 Weitere Eigenschaften von Graphics *
10.7.1 Eine Kopie von Graphics erstellen
10.7.2 Koordinatensystem verschieben
10.7.3 Beschnitt (Clipping)
10.7.4 Zeichenhinweise durch RenderingHints
10.7.5 Transformationen mit einem AffineTransform-Objekt
10.8 Drucken *
10.8.1 Drucken der Inhalte
10.8.2 Bekannte Drucker
10.9 Benutzerinteraktionen automatisieren, Robot und Screenshots *
10.9.1 Der Roboter
10.9.2 Automatisch in die Tasten hauen
10.9.3 Automatisierte Mausoperationen
10.9.4 Methoden zur Zeitsteuerung
10.9.5 Bildschirmabzüge (Screenshots)
10.9.6 Funktionsweise und Beschränkungen
10.9.7 MouseInfo und PointerInfo
10.10 Zum Weiterlesen
11 Netzwerkprogrammierung
11.1 Grundlegende Begriffe
11.2 URI und URL
11.2.1 Die Klasse URI
11.2.2 Die Klasse URL
11.2.3 Informationen über eine URL *
11.2.4 Der Zugriff auf die Daten über die Klasse URL
11.3 Die Klasse URLConnection *
11.3.1 Methoden und Anwendung von URLConnection
11.3.2 Protokoll- und Content-Handler
11.3.3 Im Detail: vom URL zur URLConnection
11.3.4 Der Protokoll-Handler für Jar-Dateien
11.3.5 Basic Authentication und Proxy-Authentifizierung
11.4 Mit GET und POST Daten übergeben *
11.4.1 Kodieren der Parameter für Serverprogramme
11.4.2 Eine Suchmaschine mit GET-Request ansprechen
11.4.3 POST-Request absenden
11.5 Host- und IP-Adressen
11.5.1 Lebt der Rechner?
11.5.2 IP-Adresse des lokalen Hosts
11.5.3 Das Netz ist klasse
11.5.4 NetworkInterface
11.6 Mit dem Socket zum Server
11.6.1 Das Netzwerk ist der Computer
11.6.2 Sockets
11.6.3 Eine Verbindung zum Server aufbauen
11.6.4 Server unter Spannung: die Ströme
11.6.5 Die Verbindung wieder abbauen
11.6.6 Informationen über den Socket *
11.6.7 Reine Verbindungsdaten über SocketAddress *
11.7 Client-Server-Kommunikation
11.7.1 Warten auf Verbindungen
11.7.2 Ein Multiplikationsserver
11.7.3 Blockierendes Lesen
11.7.4 Von außen erreichbar sein *
11.8 Apache HttpComponents und Commons Net *
11.8.1 HttpComponents
11.8.2 Apache Commons Net
11.9 Arbeitsweise eines Webservers *
11.9.1 Das Hypertext Transfer Protocol (HTTP)
11.9.2 Anfragen an den Server
11.9.3 Die Antworten vom Server
11.9.4 Webserver mit com.sun.net.httpserver.HttpServer
11.10 Verbindungen durch einen Proxy-Server *
11.10.1 System-Properties
11.10.2 Verbindungen durch die Proxy-API
11.11 Datagram-Sockets *
11.11.1 Die Klasse DatagramSocket
11.11.2 Datagramme und die Klasse DatagramPacket
11.11.3 Auf ein hereinkommendes Paket warten
11.11.4 Ein Paket zum Senden vorbereiten
11.11.5 Methoden der Klasse DatagramPacket
11.11.6 Das Paket senden
11.12 E-Mail *
11.12.1 Wie eine E-Mail um die Welt geht
11.12.2 Das Simple Mail Transfer Protocol und RFC 822
11.12.3 POP (Post Office Protocol)
11.12.4 Die JavaMail API
11.12.5 E-Mails mittels POP3 abrufen
11.12.6 Multipart-Nachrichten verarbeiten
11.12.7 E-Mails versenden
11.12.8 Ereignisse und Suchen
11.13 Tiefer liegende Netzwerkeigenschaften *
11.13.1 Internet Control Message Protocol (ICMP)
11.13.2 MAC-Adresse
11.14 Zum Weiterlesen
12 Verteilte Programmierung mit RMI
12.1 Entfernte Objekte und Methoden
12.1.1 Stellvertreter helfen bei entfernten Methodenaufrufen
12.1.2 Standards für entfernte Objekte
12.2 Java Remote Method Invocation
12.2.1 Zusammenspiel von Server, Registry und Client
12.2.2 Wie die Stellvertreter die Daten übertragen
12.2.3 Probleme mit entfernten Methoden
12.2.4 Nutzen von RMI bei Middleware-Lösungen
12.2.5 Zentrale Klassen und Schnittstellen
12.2.6 Entfernte und lokale Objekte im Vergleich
12.3 Auf der Serverseite
12.3.1 Entfernte Schnittstelle deklarieren
12.3.2 Remote-Objekt-Implementierung
12.3.3 Stellvertreterobjekte
12.3.4 Der Namensdienst (Registry)
12.3.5 Remote-Objekt-Implementierung exportieren und beim Namensdienst anmelden
12.3.6 Einfaches Logging
12.3.7 Aufräumen mit dem DGC *
12.4 Auf der Clientseite
12.5 Entfernte Objekte übergeben und laden
12.5.1 Klassen vom RMI-Klassenlader nachladen
12.6 Weitere Eigenschaften von RMI
12.6.1 RMI und CORBA
12.6.2 RMI über HTTP getunnelt
12.6.3 Automatische Remote-Objekt-Aktivierung
12.7 Java Message Service (JMS)
12.8 Zum Weiterlesen
13 RESTful und SOAP Web-Services
13.1 Web-Services
13.2 RESTful Web-Services
13.2.1 Aus Prinzip REST
13.2.2 Jersey
13.2.3 JAX-RS-Annotationen für den ersten REST-Service
13.2.4 Test-Server starten
13.2.5 REST-Services konsumieren
13.2.6 Content-Hander, Marshaller und verschiedene MIME-Typen
13.2.7 REST-Parameter
13.2.8 REST-Services mit Parametern über die Jersey-Client-API aufrufen
13.2.9 PUT-Anforderungen und das Senden von Daten
13.2.10 PUT/POST/DELETE-Sendungen mit der Jersey-Client-API absetzen
13.3 Daily Soap und das SOAP-Protokoll
13.3.1 Die technische Realisierung
13.3.2 Web-Service-APIs und Implementierungen
13.3.3 @WebService in Java 6
13.3.4 Einen Web-Service definieren
13.3.5 Web-Services veröffentlichen
13.3.6 Einen JAX-WS-Client implementieren
13.4 Zum Weiterlesen
14 JavaServer Pages und Servlets
14.1 Dynamisch generierte Webseiten
14.1.1 Was sind Servlets?
14.1.2 Was sind JavaServer Pages?
14.2 Servlets und JSPs mit Tomcat entwickeln
14.2.1 Servlet-Container
14.2.2 Entwicklung der Servlet/JSP-Spezifikationen
14.2.3 Webserver mit Servlet-Funktionalität
14.2.4 Tomcat installieren
14.2.5 Ablageort für eigene JSPs
14.2.6 Webapplikationen
14.2.7 Zuordnung von Webapplikationen zu physikalischen Verzeichnissen
14.2.8 Web-Projekt mit Eclipse IDE for Java EE Developers
14.3 Statisches und Dynamisches
14.3.1 Statischer Template-Code
14.3.2 Dynamische Inhalte
14.3.3 Kommentare
14.4 Die Expression Language (EL)
14.4.1 Operatoren der EL
14.4.2 Literale
14.4.3 Implizite EL-Objekte
14.5 Formulardaten
14.5.1 Einen Parameter auslesen
14.5.2 HTML-Formulare
14.6 Auf Beans zurückgreifen
14.6.1 Beans in JSPs anlegen
14.6.2 Properties einer Bean im EL-Ausdruck erfragen
14.6.3 Properties mit <jsp:setProperty> setzen
14.6.4 Bean-Klasse zum Testen von E-Mail-Adressen
14.6.5 Parameterwerte in Bean übertragen
14.7 JSP-Tag-Libraries
14.7.1 Standard Tag Library (JSTL)
14.8 Skripting-Elemente in JSPs
14.8.1 Scriptlets
14.8.2 JSP-Ausdrücke
14.8.3 JSP-Deklarationen
14.8.4 Quoting
14.8.5 Entsprechende XML-Tags
14.8.6 Implizite Objekte für Scriptlets und JSP-Ausdrücke
14.9 Sitzungsverfolgung (Session Tracking)
14.9.1 Lösungen für die Sitzungsverfolgung
14.9.2 Sitzungen in JSPs
14.9.3 Auf Session-Dateien zurückgreifen
14.10 Servlets
14.10.1 Servlets compilieren
14.10.2 Servlet-Mapping
14.10.3 Der Lebenszyklus eines Servlets
14.10.4 Mehrere Anfragen beim Servlet und die Thread-Sicherheit
14.10.5 Servlets und Sessions
14.10.6 Weiterleiten und Einbinden von Servlet-Inhalten
14.11 Zum Weiterlesen
15 Applets
15.1 Applets in der Wiege von Java
15.1.1 Applets heute
15.1.2 (J)Applet und Applikationen
15.1.3 Das erste Hallo-Applet
15.2 Die Applet-API
15.2.1 Die Zyklen eines Applets
15.2.2 Parameter an das Applet übergeben
15.2.3 Wie das Applet den Browser-Inhalt ändern kann *
15.2.4 Den Ursprung des Applets erfragen
15.2.5 Datenaustausch zwischen Applets *
15.2.6 Was ein Applet alles darf *
15.2.7 Ist Java im Browser aktiviert? *
15.2.8 Applet unter Firefox (Netscape) oder Microsoft Internet Explorer? *
15.3 Webstart
15.4 Zum Weiterlesen
16 Datenbankmanagement mit JDBC
16.1 Relationale Datenbanken
16.1.1 Das relationale Modell
16.2 Datenbanken und Tools
16.2.1 HSQLDB
16.2.2 Weitere Datenbanken *
16.2.3 Eclipse-Plugins zum Durchschauen von Datenbanken
16.3 JDBC und Datenbanktreiber
16.3.1 Treibertypen *
16.3.2 JDBC-Versionen *
16.4 Eine Beispielabfrage
16.4.1 Schritte zur Datenbankabfrage
16.4.2 Ein Client für die HSQLDB-Datenbank
16.4.3 Datenbankbrowser und eine Beispielabfrage unter NetBeans
16.5 Mit Java an eine Datenbank andocken
16.5.1 Der Treiber-Manager *
16.5.2 Den Treiber laden
16.5.3 Eine Aufzählung aller Treiber *
16.5.4 Log-Informationen *
16.5.5 Verbindung zur Datenbank auf- und abbauen
16.6 Datenbankabfragen
16.6.1 Abfragen über das Statement-Objekt
16.6.2 Ergebnisse einer Abfrage in ResultSet
16.6.3 Java und SQL-Datentypen
16.6.4 Date, Time und Timestamp
16.6.5 Unicode in der Spalte korrekt auslesen
16.6.6 Eine SQL-NULL und wasNull() bei ResultSet
16.6.7 Wie viele Zeilen hat ein ResultSet? *
16.7 Elemente einer Datenbank hinzufügen und aktualisieren
16.7.1 Batch-Updates
16.7.2 Die Ausnahmen bei JDBC, SQLException und Unterklassen
16.8 ResultSet und RowSet *
16.8.1 Die Schnittstelle RowSet
16.8.2 Implementierungen von RowSet
16.8.3 Der Typ CachedRowSet
16.8.4 Der Typ WebRowSet
16.9 Vorbereitete Anweisungen (Prepared Statements)
16.9.1 PreparedStatement-Objekte vorbereiten
16.9.2 Werte für die Platzhalter eines PreparedStatement
16.10 Transaktionen
16.11 Metadaten *
16.11.1 Metadaten über die Tabelle
16.11.2 Informationen über die Datenbank
16.12 Vorbereitete Datenbankverbindungen
16.12.1 DataSource
16.12.2 Gepoolte Verbindungen
16.13 JPA-Beispiel mit der NetBeans-IDE
16.13.1 Entity-Beans generieren
16.13.2 Die Quellen im Überblick
16.13.3 Persistence Unit
16.13.4 Ein JPA-Beispielprogramm
16.14 Zum Weiterlesen
17 Technologien für die Infrastruktur
17.1 Property-Validierung durch Bean Validation
17.1.1 Technische Abhängigkeiten und POJOs
17.2 Wie eine Implementierung an die richtige Stelle kommt
17.2.1 Arbeiten mit dem ServiceLoader
17.2.2 Die Utility-Klasse Lookup als ServiceLoader-Fassade
17.2.3 Contexts and Dependency Injection (CDI) aus dem JSR-299
17.3 Zum Weiterlesen
18 Reflection und Annotationen
18.1 Metadaten
18.1.1 Metadaten durch JavaDoc-Tags
18.2 Metadaten der Klassen mit dem Class-Objekt
18.2.1 An ein Class-Objekt kommen
18.2.2 Was das Class-Objekt beschreibt *
18.2.3 Der Name der Klasse
18.2.4 instanceof mit Class-Objekten *
18.2.5 Oberklassen finden *
18.2.6 Implementierte Interfaces einer Klasse oder eines Interfaces *
18.2.7 Modifizierer und die Klasse Modifier *
18.2.8 Die Arbeit auf dem Feld *
18.3 Attribute, Methoden und Konstruktoren
18.3.1 Reflections – Gespür für die Attribute einer Klasse
18.3.2 Methoden einer Klasse erfragen
18.3.3 Properties einer Bean erfragen
18.3.4 Konstruktoren einer Klasse
18.3.5 Annotationen
18.4 Objekte erzeugen und manipulieren
18.4.1 Objekte erzeugen
18.4.2 Die Belegung der Variablen erfragen
18.4.3 Eine generische eigene toString()-Methode *
18.4.4 Variablen setzen
18.4.5 Bean-Zustände kopieren *
18.4.6 Private Attribute ändern
18.4.7 Methoden aufrufen
18.4.8 Statische Methoden aufrufen
18.4.9 Dynamische Methodenaufrufe bei festen Methoden beschleunigen *
18.5 Eigene Annotationstypen *
18.5.1 Annotationen zum Laden von Ressourcen
18.5.2 Neue Annotationen deklarieren
18.5.3 Annotationen mit genau einem Attribut
18.5.4 Element-Werte-Paare (Attribute) hinzufügen
18.5.5 Annotationsattribute vom Typ einer Aufzählung
18.5.6 Felder von Annotationsattributen
18.5.7 Vorbelegte Attribute
18.5.8 Annotieren von Annotationstypen
18.5.9 Deklarationen für unsere Ressourcen-Annotationen
18.5.10 Annotierte Elemente auslesen
18.5.11 Auf die Annotationsattribute zugreifen
18.5.12 Komplettbeispiel zum Initialisieren von Ressourcen
18.5.13 Mögliche Nachteile von Annotationen
18.6 Zum Weiterlesen
19 Dynamische Übersetzung und Skriptsprachen
19.1 Codegenerierung
19.1.1 Generierung von Java-Quellcode
19.1.2 Codetransformationen
19.1.3 Erstellen von Java-Bytecode
19.2 Programme mit der Compiler API übersetzen
19.2.1 Java Compiler API
19.2.2 Fehler-Diagnose
19.2.3 Eine im String angegebene Compiliationseinheit übersetzen
19.2.4 Wenn Quelle und Ziel der Speicher sind
19.3 Ausführen von Skripten
19.3.1 JavaScript-Programme ausführen
19.3.2 Groovy
19.4 Zum Weiterlesen
20 Logging und Monitoring
20.1 Logging mit Java
20.1.1 Logging-APIs
20.1.2 Logging mit java.util.logging
20.1.3 Logging mit log4j *
20.1.4 Die Simple Logging Facade
20.2 Systemzustände überwachen
20.3 MBean-Typen, MBean-Server und weitere Begriffe
20.3.1 MXBeans des Systems
20.4 Geschwätzige Programme und JConsole
20.4.1 JConsole
20.5 Der MBeanServer
20.6 Eine eigene Standard-MBean
20.6.1 Management-Schnittstelle
20.6.2 Implementierung der Managed-Ressource
20.6.3 Anmeldung beim Server
20.6.4 Eine eigene Bean in JConsole einbringen
20.7 Zum Weiterlesen
21 Java Native Interface (JNI)
21.1 Java Native Interface und Invocation-API
21.2 Eine C-Funktion in ein Java-Programm einbinden
21.2.1 Den Java-Code schreiben
21.3 Dynamische Bibliotheken erzeugen
21.3.1 Die Header-Datei erzeugen
21.3.2 Implementierung der Funktion in C
21.3.3 Die C-Programme übersetzen und die dynamische Bibliothek überzeugen
21.4 Nativ die Stringlänge ermitteln
21.5 Erweiterte JNI-Eigenschaften
21.5.1 Klassendefinitionen
21.5.2 Zugriff auf Attribute
21.5.3 Methoden aufrufen
21.5.4 Threads und Synchronisation
21.6 Einfache Anbindung von existierenden Bibliotheken
21.6.1 Generieren von JNI-Wrappern aus C++-Klassen und C-Headern
21.6.2 COM-Schnittstellen anzapfen
21.7 Invocation-API
21.8 Zum Weiterlesen
22 Sicherheitskonzepte
22.1 Zentrale Elemente der Java-Sicherheit
22.1.1 Security-API der Java SE
22.1.2 Cryptographic Service Providers
22.2 Der Sandkasten (Sandbox)
22.3 Sicherheitsmanager (Security Manager)
22.3.1 Der Sicherheitsmanager bei Applets
22.3.2 Sicherheitsmanager aktivieren
22.3.3 Rechte durch Policy-Dateien vergeben
22.3.4 Erstellen von Rechtedateien mit dem grafischen Policy-Tool
22.3.5 Kritik an den Policies
22.4 Signierung
22.4.1 Warum signieren?
22.4.2 Digitale Ausweise und die Zertifizierungsstelle
22.4.3 Mit keytool Schlüssel erzeugen
22.4.4 Signieren mit jarsigner
22.5 Digitale Unterschriften *
22.5.1 Die MDx-Reihe
22.5.2 Secure Hash Algorithm (SHA)
22.5.3 Mit der Security-API einen Fingerabdruck berechnen
22.5.4 Die Klasse MessageDigest
22.6 Verschlüsseln von Daten(-strömen) *
22.6.1 Den Schlüssel, bitte
22.6.2 Verschlüsseln mit Cipher
22.6.3 Verschlüsseln von Datenströmen
22.7 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 VisualVM
23.3 Programmieren mit der Tools-API
23.3.1 Eigene Doclets
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
Ihr Kommentar
Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.