Das Java 2 JDK 5 Lehrbuch (eBook)

Sprache und Bibliotheken
eBook Download: PDF
2005 | 1. Auflage
845 Seiten
C & L Computer- und Literaturverlag GmbH
978-3-936546-25-5 (ISBN)
Systemvoraussetzungen
20,00 inkl. MwSt
  • Download sofort lieferbar
  • Zahlungsarten anzeigen

Karsten Wolke (Hrsg.), Anja Austermann, Kostyantyn Yermashov

Das Java 2 JDK 5 Lehrbuch

Sprache und Bibliotheken




Java hat sich als plattformunabhängige Sprache zur unkomplizierten Entwicklung skalierbarer Client- und Server-Anwendungen etabliert.



Dieses umfassende Lehrbuch auf der Basis des JDK 5 ist für das Erlernen der objektorientierten Programmiersprache Java und der Bibliotheken des JDK bestens geeignet. Es ist sowohl für das Selbststudium als auch als Begleitmaterial zu Kursen zu empfehlen. Der Einsteiger findet darin alles, was er über Java wissen muß, er lernt die grundlegenden Eigenschaften und Sprachkonzepte praxisgerecht kennen und weiß nach der Lektüre der Spracheinführung, wie man Programmabläufe modelliert und effiziente Anwendungen entwirft.



Hat sich der Leser mit den Sprachstrukturen vertraut gemacht, führen die Autoren durch die Bibliotheken des JDK auf Server und Client. Sie erklären, wie man unter Einsatz der vielen neuen Features des JDK 5 Applikationen, Applets, Servlets und Java Server Pages schreibt. Dabei erfährt man, wie man lokalen Daten und Informationen aus dem Netzwerk liest und schreibt und mit Swing anwenderfreundliche Oberflächen für Programme entwickelt, auch das Drucken, die Grafik und Audio kommen nicht zu kurz.



Großen Wert legen die Autoren auch auf das Thema Sicherheit: Nicht nur das allgemeine Abfangen von Ausnahmen wird behandelt, auch der Aufbau von Sandboxes wird geschildert. Wer trotzdem bei lokalen Java-Anwendungen – auf eigenes Risko – direkt auf die Funktionen des Betriebssystems zugreifen will, erfährt im Buch, wie das geht.



Die Themen:



-- Die Neuerungen des JDK 5: New I/O, Generics, Enums, Autoboxing

-- GUI-Programme mit Swing

-- 2- und 3D-Grafik

-- Multitasking und Multithreading

-- Netzwerk-Programmierung und verteilte Anwendungen

-- Applets, Applikationen, Servlets und Java Server Pages

-- Sicherheit

Inhalt 6
1 Das Fundament von Java 16
1.1 DIE SPRACHE JAVA 17
1.1.1 Warum Java? 17
1.2 OBJEKTORIENTIERTE PROGRAMMIERUNG 25
1.2.1 Objekt 25
1.2.2 Methode 25
1.2.3 Kapselung von Eigenschaften 26
1.2.4 Nachrichten 27
1.2.5 Klasse 27
1.2.6 Vererbung 28
1.2.7 Überschreiben von Methoden und Eigenschaften 29
1.2.8 Überladung von Methoden 30
1.2.9 Mehrfachvererbung 31
1.3 DIE INSTALLATION 32
1.3 DIE INSTALLATION JAVA 32
1.3.1 Installation von J2SE 32
1.3.2 Installation des JDK 33
1.3.3 Installation der Dokumentation des JDK 34
1.3.4 Installation der Quelltexte 35
1.3.5 Java-Software entwickeln 35
1.3.6 Entwicklungswerkzeuge 36
2 Grundlagen von Java 38
2.1 GRUNDLEGENDE PROGRAMMIERSTRUKTUREN 39
2.1.1 Das erste Java-Programm 39
2.1.2 Kommentare 41
2.1.3 Bezeichner 43
2.1.4 Datentypen 44
2.1.5 Variablen 48
2.1.6 Konstanten 49
2.1.7 Arrays 50
2.1.8 Speichermanagement 53
2.1.9 Typkonvertierungen 54
2.1.10 Ausdrücke 56
2.1.11 Anweisungen 65
2.2 OBJEKTORIENTIERTE PROGRAMMIERSTRUKTUREN 81
2.2.1 Klassen 81
2.2.2 Eigenschaften 82
2.2.3 Objekte 82
2.2.4 Methoden 83
2.2.5 Die this-Referenz 88
2.2.6 Konstruktoren 89
2.2.7 Destruktoren 90
2.2.8 Pakete 91
2.2.9 Modifier 97
2.2.10 Statische Strukturen 103
2.2.11 Vererbung 106
2.2.12 Initialisierungsprozeß eines Objekts 111
2.2.13 Aufruf überschriebener Methoden aus Konstruktoren 113
2.2.14 Abstrakte Klassen 114
2.2.15 Schnittstellen (Interfaces) 116
2.2.16 Innere und anonyme Klassen 120
2.3 EXCEPTIONS 124
2.3.1 Abfangen und Behandeln von Exceptions 125
2.3.2 Die Klassifizierung von Exceptions 127
2.3.3 Das Ausnahmeobjekt verwenden 128
2.3.4 Mehr als eine Ausnahme abfangen 129
2.3.5 Die finally-Klausel 131
2.3.6 Weiterleiten von Exceptions 132
2.3.7 Struktur der Ausnahmebehandlung 133
2.3.8 Eigene Exception-Typen definieren 134
2.3.9 Auslösen einer Exception 135
3 Weiterführende Spracheigenschaften 138
3.1 ZEICHENKETTEN 139
3.1.1 Die Klasse String 139
3.1.2 StringBuffer und StringBuilder 150
3.1.3 Die Klasse StringTokenizer 152
3.2 HILFSKLASSEN 155
3.2.1 Wrapper-Klassen 155
3.2.2 Mathematische Klassen 162
3.2.3 Die Klasse Arrays 170
3.2.4 Die Klasse System 172
3.2.5 Die Klasse Runtime 180
3.2.6 Die Klassen Date, Calendar und GregorianCalendar 184
3.3 EVENTS 188
3.3.1 Ereignisverarbeitung in Java 189
3.3.2 Ereignistypen 191
3.3.3 Ereignisempfänger 191
3.3.4 Ereignisquellen 191
3.3.5 AWT-Ereignisse 192
3.3.6 Implementierung von Ereignisempfängern 202
3.3.7 Eigene Ereignisse definieren und auslösen 211
3.4 COLLECTIONS 216
3.4.2 Java-Implementierungen der Mengenklassen 218
3.4.3 Synchronisation von Collections 226
3.4.4 Das Interface Iterator zum Durchlaufen von Collections 226
3.4.5 Suchen, Sortieren und andere Algorithmen 227
3.5 ENTWURFSMUSTER 232
3.5.1 Singleton 233
3.5.2 Immutable 235
3.5.3 Factory 237
3.5.4 Iterator 242
3.5.5 Delegate 244
4 Erweiterte Sprachkonzepte 248
4.1 AUTOBOXING UND UNBOXING 249
4.1.1 Regeln für das Autoboxing beziehungsweise Unboxing 251
4.2 STATIC IMPORTS 256
4.2.1 Statische Importe 257
4.2.2 Gefahren und Nachteile statischer Importe 259
4.3 TYPSICHERE AUFZÄHLUNGEN 261
4.3.1 Aufzählungen mit enum 262
4.3.2 Eigenschaften und Struktur von enum-Aufzählungen 264
4.3.3 Aufzählungen innerhalb anderer Strukturen erzeugen 265
4.3.4 Iteration über Aufzählungen 266
4.3.5 enum-Aufzählungen in switch-Anweisungen 266
4.3.6 Mengen von Aufzählungen 268
4.3.7 Benutzerdefinierte Elemente in enums 270
4.3.8 Schnittstellen implementieren in Aufzählungen 271
4.3.9 Aufzählungswertbezogene Klassenrümpfe 272
4.4 VARIABLE PARAMETERLISTEN 274
4.4.1 Variable Parameterlisten als erweitertes Sprachkonzept 276
4.4.2 Einschränkungen von VarArgs-Definitionen 277
4.5 METADATEN 277
4.5.1 Deklaration von Annotationstypen 278
4.5.2 Annotationsverarbeitung 281
4.6 GENERICS 291
4.6.1 Definition parametrisierbarer Typen 295
4.6.2 Untertypisierung 300
4.6.3 Bounds 300
4.6.4 Generische Methoden und Konstruktoren 304
4.6.5 Wildcards 306
4.6.6 Java Generics kompilieren 310
4.6.7 Besonderheiten von Java Generics 315
4.6.8 Generischen Quellcode mit nicht generischem Quellcode verknüpfen 320
5 Datenströme und Datenpersistenz 324
5.1 EIN- UND AUSGABE VON DATEN 325
5.1.2 Stream-Klassen 326
5.1.3 Wahlfreier Zugriff auf Dateien 334
5.1.4 Einfache Datenein- und -ausgabe mit der Klasse System 336
5.2.1 Objekte serialisieren und deserialisieren 338
5.2.2 Der Serialisierungs-Mechanismus 340
5.2.3 Erweiterte Eigenschaften der Serialisierung 340
5.3 NEW I/O 342
5.3.1 Puffer 343
5.3.2 Channels 346
5.3.3 Dateisperren 347
5.3.4 File Memory Mapping 347
5.3.5 Scattering und Gathering 348
5.3.6 Non-blocking und Multiplexed I/O 349
5.3.7 Zeichensätze 351
5.4 DATENBANKEN MIT JDBC 352
5.4.1 Die Architektur von JDBC 353
5.4.2 Kommunikation via JDBC 356
5.4.3 Beispieldatenbank 362
5.4.4 Weiterführende JDBC-Eigenschaften 370
6 GUI-Programmierung 376
6.1 SWING 377
6.1.1 Das Prinzip von Swing 377
6.1.2 Komponenten der Bibliothek Swing 381
6.2 DRAG& DROP
6.2.1 Drag& Drop-Unterstützung in Swing
6.2.2 TransferHandler für die Datenübertragung 461
6.2.3 Datei-Drag& Drop
7 Netzwerk und verteilte Systeme 470
7.1 TCP-/UDP-SOCKETS 471
7.1.1 Das erste Netzwerkprogramm 472
7.1.2 Der Client lernt sprechen 473
7.1.3 Ein erster Internet-Server... 476
7.1.4 Quasseln im Netz – der Chatserver 479
7.1.5 UDP-Sockets 485
7.1.6 Die Klassen URL und URLConnection 489
7.1.7 Die Klasse URI 492
7.2 RMI – VERTEILTE PROGRAMMIERUNG IN JAVA 493
7.2.1 Entwurf einer verteilten Applikation mit Hilfe von RMI 494
7.2.2 Verteilte Beispielapplikation 495
7.2.3 Dynamisches Generieren von Stubs 504
7.2.4 Skalierung von entfernten Objekten 505
7.2.5 Weitere Eigenschaften von RMI 510
7.3 EVENT HANDLING IN VERTEILTEN SYSTEMEN 511
7.3.1 Fallbeispiel Value Change 511
7.3.2 Implementierung von Listenern in verteilten Systemen 517
7.4 SERVLETS – DIE ALTERNATIVE ZU CGI 526
7.4.1 Vorteile von Servlets gegenüber CGI-Skripten 526
7.4.2 Servlets programmieren 526
7.4.3 Kommunikation leichtgemacht – der Java-Chat 530
7.4.4 Cookies – Informative Krümel 536
7.4.5 Sessions – Behalten Sie Ihre Kunden im Auge 541
7.5 JAVA SERVER PAGES 547
7.5.1 Wann Servlets, wann JSPs? 548
7.5.2 Die Struktur von JSPs 549
7.5.3 JSPs laden 550
7.5.4 JSP-Elemente 551
7.5.5 Scopes 567
7.5.6 Implizite Objekte 567
7.5.7 Expression Language (EL) 568
7.5.8 Tag-Extensions 569
7.6 JAVA NAMING AND DIRECTORY INTERFACE (JNDI) 576
7.6.1 Die Architektur von JNDI 577
7.6.2 Programmieren mit der JNDI-API 580
7.6.3 Zusammenfassung 585
7.7 APPLETS 585
7.7.1 Kompatibilitätsprobleme 586
7.7.2 Das HelloWorld-Applet 586
7.7.3 Applets und Applikationen 588
7.7.4 Das APPLET-Tag 589
7.7.5 Übergeben von Parametern an Applets 590
7.7.6 Die Klasse Applet 591
7.7.7 Sicherheitsbeschränkungen 595
8 Konkurrierende Programmierung 596
8.1 MULTITHREADING 597
8.1.1 Die Klasse Thread 598
8.1.2 Die Schnittstelle Runnable 606
8.1.3 Threadgruppen 611
8.1.4 Die Klassen Timer und TimerTask 614
8.2 SYNCHRONISATION 616
8.2.1 Monitore 618
8.2.2 Die Methoden wait() und notify() 623
8.2.3 Die Klassen PipedInputStream und PipedOutputStream 626
8.3 CONCURRENCY 628
8.3.1 Das Interface Executor 628
8.3.2 Semaphore 629
8.3.3 Locks 630
8.3.4 CyclicBarrier 632
9 Weitere Java-Klassenbibliotheken 634
9.1 SICHERHEIT IN JAVA 635
9.1.1 Das Sandbox-Modell 635
9.1.2 Das Security-API 636
9.1.3 Der Security Manager 638
9.1.4 Der Access Controller 641
9.1.5 Beispielanwendung 650
9.2 PREFERENCES 654
9.2.1 Die Architektur des Preferences API 655
9.2.2 Die Klasse Preferences 655
9.2.3 Beispielanwendung 658
9.3 REGULÄRE AUSDRÜCKE 661
9.3.1 Die Syntax regulärer Ausdrücke 662
9.3.2 Die Klasse Pattern 664
9.3.3 Die Klasse Matcher 665
9.3.4 Redundante Methoden in der Klasse String 666
9.3.5 Beispielszenarios für reguläre Ausdrücke 666
9.4 DRUCKEN MIT DEM PRINTSERVICE-API 670
9.4.1 Einfache Dokumente drucken 670
9.4.2 Drucken in eine Postscriptdatei 673
9.4.3 Drucken von frei formatierten Dokumenten 675
9.5 SOUND IN JAVA 677
9.5.1 JavaMediaFramework versus Java Sound 677
9.5.2 Wie funktioniert Audio-Sampling? 678
9.5.3 Einbindung von Audiodateien mit der Klasse AudioClip 679
9.5.4 Aufnahme und Wiedergabe mit dem Java-Sound-API 681
9.5.5 Achtung, Aufnahme! 685
9.5.6 MIDI 688
9.6 DAS REFLECTION-API 691
9.6.1 Die Basisklassen Object und Class 692
9.6.2 Modifier analysieren 696
9.6.3 Dynamisches Laden und Objekterzeugung von Klassen 697
9.6.4 Dynamische Methodenaufrufe 699
9.7 LOGGING 709
9.7.1 Einfaches Logging 710
9.7.2 Erweitertes Logging 711
9.7.3 Anpassen der Logging-Konfiguration 714
9.7.4 Handler 715
9.7.5 Filter definieren 721
9.7.6 Formatter definieren 722
9.8 JAVA NATIVE INTERFACE 723
9.8.1 Erstellen von Java-Klassen mit nativen Methoden 723
9.8.2 Mapping zwischen Java und nativen Datentypen 727
9.8.3 Zugriff auf Java-Objekte in nativen Methoden 728
10 Grafikprogrammierung 738
10.1 GRAFIK MIT DEM 2D-API 739
10.1.1 Koordinatensysteme 739
10.1.2 Einfache Formen zeichnen 740
10.1.3 Verwenden komplexerer 2D-API-Zeichenfunktionen 742
10.1.4 Figur + Figur = Constructive Area Geometry 744
10.1.5 Komplexere Zeichenobjekte – Kurven und General Paths 746
10.1.6 Transformationen 749
10.1.7 Fonts 751
10.1.8 Linien zeichnen – das Interface »Stroke« 753
10.1.9 Bilder, Farbverläufe – Formen füllen 756
10.1.10 Bildbearbeitung 761
10.1.11 Transparenz und die Klasse AlphaComposite 763
10.1.12 Bildbearbeitung mit der Klasse BufferedImage 766
10.1.13 Filter 768
10.1.14 Animationen in Java 773
10.1.15 Clipping 775
10.2 DREIDIMENSIONALE GRAFIKEN MIT DEM 3D-API 777
10.2.1 Licht aus – Spot an! Noch mehr Beleuchtung 781
10.2.2 Weitere Objekte – die Interfaces Shape3D und Primitive 782
10.2.3 Das Aussehen von Objekten festlegen – Appearance 785
10.2.4 Bewegung kommt ins Spiel: Transformation und Behavior 790
10.2.5 Die Klasse Interpolator 799
10.2.6 Interaktion 802
Anhang A Werkzeuge des JDK 806
Literaturverzeichnis 828
Stichwortverzeichnis 830
Mehr eBooks bei www.ciando.com 0

3 Weiterführende Spracheigenschaften (S. 138-139)

3.1 ZEICHENKETTEN
von Karsten Wolke

3.1.1 Die Klasse String

Zeichenketten sind unumstritten wohl eine der meist verwendeten Datenstrukturen in vielen Programmen. Wie in vielen anderen Programmiersprachen auch gibt es in Java für Zeichenketten eine eigene Datenstruktur. Viele Programmiersprachen bieten einen primitiven Datentypen für Zeichenketten an, in Java dagegen werden Zeichenketten hauptsächlich durch die Klasse java.lang.String repräsentiert. Mittlerweile werden die Begriffe String und Zeichenkette von Entwicklern und in der Literatur synonym verwendet. An dieser Stelle soll der Umgang mit der Klasse String erläutert und die Behandlung von Strings in Java verdeutlicht werden. Die String-Klasse hat im wesentlichen dieselbe Bedeutung wie Zeichenketten in anderen Sprachen auch. Einer ihrer Haupteinsatzgebiete ist die Ein- und Ausgabeverarbeitung. Überall dort, wo der Anwender mit dem Programm in Kontakt tritt, werden Zeichenketten verwendet – bei der Ausgabe eines Ergebnisses, eines Fehlers, einer Warnung und auch beim Einlesen von Daten. Eine Zeichenkette ist in Java ein Objekt der Klasse String. Sie bietet mehrere Konstruktoren und eine Reihe von Methoden zum Erzeugen einer Zeichenkette. Die Methoden dienen im wesentlichen zum Zerlegen einer Zeichenkette in eine Teilzeichenkette, zum Vergleichen von Zeichenketten und zum Suchen in einer Zeichenkette.

In Java sind Zeichenketten beziehungsweise Objekte der Klasse String eine Aneinanderreihung von Zeichen. Ein Zeichen wird in Java durch den primitiven Datentypen char dargestellt und repräsentiert ein Unicodezeichen. Informationen zum char- Datentyp, zum Unicode-Standard und zu den Escape-Sequenzen in Zeichenketten sind im Abschnitt 2.1.4 zu finden.

Der Umgang mit Zeichenketten in Java ist nicht viel anders als in anderen Programmiersprachen, die auf dem ASCII.Standard basieren, der abhängig von der Spracheinstellung des Systems nur 256 Zeichen groß ist. Lediglich die ersten 128 Zeichen sind auf jedem System identisch. Da der Unicode- aber mit dem ASCIIStandard weitestgehend kompatibel ist, muß sich der Umsteiger nicht zu viele Gedanken machen.

Weil ein Zeichen in Java grundsätzlich zwei Byte groß ist, sind Zeichenketten in Java doppelt so groß wie in anderen Programmiersprachen, die den ASCII-Zeichensatz verwenden. Diese Eigenschaft hat aber nur bei der externen Ablage von Zeichenketten eine Bedeutung, beispielsweise beim Schreiben einer Textdatei. Bei der internen Behandlung von Strings in Java bemerkt der Entwickler keinen Unterschied zu einer anderen Programmiersprache.

In Java bleibt die innere Struktur einer Zeichenkette verborgen. Ob Java einen String als Character-Array oder auf eine andere Weise behandelt, sieht der Entwickler nicht. Die Analyse beziehungsweise der Zugriff auf die Zeichen eines Strings erfolgt über Methoden der Klasse String.

Besonderheiten von Strings in Java

String-Objekte sind in Java nicht dynamisch. Das heißt, die Zeichenkette, die ein Objekt von String repräsentiert, kann nicht manipuliert beziehungsweise verändert werden. Damit bleiben Länge und Inhalt eines String-Objekts immer gleich. Zudem ist die Klasse String als final deklariert worden. Das heißt, es können keine Unterklassen von der Klasse String erzeugt werden. Diese Eigenschaften bringen Geschwindigkeitsvorteile für die Java-Laufzeitumgebung. Beispielsweise muß der Speicherbereich für eine Zeichenkette nicht dynamisch angepaßt werden, denn ein String-Objekt kann seinen Inhalt und seine Länge nicht verändern. Zudem muß bei der Ausführung von Methoden nicht geprüft werden, ob das Objekt eine Unterklasse von String ist und Methoden dieser Klasse überschrieben hat. Neben den Geschwindigkeitsvorteilen für die Java-Laufzeitumgebung hat dies auch einen Nachteil für den Entwickler: Man kann String nicht um nützliche Methoden erweitern. Wenn man Operationen auf Strings definieren möchte, muß man eine neue Klasse dafür definieren und das String-Objekt als Parameter übergeben. Dies verletzt aber den objektorientierten Gedanken. Operationen und Daten sollten immer zu einer Klasse zusammengefaßt werden.

Veränderbare Zeichenketten werden in Java durch die beiden Klassen StringBuffer und StringBuilder repräsentiert. Möchte man mehrere Operationen auf einer Zeichenkette durchführen, bieten sich diese Klassen eher an als String. Die folgende Anweisung beweist das:

String str = "Hello" + "World",

Zunächst wird für die Literale Hello und World jeweils ein String-Objekt erzeugt. Danach werden die beiden String-Objekte konkateniert. Das Ergebnis dieser Operation ist ein neues String-Objekt, das der Variablen str zugewiesen wird. Da die beiden String-Objekte mit den Zeichenketten Hello und World nicht mehr verwendet werden, kann der Garbage Collector diesen Speicherbereich wieder freigeben. Führt man also Operationen auf Zeichenketten aus, kommt es zu einem nicht zu unterschätzenden Overhead. Die beiden Klassen StringBuffer und StringBuilder wurden extra für veränderbare Zeichenketten entwickelt und werden in einem gesonderten Abschnitt dieses Kapitels behandelt.

Die Klasse String besitzt eine Reihe von Konstruktoren zum Erzeugen von Zeichenketten, und Methoden zur Durchführung von Operationen auf Zeichenketten. Das Ergebnis einer Stringmanipulation ist immer ein neues String-Objekt. Aus diesem Grund verändern die Methoden eines String-Objekts auch nicht das Objekt selbst. Sie führen eine Operation auf die Zeichenkette des Objekts aus und liefern das Ergebnis der Operation als Rückgabewert.

Konstruktoren der Klasse String

Eine Zeichenkette ist in Java ein Objekt. Damit übernimmt die Java-Laufzeitumgebung automatisch das Speichermanagement. Als Entwickler muß man sich nicht wie beispielsweise in der Programmiersprache C oder C++ darum kümmern. Je nach Länge der Zeichenkette wird Speicher bereitgestellt. Wenn die Zeichenkette nicht mehr verwendet wird, wird der Speicherbereich durch den Garbage Collector wieder freigegeben. Zeichenketten können durch eine Reihe von Konstruktoren der Klasse String erzeugt werden:

Erscheint lt. Verlag 1.1.2005
Sprache deutsch
Themenwelt Mathematik / Informatik Informatik
ISBN-10 3-936546-25-8 / 3936546258
ISBN-13 978-3-936546-25-5 / 9783936546255
Haben Sie eine Frage zum Produkt?
PDFPDF (Adobe DRM)
Größe: 12,0 MB

Kopierschutz: Adobe-DRM
Adobe-DRM ist ein Kopierschutz, der das eBook vor Mißbrauch schützen soll. Dabei wird das eBook bereits beim Download auf Ihre persönliche Adobe-ID autorisiert. Lesen können Sie das eBook dann nur auf den Geräten, welche ebenfalls auf Ihre Adobe-ID registriert sind.
Details zum Adobe-DRM

Dateiformat: PDF (Portable Document Format)
Mit einem festen Seiten­layout eignet sich die PDF besonders für Fach­bücher mit Spalten, Tabellen und Abbild­ungen. Eine PDF kann auf fast allen Geräten ange­zeigt werden, ist aber für kleine Displays (Smart­phone, eReader) nur einge­schränkt geeignet.

Systemvoraussetzungen:
PC/Mac: Mit einem PC oder Mac können Sie dieses eBook lesen. Sie benötigen eine Adobe-ID und die Software Adobe Digital Editions (kostenlos). Von der Benutzung der OverDrive Media Console raten wir Ihnen ab. Erfahrungsgemäß treten hier gehäuft Probleme mit dem Adobe DRM auf.
eReader: Dieses eBook kann mit (fast) allen eBook-Readern gelesen werden. Mit dem amazon-Kindle ist es aber nicht kompatibel.
Smartphone/Tablet: Egal ob Apple oder Android, dieses eBook können Sie lesen. Sie benötigen eine Adobe-ID sowie eine kostenlose App.
Geräteliste und zusätzliche Hinweise

Zusätzliches Feature: Online Lesen
Dieses eBook können Sie zusätzlich zum Download auch online im Webbrowser lesen.

Buying eBooks from abroad
For tax law reasons we can sell eBooks just within Germany and Switzerland. Regrettably we cannot fulfill eBook-orders from other countries.

Mehr entdecken
aus dem Bereich
Konzepte, Methoden, Lösungen und Arbeitshilfen für die Praxis

von Ernst Tiemeyer

eBook Download (2023)
Carl Hanser Verlag GmbH & Co. KG
69,99
Konzepte, Methoden, Lösungen und Arbeitshilfen für die Praxis

von Ernst Tiemeyer

eBook Download (2023)
Carl Hanser Verlag GmbH & Co. KG
69,99
Der Weg zur professionellen Vektorgrafik

von Uwe Schöler

eBook Download (2024)
Carl Hanser Verlag GmbH & Co. KG
29,99