26,99 €
Dieses Buch ist für alle, die tief in die Java-Programmierung einsteigen möchten. Dennoch werden keine Programmierkenntnisse vorausgesetzt. Lernen Sie zunächst, wie Sie das Java Development Kit installieren und welche Java-Elemente es gibt. Machen Sie sich dann mit Methoden und objektorientierter Programmierung vertraut. Werfen Sie Exceptions, sammeln Sie Datenelemente in flexiblen Arrays und programmieren Sie Fenster, Mäuse und Grafik. Merken Sie was? Unversehens sind Sie zum Profi geworden. Datenspeicherung, Datenbankzugriff und der Umgang mit XML-Dateien sind genauso wie die Parallelverarbeitung mit Threads und die Netzwerkprogrammierung keine Hürde mehr. Programmieren lernt man in erster Linie dadurch, dass man es tut: Deshalb sind Aufgaben vorhanden. Die Lösungen dazu und alle Codebeispiele des Buchs stehen zum Download zur Verfügung.
Sie lesen das E-Book in den Legimi-Apps auf:
Seitenzahl: 776
Java für Dummies. Alles-in-einem-Band
Java für Dummies. Alles-in-einem-Band
Bibliografische Information der Deutschen Nationalbibliothek
Die Deutsche Nationalbibliothek verzeichnet diesePublikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.
1. Auflage 2018
© 2018 WILEY-VCH Verlag GmbH & Co. KGaA, Weinheim
All rights reserved including the right of reproduction in whole or in part in any form. This translation published by arrangement with John Wiley and Sons, Inc.
Alle Rechte vorbehalten inklusive des Rechtes auf Reproduktion im Ganzen oder in Teilen und in jeglicher Form. Diese Übersetzung wird mit Genehmigung von John Wiley and Sons, Inc. publiziert.
Wiley, the Wiley logo, Für Dummies, the Dummies Man logo, and related trademarks and trade dress are trademarks or registered trademarks of John Wiley & Sons, Inc. and/or its affiliates, in the United States and other countries. Used by permission.
Wiley, die Bezeichnung »Für Dummies«, das Dummies-Mann-Logo und darauf bezogene Gestaltungen sind Marken oder eingetragene Marken von John Wiley & Sons, Inc., USA, Deutschland und in anderen Ländern.
Das vorliegende Werk wurde sorgfältig erarbeitet. Dennoch übernehmen Autoren und Verlag für die Richtigkeit von Angaben, Hinweisen und Ratschlägen sowie eventuelle Druckfehler keine Haftung.
Coverfoto: nerudol – fotolia.comKorrektur: Petra Heubach-Erdmann
Print ISBN: 978-3-527-71450-6ePub ISBN: 978-3-527-81307-0mobi ISBN: 978-3-527-81306-3
Cover
Titelseite
Impressum
Einleitung
Über dieses Buch
Konventionen in diesem Buch
Törichte Annahmen über den Leser
Wie dieses Buch aufgebaut ist
Symbole, die in diesem Buch verwendet werden
Wie es weitergeht
Teil I: Programmieren lernen
Kapitel 1: Ein Loblied auf Java
Das Profil von Java
Programmiersprache, Interpreter und Compiler
Die virtuelle Maschine und das ultimative Wohnmobil
Vergleich mit anderen Programmiersprachen
Kapitel 2: Entwicklung mit IDEen und ohne
Ein kleines Programmbeispiel als Opfer
Java-Programmierung mit dem JDK
Eclipse
NetBeans
Aufgabe: Grüßaugust selbst erstellen
Kapitel 3: Aufstieg zum Programmierer
Java-Programm-Skelett
Programmerweiterungen
Variable Attribute
Kleines Rechenwerk
Zeichen
Ordnende Elemente
Aufgaben
Anmerkungen
Kapitel 4: Entscheiden und Wiederholen
Nur unter einer Bedingung
Logeleien
Die Fallunterscheidung – switch case
Endlich lernen wir Schleifen zu binden!
Überblick behalten mit Struktogrammen
Aufgaben
Kapitel 5: Funktionierende Methoden
Vorstellung der Methode main
Methoden gliedern und sparen Arbeit
Salzkartoffeln kochen für Anfänger
Methoden mit Datenfluss
Überladen von Methoden
Rekursionen
Aufgaben
Kapitel 6: Die Strings: Viele, viele Buchstaben
Variablen und Texte
Texteingabe
Textmanipulationen
Typwandler
StringBuffer und StringBuilder
Beispiel Pfadumbau
Aufgaben
Kapitel 7: Arrays
Wir bauen ein Array
Übung: Ein Array für die Monatstage
Übung: Ein Kartenspiel
Das String-Array der Methode main
Aufbruch in neue Dimensionen
Aufgaben
Kapitel 8: Bermuda: Die Schiffe und das Meer
Spielregeln
Arrays für Spielfeld und Schiffe
Der Spielablauf
Das komplette Listing
Teil II: Objektorientiert und modular
Kapitel 9: Klasse Objekte
Ein Beispiel für objektorientierte Programmierung
Eine Klasse im Selbstbau
Selbstverweisende Klassen
Die Vorteile der Privatsphäre
Konstruktionsbedingt
Statische Attribute und Methoden
Wrapper-Klassen für Primitive
Aufzählungstyp mit enum definieren
Aufgaben
Kapitel 10: Klassen erweitern
Noch mal Klasse: Der Mensch als Objekt
Referenzen auf erweiterte Objekte
Konstruktoren in der Vererbung
Die Mensa der Universität Norgaardholz
Der Beruf wird geschützt
Anonyme Klassen und das Lambda
Aufgaben
Kapitel 11: Verteilung der Klassen auf Pakete
Packages
Ausführbare Dateien und Bibliotheken: JAR
Kapitel 12: Bermuda-Klassen
Das Projekt erstellen
Die Klassen
Teil III: Erweitern Sie den Horizont
Kapitel 13: Hoffentlich Exception-versichert
Ausnahmsweise Fehler
Eingabe einer Zahl per Dialogbox
Der catch-Parameter
Ein gelungener Wurf
Der Stammbaum der Exceptions
Die Katzen-Exception
Nochmal clone
Aufgaben
Kapitel 14: Fertige Bausteine zur Selbstbedienung
Wie der Zufall es will
Das Datum, der Kalender und die Neuerungen
Rechnerisches aus der Math-Klasse
Hilfsmethoden für Arrays
Kapitel 15: Datenelemente sammeln und anordnen
Das flexible Array: ArrayList
Ein altes flexibles Array: Der Vector
In Ketten: Die LinkedList
Sammlung der Einzigartigen: Set
Zugriff per Schlüssel: Der assoziative Speicher
Die Interfaces
Die Methoden des Java Collection Frameworks
Wie sortiert man Autos?
Lambda-Ausdrücke und Streams
Hinweis
Teil IV: Fenster- und Grafikprogrammierung
Kapitel 16: Mit Swing Fenster, Mäuse und Grafik programmieren
JFrame: Guck mal durchs Fenster
Zeichnen und Malen
Modernisierung: Graphics2D
Ereignisreichtum
Aufgaben
Kapitel 17: Erstellen eines Layouts
Alle bitte nebeneinander aufstellen: FlowLayout
Gleichmäßig vergittert: GridLayout
Die Mitte wird fett: BorderLayout
Kombination der Layouts mit Panels
Das Layout der Dialoge: GridBagLayout
Das BoxLayout und die Box
Null-Diät für Layout-Manager
Aufgaben
Kapitel 18: Kontrollelemente im Swing
Hochgradiger Simpel: Das Label
Das Auffangen der Ereignisse
Druckvolle Buttons
Ein BMI-Programm als Spielwiese
Eine doch nicht so einfache Liste
Der JTable und sein Modell
Bäume pflanzen mit JTree
Check den Button
Menüs und Dateidialoge
Der Fokus und der Multiliner
Aufgaben
Kapitel 19: Bermuda im Swing
Klassenbildung
Grafik aus Images
Ein Fensterrahmen für Bermuda
Das Bermuda-Panel
Erstellen einer Bermuda-JAR-Datei
Kapitel 20: Java FX, das neue Swing?
Mit Eclipse zur FX-Anwendung
Bühnendekoration
Mit NetBeans zur Java-FX-Anwendung
Ein Button als Kontrollelement
Mit dem Pane um Fassung ringen
Es kommt Leben in die Bude: EventHandler
Ein paar Kontrollelemente
Standarddialoge
Schickmachen mit CSS
Komponieren in FXML im SceneBuilder
Aufgaben
Kapitel 21: Bermuda im FX-Kleid
Das Hauptprogramm
Das Canvas für die Grafikdarstellung
Kapitel 22: Android
Alles ist ein wenig anders
Arbeitsumgebung schaffen
Gestaltung einer App
Java macht die Activity erst aktiv
Ereignisse der Kontrollelemente
Texte aus dem Java-Programm lesen
Bermuda auch auf Android
Und nun?
Teil V: Daten längerfristig speichern
Kapitel 23: Dateien halten die Daten frisch
Daten aus Textdateien lesen
Daten in einer Textdatei
Serialisierte Klassen
Spielstandsicherung für Bermuda
Properties als Konfigurationsdatei
Auf Strings über Strings zugreifen
Properties als Konfigurationsdatei
Random-Access-Dateizugriffe
Umgang mit dem Dateisystem
Verzeichnisse auslesen
Aufgaben
Kapitel 24: Datenbankzugriff aus Java
Datenbanken und ihre Tabellen
Eine Datenbank für die Bonbonbude
Wenn Datenbanken einmal groß werden
Transaktionen
Datenbankunterstützung durch Eclipse
Aufgaben
Java Persistence API: JPA
Kapitel 25: XML-Dateien
Die Strukturen von XML-Dateien
Einlesen einer XML-Datei
XML-Dateien schreiben
Eine beliebige XML-Datei auslesen
Kapitel 26: JSON
Der JSON-Sprachschatz
JSON in Java
Aufbau der JSON-Struktur
Klassen sorgen selbst für JSON
Frag mal Google Maps
Teil VI: Praktisches
Kapitel 27: Javabohnen als Datenmodell
Serialisierbarkeit
Attributänderungen und Meldung
Einspruch!
Kapitel 28: Parallelverarbeitung mit Threads
Erst einmal Schlaf nachholen
Leichtgewichtige Threads
Kollisionen in der Vasenfabrik
Warten auf Kartons
Wir warten nicht auf Godot: Time-out
Prozessoren rösten
Multitasking in der GUI
Aufgabe
Teil VII: Netzwerke und Internet
Kapitel 29: Netzwerkprogrammierung
Das Liebesgeflüster der Sockets
Mails versenden
Java als Web-Client
Java ruft Java: RMI
Time-out und Parallelität
Kapitel 30: Heidis Berge und die Enterprise Edition
Das Konzept des Application Servers
Vorbereitung und Installation
Glassfish spielt Indianer und Servlet
Java Server Pages
Java Server Faces
Der Gast und die Datenbank
Datenbankanwendung per JPA
Jersey und der ganze REST
SOAP: Ferngespräch in XML
Teil VIII: Werkzeuge
Kapitel 31: Dem Fehler auf der Spur
Alles so schön rot hier
Gelbe Warnungen
Der Eclipse-Debugger
Kapitel 32: Automatisierte Tests: JUnit
Konfiguration von Eclipse
Erstellen eines TestCase
Annotationen
JUnit-Testaufbau bei NetBeans
Kapitel 33: Die Versionskontrolle Git
Ein lokales Repository für Eclipse
Branches
Ein zentrales Repository
Git unter Android Studio
Teil IX: Der Top-Ten-Teil
Kapitel 34: Zehn Dinge
Zehn Hilfen bei der Fehlersuche
Zehn ganz persönliche Dinge
Stichwortverzeichnis
End User License Agreement
Kapitel 3
Tabelle 3.1: Primitive Typen und ihre Dimensionen
Tabelle 3.2: Operatoren in Java
Tabelle 3.3: Backslash-Sequenzen für Steuerzeichen
Kapitel 4
Tabelle 4.1: Vergleichsoperatoren
Tabelle 4.2: Wahrheitswertetabelle für UND
Tabelle 4.3: Wahrheitswertetabelle für ODER
Tabelle 4.4: Wahrheitswertetabelle für exklusives ODER
Tabelle 4.5: Wahrheitswertetabelle für NOT
Tabelle 4.6: Wahrheitswertetabelle zulässigen Fahrens und der Negation
Tabelle 4.7: Wahrheitswertetabelle der Umkehrung mit UND
Tabelle 4.8: Wahrheitswertetabelle der Umkehrung mit ODER
Tabelle 4.9: Notentabelle
Kapitel 6
Tabelle 6.1: Reguläre Ausdrücke
Kapitel 9
Tabelle 9.1: Primitive Typen und ihre Klassen-Wrapper
Kapitel 14
Tabelle 14.1: Datumskonstanten
Kapitel 15
Tabelle 15.1: Die Methoden der Queue
Kapitel 18
Tabelle 18.1: Spannungsabfall an LEDs
Kapitel 23
Tabelle 23.1: Der erste Block einer dBase-Datei
Kapitel 24
Tabelle 24.1: Eine Liste für die Artikel
Tabelle 24.2: Datenbanken und ihre JDBC-Treiberklassen
Kapitel 30
Tabelle 30.1: Entsprechung der HTTP- und SQL-Befehle
Kapitel 1
Abbildung 1.1: Vom Wohnmobil zum Wohnboot
Kapitel 2
Abbildung 2.1: Eclipse-Installer
Abbildung 2.2: Eclipse nach Anlegen des Projekts
Abbildung 2.3: Ein Fehler im Eclipse-Editor
Abbildung 2.4: NetBeans wird installiert.
Abbildung 2.5: Die IDE NetBeans
Kapitel 3
Abbildung 3.1: Start über das grüne Dreieck oder dessen Menü
Abbildung 3.2: Eingabe einer Zahl
Kapitel 4
Abbildung 4.1: Eine Weiche bringt eine Verzweigung des Ablaufs.
Abbildung 4.2: Eine Weiche führt zur Wiederholung.
Abbildung 4.3: Eine Weiche am Ende der Schleife
Abbildung 4.4: Struktogramm für
if
Abbildung 4.5: Struktogramm für
while
Abbildung 4.6: Struktogramm für
do
Abbildung 4.7: Struktogramm für die ggT-Berechnung
Abbildung 4.8: Struktogramm für ggT im Java-Code
Kapitel 5
Abbildung 5.1: Aus Parametern wird der Rückgabewert.
Abbildung 5.2: Türme von Hanoi
Abbildung 5.3: Lösung für die Türme von Hanoi
Kapitel 6
Abbildung 6.1: James Bond in seiner Rolle als String
Abbildung 6.2: Die Wirkung von
substring(26, 30)
Kapitel 7
Abbildung 7.1: Gleichartige Objekte dicht an dicht und nummeriert
Abbildung 7.2: Ein zweidimensionales Array ist ein Array von Array-Referenzen.
Kapitel 8
Abbildung 8.1: Das Spielfeld von Bermuda
Abbildung 8.2: Richtungen abfragen in Bermuda
Kapitel 9
Abbildung 9.1: Eclipse zeigt die Attribute und Methoden eines Objekts.
Abbildung 9.2: Eclipse-Hilfe mit Javadoc.
Abbildung 9.3: Das
next
-Attribut verkettet die Elemente der Liste.
Abbildung 9.4: Das
next
-Attribut wird auf das übernächste Element gelenkt.
Abbildung 9.5: Das
next
-Attribut wird umgebogen.
Abbildung 9.6: Das letzte
next
-Attribut baut den Ring.
Abbildung 9.7: Zwei Referenzen ziehen einen binären Baum auf.
Abbildung 9.8: Eclipse generiert Getter- und Setter-Methoden.
Abbildung 9.9: Eine Kiste hat drei Dimensionen.
Kapitel 11
Abbildung 11.1: Das Projekt mit seinen Packages
Abbildung 11.2: Automatische Importsuche
Abbildung 11.3: Hinzufügen von JARs zu den Libraries im Build Path
Kapitel 13
Abbildung 13.1: Eingabedialog
Abbildung 13.2: Anzeige der Methodeninformation
Kapitel 15
Abbildung 15.1: Die
ArrayList
in Bauklotzform
Abbildung 15.2: Die
LinkedList
in Bauklotzform
Abbildung 15.3: Iteratoren zeigen auf Container-Elemente.
Abbildung 15.4: Möglichkeiten einer Queue
Abbildung 15.5: Die Map in Bauklotzform
Kapitel 16
Abbildung 16.1: Ein Swing-Programm
Abbildung 16.2:
Terminate
-Button in Eclipse
Abbildung 16.3: Eine kleine Grafik
Abbildung 16.4: Eckig und geradlinig
Abbildung 16.5: Abstrakte Kunst?
Abbildung 16.6: Fett ist gelb, Zucker ist blau, und Eiweiß ist magenta.
Abbildung 16.7: Ein kleiner Bildbetrachter
Abbildung 16.8: Bildausschnitt kopieren
Abbildung 16.9: Clippingbereich setzen
Abbildung 16.10: Eine
Area
für ein Wappen
Abbildung 16.11: Farbübergang
Abbildung 16.12: Sommersprossen selbst gemacht
Abbildung 16.13: Mit der Maus unterwegs
Kapitel 17
Abbildung 17.1: FlowLayout
Abbildung 17.2:
GridLayout
Abbildung 17.3:
BorderLayout
Abbildung 17.4: Ein Beispieldialog
Abbildung 17.5: Dialog-Layout durch Kombination mehrerer Layouts
Abbildung 17.6:
JSplit
erzeugt einen verschiebbaren Balken
Abbildung 17.7:
JScrollPane
erzeugt einen Rollbalken als Rahmen.
Abbildung 17.8:
JTabbedPane
Abbildung 17.9:
GridBagLayout
für eine einfache Eingabemaske
Abbildung 17.10:
BoxLayout
Abbildung 17.11:
Box
Kapitel 18
Abbildung 18.1: Zweimal
JLabel
. Ein Bild und ein Text.
Abbildung 18.2: Einbau eines
ActionListeners
Abbildung 18.3: Wenn man Druck auf einen Button ausübt
Abbildung 18.4: Body-Mass-Index-Rechner
Abbildung 18.5: Body-Mass-Index-Rechner mit Radiobutton
Abbildung 18.6: Body-Mass-Index-Rechner mit Combobox
Abbildung 18.7: Eine Auswahlliste
Abbildung 18.8: Eine einfache Hitparade mit einem
JTable
Abbildung 18.9:
JTable
berücksichtigt Typen und ist editierbar.
Abbildung 18.10:
JTree
stellt das Benutzerverzeichnis dar.
Abbildung 18.11: Eine computergesteuerte Dinner-Party
Abbildung 18.12: Aufbau einer Menüleiste in Swing
Abbildung 18.13: Fokuswechsel
Kapitel 19
Abbildung 19.1: Die Bermuda-Images
Abbildung 19.2: Mit Swing sieht Bermuda schon besser aus.
Kapitel 20
Abbildung 20.1: Installation von
e(fx)clipse
Abbildung 20.2: NetBeans besitzt bereits Projekte für FX.
Abbildung 20.3: Der Button nach Start des NetBeans-Rahmenprogramms
Abbildung 20.4: Buttons in einer
HBox
Abbildung 20.5: Eingabemaske mit
GridPane
Abbildung 20.6:
BorderPane
mit Liste und Rändern
Abbildung 20.7:
GridPane
-Eingabemaske im
BorderPane
Abbildung 20.8: Ein TabPane mit drei Reitern
Abbildung 20.9: Fokuswechselanzeige
Abbildung 20.10:
CheckBox
und
ToggleButton
Abbildung 20.11:
RadioButtons
für das Fernsehprogramm
Abbildung 20.12: Eine
ComboBox
Abbildung 20.13: Eisauswahl mit zwei
ListViews
Abbildung 20.14: Die
TableView
zeigt den Highscore.
Abbildung 20.15: Nachrichtendienst
Abbildung 20.16: Eingabeaufforderung
Abbildung 20.17: Mehrere Buttons für Ja-Nein-Fragen
Abbildung 20.18: Dateiauswahldialog
Abbildung 20.19: Der SceneBuilder mit einem Dialogfenster
Kapitel 21
Abbildung 21.1: Bermuda mit Java FX
Kapitel 22
Abbildung 22.1: Nach dem Download
Abbildung 22.2: Android Studio nach der Installation
Abbildung 22.3: Neues Projekt im Android Studio
Abbildung 22.4: Zielgeräte für die App auswählen
Abbildung 22.5: Activity für die App auswählen
Abbildung 22.6: Android Studio mit dem ersten Projekt
Abbildung 22.7: Gestaltung der Activity
Abbildung 22.8: Die Kontrollelemente auf dem Display
Abbildung 22.9: Die Android-Emulation mit der BMI-App
Abbildung 22.10: Die Activity als XML-Code in Android Studio
Abbildung 22.11: Neue Sprache hinzufügen
Abbildung 22.12: Die leere
BermudaView
Abbildung 22.13: Bermuda mit Bitmaps unter Android
Kapitel 23
Abbildung 23.1: LibreOffice Calc erzeugt eine dBase-Datei.
Kapitel 24
Abbildung 24.1: Das Datenbank-Management-System
Abbildung 24.2: Eclipse in der Database-Development-Perspektive
Abbildung 24.3: Der Eclipse-Editor für
persistence.xml
Kapitel 30
Abbildung 30.1: Glassfish-Einrichtung in Eclipse
Abbildung 30.2: Glassfish-Administration per Browser
Abbildung 30.3: Das Eingabeformular
Abbildung 30.4: Eingabe der Gastdaten
Abbildung 30.5: Der REST-Service hat reagiert.
Abbildung 30.6: Einstellen des Web Service
Kapitel 31
Abbildung 31.1: Eclipse in der Debug-Perspektive
Abbildung 31.2: Eclipse und seine Debug-Symbole
Kapitel 32
Abbildung 32.1: Einbinden der JUnit Library
Abbildung 32.2: Test des JUnit-Test-Case
Kapitel 33
Abbildung 33.1: Der erste lokale Commit in Eclipse
Abbildung 33.2: Eclipse-Ansicht über die Branches über
Team
|
Switch
TO
|
Other
Cover
Inhaltsverzeichnis
Fangen Sie an zu lesen
C1
1
2
5
6
23
24
25
26
27
29
31
32
33
34
35
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
149
150
151
152
153
154
155
156
157
158
159
161
162
163
164
165
166
167
168
169
170
171
172
173
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
257
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
341
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
447
448
449
450
451
452
453
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
675
676
677
678
679
680
681
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
805
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
829
830
831
833
834
835
836
837
E1
In diesem Buch lernen Sie, warum Nashörner kein Bankkonto haben, dass Katzen besser kratzen, als sich zu übergeben, wie man Bauklötze arrangiert, dass Stringtangas gar nicht so erotisch sind, und dann noch die Programmiersprache Java. Sie werden Programme erstellen, die das Übergewicht des Autors quantifizieren, Schiffe im Bermuda-Dreieck verstecken, den Kiosk von Superhelden verwalten und die Almhütten von Heidi vermieten.
Wir fangen also bei null an. Sie werden Variablen, Schleifen und Methoden kennenlernen. Wir werden in die wunderbare Welt der objektorientierten Programmierung eintauchen und Sie können beim nächsten Stammtisch endlich mit Wörtern wie Polymorphie, Interface und Exception protzen. Aber wir werden dabei noch nicht stehen bleiben.
Die Welt der grafischen Oberflächen ist viel zu attraktiv, um sie zu ignorieren. Die Java-Welt befindet sich in einer Umbruchsituation. Die Java-Hersteller erklären, dass in Zukunft alle grafischen Entwicklungen nur noch mit Java-FX arbeiten werden. Das sehen vermutlich sehr viele Unternehmen anders, da sie seit Jahren bereits Swing verwenden. So ist also beides am Markt. Sicherheitshalber habe ich beide Technologien behandelt. Suchen Sie sich etwas aus! Und da es für Android noch einmal eine eigene grafische Umgebung gibt, werden wir auch da einmal hineinschauen.
Nun kommen wir schon in die Regionen für fortgeschrittene Programmierer. Wir sehen uns die Datencontainer des Java Collection Frameworks an, schreiben und lesen Dateien und Datenbanken, schauen, wie Programme parallel laufen können, und werden die Anwendungen zur Netzwerkkommunikation anregen.
Wenn wir so weit gekommen sind, können wir auch die Stufe zur Client-Server-Programmierung mit der Java Enterprise Edition erklimmen. Sie werden sehen, wie man Software as a Service erstellt, und Client-Server-Architekturen wie SOAP und REST kennenlernen.
Vielleicht sollte ich Sie warnen: Die Leute vom Verlag haben mir keine Vorschriften zu diesem Buch gemacht. Alles war erlaubt. Einfach alles. Es gab zwei Bedingungen: Ich darf nicht gegen geltendes Recht verstoßen und der Leser muss Java lernen. Es ist aber nicht so schlimm, wie Sie jetzt vielleicht fürchten. In weiten Teilen ist es wirklich ein seriöses Fachbuch.
Dieses Buch basiert auf meinem Java-Buch, das 2013 veröffentlicht wurde. Den Inhalt habe ich aktualisiert und noch all die Dinge hineingeschrieben, die ich wichtig fand. Es ist nun etwa doppelt so umfangreich und in der Reihe für Dummies erschienen.
In der ersten Auflage hatte Christine Siedle als Lektorin die Weichen gestellt. Bei dieser Auflage hat mich Marcel Ferner unterstützt. Beiden habe ich und vor allem das Buch viel zu verdanken. Frau Heubach-Erdmann begradigte meine Verbrechen an der deutschen Sprache und viele Leute mit Gefühl für Design bauten aus der Vorlage ein Buch. Und wenn nun noch die Abteilung Marketing richtig aktiv wird, werde ich vielleicht doch noch reich. Ansonsten versuche ich es weiter mit arbeiten.
Das Buch hat sehr davon profitiert, dass ich seit einiger Zeit bei der Hochschule Flensburg angestellt bin. Die Studenten der Veranstaltungen »Strukturierte Programmierung«, »Objektorientierte Programmierung« und »Client-Server-Programmierung mit der Java Enterprise Edition« hatten so einen erheblichen Einfluss auf die Gestaltung und die Verständlichkeit dieser Auflage. Mein Dank gilt auch den zahlreichen Kollegen, die mir viel Vertrauen entgegenbrachten. Die Atmosphäre dort ist toll. Wenn Sie also Informatik oder Medien-Informatik studieren wollen, kommen Sie in den Norden!
Auch meine Familie hat indirekt an diesem Buch mitgewirkt. Sie haben mich mit Nahrungsmitteln versorgt und mir den nötigen Freiraum verschafft. Selbst die Katze hatte ihren Anteil, wie Sie am Kapitel über Exceptions feststellen werden. Allerdings ist sie inzwischen verstorben. Aber ich bin unschuldig. Ehrlich!
Der Setzer hatte noch ein paar Schriftarten übrig. Daraus haben wir etwas gemacht:
Neue Fachbegriffe
werden hervorgehoben.
Oft haben Sie es mit
Dateien
oder
Pfaden
zu tun.
Manchmal finden Sie
www.informationen.de/im/internet
.
Menü
- oder
Buttonbeschriftungen
in grafischen Oberflächen werden auf diese Weise hervorgehoben.
Für
Befehle
und
Schlüsselworte
verwende ich diese Darstellung.
Funktionen
und
Methoden
werden auf diese Weise hervorgehoben. Und dann gibt es noch
Bezeichner
und
Variablen
.
Ich habe eine ganze Weile überlegt, wer Sie sind, der Sie dieses Buch lesen. Ich gehe mal davon aus, dass Sie vielleicht noch nicht oft oder noch nie programmiert haben. Aber pfiffig sollten Sie schon sein. Das sind nämlich alle Programmierer – fragen Sie doch mal einen!
Dann geriet ich in eine solche Schreibekstase, dass Themen dazukamen, die auch erfahrenen Java-Programmierern noch Spaß machen. Die können die ersten Kapitel mit einem wissenden Lächeln überblättern, werden aber bestimmt auch Spaß an dem Buch haben.
Sie werden nicht nur einen Computer benötigen, sondern ihn auch benutzen müssen. Programmieren ist mehr eine Frage der Routine als der Intelligenz. Das bestätigen alle, die mich kennen. Im Anfang ist es noch frustrierend, weil man ständig auf die selbst gemachten Fehler stößt. Darauf kann man unterschiedlich reagieren: Man wirft entnervt den Computer aus dem Fenster, schiebt die Schuld anderen in die Schuhe, beispielsweise Java oder dem doofen Autor, oder man beginnt, über sich selbst zu lachen.
Letzteres wünsche ich Ihnen. Mit der Zeit wird es nämlich besser. Und dann werden Sie feststellen, dass nichts so kreativ ist wie das Programmieren. Und Sie brauchen nicht mehr als Ihren Computer und Ihre Fantasie. Dann können Sie alles programmieren, was sich ein Mensch denken kann. Und das macht Spaß!
Wir haben uns auch in diesem Buch entschlossen, die Buchstaben von links nach rechts zu schreiben. Damit ein wenig Ordnung in die vielen Buchstaben kommt, gibt es eine grobe Gliederung:
Teil I: Programmieren lernen
Sie lernen die Werkzeuge kennen, wie man aus Schleifen, Abfragen und Methoden Programme baut. Sie werden Zahlen und Zeichenketten bändigen und miteinander verbinden. Damit kann man schon ein Spiel bauen und darum werden wir das auch tun.
Teil II: Objektorientiert und modular
Nun bauen Sie die Welt nach. Sie gestalten Objekte wie etwa Autos, Personen oder auch Mensaspeisen. Das Tolle an der Objektorientierung ist, dass man die Arbeit auf mehrere Leute verteilen kann.
Teil III: Erweitern Sie den Horizont
Wir lassen uns von Java in den Ausnahmesituationen unseres Programms mit Exceptions helfen, erfreuen uns an Werkzeugkästen voller Zufallszahlen, Kalendern und mathematischer Formeln. Gut, wenn man nicht alles selbst machen muss.
Teil IV: Fenster- und Grafikprogrammierung
Sie erstellen eigene Fenster. Spiele machen gleich viel mehr Spaß, wenn man sie grafisch untermalen kann. Das gute alte Swing und das neue FX werden gleichermaßen behandelt. Und da sich Android-Smartphones auch in Java programmieren lassen, spielen wir damit ebenfalls herum.
Teil V: Daten längerfristig speichern
Bisher war der Computer nur bis zum Ende des Programms schlau. Nun sollen die Programme lernen, ihre Weisheit aufzubewahren. Dazu greifen wir zu allen Mitteln: Dateien und Datenbanken. Und die wichtigsten Datenformate XML und JSON werden Sie auch noch brauchen.
Teil VI: Praktisches
Ich gebe zu, dass ich keine wirklich gute Überschrift für zwei Dinge fand, die darunter fallen. Als Beans bezeichnet man Datenobjekte und wir werden sehen, wie die gegenseitig Ereignisse melden. Threads sind parallel laufende Unterprogramme.
Teil VII: Netzwerke und Internet
Wir werden die Kommunikation zwischen Computern erproben, die Romeo und Julia spielen. Und dann wird Java Mails versenden, Webseiten lesen und mit Google Maps spielen.
Vor allem werden wir uns die Profitechniken von Java Enterprise Edition ansehen. Da fallen dann die Schlagwörter aus den Stellenanzeigen wie Application Server, Java Server Pages, JPA, REST und SOAP. Wir drehen also am ganz großen Rad der Client-Server-Architektur.
Teil VIII: Werkzeuge
Mit dem Debugger können Sie Programme Schritt auf Schritt verfolgen und so auch verborgene Fehler finden. Wir bauen Programme, die sich automatisch selbst testen, und verwenden eine Versionskontrolle, um in alten Versionen zu wühlen, aber auch, damit ein Programmierteam auf dem gleichen Stand ist.
Teil IX: Top-Ten-Teil
Hier finden Sie eine Hitparade der beliebtesten Programmierfehler und ganz persönliche Dinge.
Das ist ja doch ganz schön viel geworden. Erstaunlich, dass es so exakt zwischen die Buchdeckel passt.
Als ich dieses Buch schrieb, durfte ich mir ein paar Symbole aussuchen, die Sie nun immer wieder sehen werden. Sie müssen sie nicht auswendig lernen. Sie werden vermutlich schon am Inhalt merken, was sie bedeuten. Aber damit alles seine Ordnung hat, stelle ich Ihnen die Symbole kurz vor.
Neben diesem Symbol finden Sie das Konzentrat eines Abschnitts. Etwas, was Sie sich auf Ihren Spicker schreiben würden, wenn jemand Sie prüfen würde.
Ein Tipp lässt manche Arbeit etwas einfacher werden. Damit solche Hilfestellungen nicht verloren gehen, stehen sie neben diesem Symbol.
Wenn es da noch etwas zu erwähnen gibt, was zum Verständnis hilft, finden Sie dieses Symbol.
Bevor Sie mit einem Fehlgriff Daten zerstören, den PC schädigen oder die Welt pulverisieren, sollten Sie den Text hinter diesem Symbol lesen. Die Welt oder Ihr Computer werden Ihnen dankbar sein.
Manchmal gibt es ungeheuer spannende Hintergründe zu einem Thema, das den Anfänger aufgrund der Komplexität etwas verschrecken könnte. Bevor der Informatiker in mir durchgeht, habe ich versucht, dieses Symbol zu verwenden. Sie können dem Ausflug folgen oder den Inhalt einfach ignorieren.
Die Formalitäten sind erledigt. Sie können sich mit Ihrem Computer einschließen und die wunderbare Welt der Java-Programmierung entdecken. Dabei wird Ihr PC Dinge kennenlernen, die er nie zuvor gesehen hat.
Zu diesem Buch gibt es eine Supportseite im Internet: http://www.willemer.de/java4d. Die Lösungen zu den Aufgaben im Buch und die Quelltexte aus diesem Buch finden Sie auch unter: http://www.wiley-vch.de/ISBN9783527714506.
Falls Sie dieses Buch richtig gut finden, senden Sie eine Mail an den Verlag, schreiben Sie eine Rezension für Amazon und informieren Sie das Fernsehen. Falls nicht, schicken Sie eine Mail an [email protected]. Ich werde sie lesen, und sobald ich mich davon erholt habe, dass ein Leser mich nicht verstanden hat, werde ich Ihnen antworten.
Arnold WillemerNorgaardholz
Teil I
Kapitel 1
IN DIESEM KAPITEL
Bequem und abgesichert, aber vor allem objektorientiert
Übersetzen oder übersetzen?
Vorteile der Portabilität
Von dem Autor eines Fachbuches für eine Programmiersprache erwartet man, dass er im ersten Kapitel ein Loblied auf diese Sprache singt. Wenn Sie dieses Buch kaufen wollen, haben Sie vermutlich gute Gründe, Java zu lernen. Und da werde ich Ihnen natürlich nicht abraten und so einen potenziellen Leser verlieren! Wie sollte ich dann Bestseller-Autor werden?
Falls Sie die Programmiersprache, die Sie lernen wollen, nach dem Namen aussuchen, sind Sie hier richtig. Java! Kaum eine Programmiersprache hat solch einen hübschen Namen! Klingt Java nicht nach Südsee, Urlaub und weißen Stränden? Benannt wurde Java eigentlich nach Kaffee, der aus Java kommt. Auch das ist schön. Denn wer von uns mag denn keinen Kaffee?
Wer tatächlich weder Kaffee noch Südseeinseln mag, wird wohl Python programmieren müssen. Aber ob Schlangen wirklich schöner sind? Nebenbei bemerkt, ist die Sprache Python tatsächlich sehr nett. Ich könnte Ihnen da ein Buch empfehlen. Aber vielleicht sollte ich doch lieber erzählen, welche Besonderheiten Java so hat.
Java ist objektorientiert. Und weil objektorientiert beim Programmieren heutzutage ganz wichtig ist, drängt Java den Programmierer dazu, indem es massiv Hilfen zur Verfügung stellt. Nun ist die objektorientierte Programmierung, von ihren Fans auch kurz OOP genannt, wirklich hilfreich bei der Bewältigung großer Projekte. Darum sollten Sie Java diesen Zwang nicht übel nehmen.
Damit ich nicht allzu sehr ins Schwärmen gerate, werde ich hier auf Details zur OOP verzichten und dies an geeigneter Stelle nachholen.
Ein typisches Merkmal von Java ist der Versuch, so viele Fehlerquellen auszuräumen wie irgend möglich und so den Programmierer vor seinem eigenen Fehlverhalten zu beschützen. Ein gutes Beispiel ist die Müllabfuhr, die Garbage Collection. Programmierer vergessen schon mal die Beseitigung ihrer Speicherleichen. Und wir wissen ja alle, was mit alterndem Müll geschieht: Er beginnt langsam intensiv zu stinken.
Aber trotz aller Vorsichtsmaßnahmen durch Java ist eine sorgfältige Programmierung nicht überflüssig geworden. Ja, es gibt das Gerücht, dass auch schon einmal ein Java-Programm abgestürzt sei.
Wirklich brillieren kann Java allerdings auf dem Gebiet der Portabilität. Der Programmierer schreibt ein Programm, übersetzt es und es läuft auf Linux, Mac und Windows. Das ist schon sehr beeindruckend. Bei vielen anderen Programmiersprachen müssten Sie das Programm für jede Plattform neu schreiben. Ein Java-Programm sollte hingegen eigentlich auch auf jedem Telefon, der programmierbaren Fernbedienung, dem Toaster und auf allen Internetseiten laufen. Aber da ist sie wieder, die lästige Realität. Bei den Telefonen sind die Displays sehr klein, und bei Webanwendungen gibt es aus Sicherheitsgründen keinen Zugriff auf die lokalen Dateien. So müssen vielleicht nicht immer gleich Extra-Süppchen gekocht werden, aber manchmal muss die Beilage an das jeweilige Ziel angepasst werden. Weniger kulinarisch ausgedrückt: Sie können zwar auch auf exotischen Umgebungen Java programmieren, müssen aber ein paar Einschränkungen und Besonderheiten in Kauf nehmen.
Und dann gibt es noch marktpolitische Gründe, warum Java-Programme nicht überall da laufen dürfen, wo sie könnten. So hat Microsoft schon früh seine Unterstützung für Java zurückgezogen, als klar wurde, dass der Benutzer bei portablen Programmen frei wählen kann, ob er statt Windows vielleicht ein ganz anderes Betriebssystem verwenden möchte. Microsoft konnte zwar nicht verhindern, dass Java-Programme auch auf Windows laufen, sie müssen sich die Umgebung, in der sie laufen, aber selbst mitbringen. Apple unterbindet die Programmierung von iPhone-Apps in Java, angeblich um Sicherheitslücken zu vermeiden. Ein Schelm, der »Android« dabei denkt.
Wenn eine Anwendung überall laufen soll, ergibt sich zwangsläufig, dass Java alles an Bord haben muss, was das Programm je benötigen könnte. So ist insbesondere die grafische Oberfläche der Programme aus der Sicht des Java-Programmierers überall gleich. Andere Programmierer müssen für Windows entweder Win32, MFC oder .NET lernen. Für Linux sollten Sie GTK oder Qt beherrschen. Und natürlich hat der Mac auch eine ganz eigene Programmierschnittstelle. Dasselbe gilt auch für Datenbanken oder die Prozessverwaltung. Der Java-Programmierer programmiert alle Datenbanken gleich. Willkommen in der wunderbar langweiligen Welt der standardisierten Umgebung!
Ja, zugegeben: Java-Programme haben nicht den Ruf, mit quietschenden Reifen ihre Aufgaben zu erledigen. Das beginnt schon beim Start einer Java-Anwendung. Da startet nämlich zunächst die virtuelle Maschine durch, bevor das Programm das erste Mal husten kann. Nun weiß jeder Power-User, dass Java-Programme interpretiert werden (was das ist, steht im nächsten Abschnitt), und Interpreter haben seit den Zeiten von BASIC den Ruf elender Schnarchnasen.
Zum Glück sind die Zeiten der BASIC-Interpreter vorbei. Java übersetzt das Programm in einen vorkompilierten Code, der auf schnelle Ausführung optimiert ist, und so muss sich das Java-Laufzeitsystem nicht mit irgendwelche Textzeilen quälen. Außerdem ist es auch schon über zwanzig Jahre her, dass die meisten C-64 ihren Weg in den Elektronikschrott gefunden haben. Und seither sind unsere Computer so schnell geworden, dass Sie einen aktuellen Computer vom Discounter nur an seine Grenzen fahren können, indem Sie ihm mit der Konvertierung von Spielfilmen drohen oder einen Ego-Shooter spielen wollen, bei dem Sie das Blut in 3D spritzen sehen wollen. Auf einem Durchschnittsrechner werden Sie also keine Verzögerung bei der Ausführung der Java-Programme bemerken. Überraschenderweise benutze ich gerade für den Videoschnitt seit Jahren ein Java-Programm, das ich unter anderem wegen seiner Geschwindigkeit schätze.
Java ist eine Programmiersprache. Programmiersprachen sind für Menschen gemacht, damit sie darin Anweisungen für Computer codieren können. Das Problem ist, dass Computer eigentlich solche Sprachen nicht verstehen. Sie schwärmen eher für Zahlenkombinationen, die sie dann für Befehle halten und ausführen. Diese Diskrepanz muss irgendwie überbrückt werden. Es gibt zwei Arten von Programmen, die genau dies tun:
Ein
Compiler
arbeitet wie ein Übersetzungsbüro. Man schickt den Quellcode hin und erhält den Maschinencode zurück. Mit dem Ergebnis füttert man den Computer.
Ein
Interpreter
entspricht eher einem Simultan-Dolmetscher. Jeder Programmbefehl wird während der Laufzeit des Programms abgearbeitet.
Und was macht nun Java? Beides! Ich habe ja schon erwähnt, dass der Java-Code interpretiert wird. Aber das ist nur die halbe Wahrheit. Zuvor übersetzt der Java-Compiler, der von seinen Freunden javac genannt wird, den Quellcode in einen Maschinencode für eine Maschine, die es gar nicht gibt. Und dieser Maschinencode wird dann auf jeder Zielmaschine interpretiert. Der Interpreter nennt sich geschwollen Java Runtime System und wird mit seinem Spitznamen java aufgerufen.
Sowohl Compiler als auch Interpreter einzusetzen, erscheint zunächst völlig unsinnig. Das dahinter stehende Prinzip lässt sich aber an meinem Traum eines ultimativen Wohnmobils recht anschaulich erläutern. Es ist zusammengebaut aus einem Kleinlaster und einem alten Wohnwagen. Da sind richtig gute Ideen eingebaut. Die Betten sind bequem und mit einem Griff zur Sitzecke umgebaut. Die energieeffiziente Küche nutzt den kleinen Platz ideal. Die Dusche verbraucht kaum Wasser und hat doch einen vollen Strahl. Jetzt stellen Sie sich noch vor, das Wohnmobil habe einen speziellen Antrieb, der auf Solar-energie und Wasserstoff basiert. Wenn es nicht fährt, nutzt es die Sonne, um das bei Regen aufgefangene Wasser in Wasserstoff und Sauerstoff aufzuteilen.
Das Super-Wohnmobil hat lediglich einen Nachteil. Es fährt nur auf der Straße. Das ist für ein Wohnmobil nicht ungewöhnlich, ich fahre aber nun mal genauso gerne mit einem Boot in Urlaub. Es wäre also toll, wenn ich als Unterbau auch einen Bootsrumpf daruntersetzen könnte. Darum hat die Wohnzelle eine klare Verbindung, an denen die Anschlüsse und das Zahnrad für den Antrieb sitzen, und schon kann die Wohnzelle einfach durch einen Kran vom Boot auf den Laster und umgekehrt gesetzt werden. Wenn man nun noch jemanden findet, der einen Luftkissenunterbau herstellt, könnte man sogar in den Everglades Urlaub machen und Alligatoren füttern. Letzteres ist aber vermutlich verboten. Vor allem wenn man als Futter die Schwiegermutter verwendet.
Abbildung 1.1: Vom Wohnmobil zum Wohnboot
Und was hat das jetzt mit der virtuellen Maschine zu tun? Ganz einfach! Das übersetzte Java-Programm ist die Kabine. Es verändert sich nach der Erstellung nicht mehr. Es setzt auf einem Unterbau auf, der es von der harten Wirklichkeit der verschiedenen Computersysteme trennt. Ob das Vehikel zu Wasser oder zu Land unterwegs ist, muss die Kabine nicht wissen. Der Unterbau ist also die virtuelle Maschine und die Kabine die Java-Anwendung.
Die virtuelle Maschine ist das Java Runtime Environment (JRE). Bei einigen Systemen ist es bereits installiert oder eingebaut. Aber bei fast allen anderen Systemen kann man es nachinstallieren.
Wo wir gerade bei dreibuchstabigen Kürzeln sind: Neben dem JRE gibt es noch das JDK. Das JDK ist das Java Development Kit. Das ist der Werkzeugsatz, den der Programmierer benötigt, um Java-Programme zu entwickeln. Es enthält beispielsweise den Compiler, der aus dem Source-Code den Zwischencode erzeugt, der dann später von der JRE ausgeführt werden kann.
Das JDK (Java Development Kit) enthält den Compiler für den Code der virtuellen Maschine. Das JRE (Java Runtime Environment) interpretiert diesen Code für die Zielmaschine.
Wer mit Computern zu tun hat, stellt fest, dass die Branche gelegentlich etwas an Sachlichkeit zu wünschen übrig lässt. Die Emotionswelle entspricht manchmal der von Fußballfans. Wer eine Programmiersprache kennt, wird sie bis aufs Messer verteidigen und Beweise über die Unfähigkeit aller anderen Programmiersprachen auf den Tisch legen. Dabei sind Erfahrungen mit der gegnerischen Sprache scheinbar eher hinderlich.
Der Hintergrund dieser Emotionen ist vermutlich die Angst, das eigene Wissen könnte obsolet werden, wenn sich die andere Programmiersprache oder das andere Betriebssystem durchsetzt.
Java hat seine Kompetenz da, wo Portabilität benötigt wird. Bei sorgfältiger Programmierung kann das Programm ohne Neuübersetzung auf verschiedenen Computern laufen.
Das hat zur direkten Folge, dass es klare Vorgehensweisen geben muss, wie man Datenbanken und grafische Oberflächen programmiert, ohne auf die Spezialitäten einzelner Produkte eingehen zu müssen. Es ergibt sich also eine hohe Standardisierung.
Das Design der Sprache Java ist durch eine gewisse Ideologie geprägt. Man möchte den Programmierer dazu zwingen, saubere objektorientierte Programme zu schreiben. Das hat etwas für sich, wenn man sieht, dass Cobol-Programmierer in jeder Programmiersprache Cobol programmieren können. Und Cobol ist wahrhaft keine übersichtliche oder wartungsfreundliche Programmiersprache.
Kapitel 2
IN DIESEM KAPITEL
Werkzeugkiste für den Programmierer
Die Befehle und die Entwicklungsumgebung
Grüßen im August
Ich denke, dass nun der Tatendrang aus Ihnen hervorbricht, denn es sollen Programme entstehen. Dazu benötigen Sie als Programmierer Werkzeug und davon gibt es reichlich und erstaunlicherweise alles kostenlos.
Die meisten Programmierer bevorzugen eine IDE. IDE hat leider nicht zwangsläufig etwas mit Idee zu tun, sondern ist die Abkürzung für Integrated Development Environment, also integrierte Entwicklungsumgebung. Diese Programme enthalten einen Editor, den Compiler, einen Debugger, eine Projektverwaltung und einige sehr praktische Tools.
Aber wo wir gerade bei Idee sind: Es ist nicht falsch, wenn ein Java-Programmierer eine Idee davon hat, wie es unter der Motorhaube seiner IDE aussieht. Dazu besuchen wir das Java Development Kit.
Um mit den Entwicklungsumgebungen wenigstens kurz spielen zu können, brauchen wir erst einmal ein kleines Java-Programm. Seit dem Erscheinen der Programmiersprache C hat es sich eingebürgert, ein Minimalprogramm zu erstellen, das »Hallo Welt!« auf den Bildschirm schreibt. In Java sieht das so aus:
Viele Details dieses kleinen Programms werden erst im Laufe des Buches genauer erläutert. Aber damit nicht der Eindruck entsteht, die Zeilen seien vom Himmel gefallen, darf ich Sie vielleicht kurz mit ihnen bekannt manchen.
public
: Das Schlüsselwort
public
ist ein Modifizierer. Das bedeutet, dass er den folgenden Bereich etwas verändert. In diesem besonderen Fall bedeutet
public
, dass die folgende Klasse von außen frei zugänglich ist. Es gibt keine Geheimnisse, Paparazzi werden arbeitslos. Das Wort
public
taucht noch einmal in der nächsten Zeile auf. Dort veröffentlicht es eine Methode. Eine Methode ist etwas, das etwas tut.
class
: Das Schlüsselwort
class
ist keine Auszeichnung, sondern ist auch für weniger tolle Programme zwingend. Jedes Java-Programm besteht aus mindestens einer Klasse. Dem Schlüsselwort folgt der Name der Klasse, den der Programmierer aussucht. Hier ist es
ErsteKlasse
.
Geschweifte Klammern: Mit einem geschweiften Klammernpaar wird ein Block von Anweisungen zusammengefasst. Sie können ineinander verschachtelt werden, wie das hier zu sehen ist.
static
: Das Schlüsselwort
static
ist ein Modifizierer für eine Methode oder ein Attribut, die es nur einmal pro Klasse gibt. Es muss genau da hin und da es ohne Vorwissen schwer zu begründen ist, müssen Sie mir vorläufig einfach vertrauen, auch wenn es schwerfällt.
void main(String[] args): Mit main beginnt die Hauptfunktion des Programms. Funktionen heißen in Java im Allgemeinen Methoden. Zwischen den runden Klammern stehen Parameter, die von außen an das Programm herangetragen werden. Auch dies lassen wir erst einmal ruhen, bis wir auf Parameter näher eingehen. In diesem Programm wird eh noch nicht auf sie zugegriffen. Dennoch müssen die Parameter benannt werden.
Und void? Das heißt nichts. Wirklich! Gar nichts. Es sagt hier, dass die Hauptfunktion – ich meine natürlich Hauptmethode – gar nichts an das System zurückgibt. Verrückterweise steht das, was hinten rauskommt, bei der Methodendeklaration vorn. Sie werden sich daran gewöhnen müssen.
System.out.println
: Alles, was in den Klammern steht, wird über den Systemausgabekanal angezeigt, oder weniger hochtrabend ausgedrückt: Es wird auf dem Bildschirm ausgegeben. Text wird dazu in Anführungszeichen gesetzt.
Die geschweiften Klammern werden jeweils wieder geschlossen. Der Compiler wird etwas pinselig, wenn das nicht passiert.
Der Programmtext steht in einer Datei, die den Namen der Klasse tragen muss und auf die Extension java endet, hier also ErsteKlasse.java. Die Groß- und Kleinschreibung ist signifikant. Das birgt eine Überraschung, weil es Windows egal ist, ob seine Dateien in Groß- oder Kleinbuchstaben geschrieben werden. Dort würden ErsteKlasse.java und ersteklasse.java dieselbe Datei bezeichnen.
Der Quelltext darf übrigens nicht mit einer Textverarbeitung wie Word oder OpenOffice.Writer geschrieben werden. Ein Quelltext wird mit einem Editor geschrieben, der keinerlei zusätzliche Informationen wie Schriftarten oder Ausrichtungen hinterlegt. All das würde einen Compiler nur irritieren. Stattdessen werden nur die nackten Texte geschrieben. Man spricht auch von rohem Text (raw text).
Dafür sind viele dieser Editoren auf Programmierung spezialisiert und färben beispielsweise die Quelltexte schön bunt, damit der Programmierer schnell erkennt, was Schlüsselworte sind, oder ob alle geöffneten Klammern auch wieder geschlossen werden. Da können Textteile zusammengeklappt werden oder auch Referenzhilfen angezeigt werden. Sie werden Ihre Textverarbeitung deshalb langfristig bestimmt nicht vermissen!
Verwenden Sie zum Programmieren einen Editor statt einer Textverarbeitung! Der Compiler verzehrt Quelltexte am liebsten schön roh.
Die Mindestausstattung, die Sie für die Java-Programmierung brauchen, finden Sie im Java Development Kit (JDK). Allerdings enthält es keine grafischen Werkzeuge, sondern Programme, die in klassischer Weise über die Kommandozeile aufgerufen werden. Programmierer, die so arbeiten, haben den Ruf von Leuten, die sich lieber im Wald ein Zelt aus Zweigen bauen, als eine Ferienwohnung auf Mallorca zu mieten.
Zunächst müssen Sie das JDK aber erst mal haben. Linux-Benutzer installieren das JDK über das distributionseigene Installationstool. Windows- und Mac-Benutzer laden das JDK von der Website von Oracle:
http://www.oracle.com/technetwork/java/javase/downloads/index.html
Hier suchen Sie nach dem Link zum Download des JDK der Java Standard Edition (Java SE). Nun können Sie Ihre Betriebssystemversion auswählen. Bei Windows gibt es für 32-Bit- und 64-Bit-Versionen je eine EXE-Datei. Natürlich müssen Sie noch die Lizenzbedingungen akzeptieren. Dann können Sie die Datei herunterladen. Diese klicken Sie doppelt an und folgen den Installationsanweisungen. Auch für Mac finden Sie eine Standardinstallationsdatei, die Sie ebenso herunterladen und doppelklicken.
Das JDK kommt in Form einer ausführbaren Datei, die eine ganz normale Installation durchführt, wie Sie sie auch von anderen Programmen her kennen. Sie können alle Schritte einfach bestätigen. Wenn Sie die Installation fragt, wo alle Dateien hingeschafft werden sollen, sollten Sie aufmerken. Typischerweise installiert die Routine in ein Verzeichnis, das mit C:∖Program Files∖Java∖jdk beginnt. Das Verzeichnis enthält auch die Versionsnummer. Merken Sie sich diesen Pfad!
Wenn Sie den Java-Compiler und andere Tools von der Kommandozeile aufrufen wollen, dann sollten Sie nun noch die Umgebungsvariable PATH anpassen. Diese können Sie bei Windows erreichen, indem Sie die -Taste mit der -Taste zusammen drücken. Es erscheint ein Fenster, in dem Sie ErweiterteSystemeinstellungen anklicken. Es erscheint ein weiteres Fenster. Unter dem Reiter Erweitert finden Sie den Button Umgebungsvariablen. Es startet ein weiteres Dialogfenster, in dem Sie PATH als neue Variable anlegen können. Als Wert hängen Sie den Pfad des JDK an, dem Sie noch ein Verzeichnis bin anhängen, weil sich darin die ausführbaren Programme befinden.
PATH=%PATH%;C:\Programme\Java\jdk\bin
Sollten Sie noch Windows XP verwenden, öffnen Sie das Start-Menü und klicken mit der rechten Maustaste auf Arbeitsplatz. Im Kontextmenü wählen Sie Eigenschaften aus und kommen dann über Erweitert zu Umgebungsvariablen.
Liebhaber des Macintoshs finden auf ihrem Gerät bereits ein komplettes JDK, sofern ihr Gerät mit einem Betriebssystem bis 10.6 ausgestattet ist. Allerdings ist die dort lauffähige Java-Version 6 schon historisch wertvoll.
Tatsächlich wird diese Version von Apple auch für neuere Versionen von MacOS X angeboten, allerdings nur als JRE. Nach der Installation dieser Version gibt es häufig erhebliche Probleme mit diesem Gerät.
Statt also bei Apple zu suchen, sollten Sie sich lieber der Website von Oracle zuwenden und dürfen dort das aktuelle JDK herunterladen. Die Datei ist eine typische Installationsdatei für den Mac und wird durch einen einfachen Doppelklick installiert wie jedes andere Programm auch. Dabei sind Administrationsrechte erforderlich, weil das JDK grundsätzlich für alle Benutzer des Rechners eingerichtet wird.
Wenn Sie das JDK unter Linux installieren wollen, tun Sie sich den Gefallen und halten Sie sich an die normalen Paket-Installationen Ihrer Linux-Distribution. Erstens ist es der leichteste Weg. Zweitens sind Sie sicher, dass Sie keine Programme zweifelhafter Herkunft installieren. Und drittens sorgt die Installationsroutine dafür, dass alle Umgebungsvariablen korrekt gesetzt sind und Sie einfach anfangen können.
Rufen Sie das zu Ihrer Distribution gehörige Installationstool auf. Das könnte Synaptec, Software-Center oder Muon heißen, je nachdem, welche Distribution und welchen Desktop Sie verwenden. Darin suchen Sie nach dem Stichwort »JDK« und finden das Paket default-jdk. Dieses Pseudopaket verweist auf die aktuellste Version des Standard-JDKs. Dieses installieren Sie. Alle weiter benötigten Pakete werden automatisch mitinstalliert. Alle Umgebungsvariablen werden automatisch gesetzt.
Damit haben Sie das Werkzeug an Bord, um Ihre Java-Programme kompilieren und dann auch ausführen zu können.
Der Java-Compiler heißt javac und kann direkt mit dem Namen der Quelltextdatei von der Konsole aus gestartet werden. Unter Windows heißt diese cmd.exe. Sie können sie direkt über das Menü Start|Ausführen aufrufen. Sie finden sie auch unter dem Namen Eingabeaufforderung im Zubehör. Auf dem Mac suchen Sie beispielsweise über + nach dem Programm Terminal. Unter Linux gibt es an jeder Ecke eine Terminal-Emulation, meist unter dem Namen Terminal oder Konsole in den Untermenüs Zubehör oder System.
Sie wechseln mit dem Befehl cd in das Verzeichnis, in dem Ihr Java-Quelltext ErsteKlasse.java steht und rufen dann den Compiler auf:
javac ErsteKlasse.java
Falls Sie Fehlermeldungen bekommen, die besagen, dass javac nicht gefunden wurde, prüfen Sie Ihre Installation. Sollte der Compiler den Quelltext beanstanden, schieben Sie bitte zuerst mir die Schuld in die Schuhe und prüfen Sie dann, ob Sie beim Abtippen einen Fehler gemacht haben. Sollten hingegen keine Fehler gemeldet werden, erzeugt der Compiler aus der Datei ErsteKlasse.java eine Datei namens ErsteKlasse.class.
Diese Datei kann nicht einfach gestartet werden, weil sie weder unter Windows noch Mac oder Linux selbstständig läuft, deswegen kommt jetzt das Java Runtime Environment ins Spiel.
Das Runtime Environment starten Sie von der Konsole aus mit java. Als Parameter erhält es den Dateinamen der vorkompilierten Java-Klasse, aber bitte ohne die Extension .class, denn sonst gibt es böse Fehlermeldungen.
java ErsteKlasse
Wenn alles gutgegangen ist, erscheint auf der Konsole die Zeile:
Hallo Welt!
Nun bestehen große Programme aus ganz vielen Klassen und so auch aus ganz vielen Dateien. Braucht das Programm weitere Klassen, so wird es im aktuellen Verzeichnis nach den passenden Dateien mit der Erweiterung class suchen. Das ist auch der Grund, warum der Dateiname dem Klassennamen entsprechen muss.
Aber was macht man jetzt unter Windows, wenn eine Klasse MyClass und die andere myclass heißt? Java unterscheidet zwar Groß- und Kleinschreibung, aber Windows tut dies bei Dateinamen nicht. Beide Klassen könnten also gar nicht nebeneinander in einem Verzeichnis stehen. An dieser Stelle helfen aber die Konventionen. Bei Klassennamen pflegt man den ersten Buchstaben großzuschreiben. Wortanfänge werden gern durch Großbuchstaben angezeigt, wie bei ErsteKlasse. Der Klassenname ersteklasse widerspräche also der Konvention.
Auch wenn Sie das bei den ersten Programmen noch nicht betrifft, stellt sich natürlich die Frage, ob das nicht sehr lästig ist, wenn man bei einem großen Projekt vielleicht mehrere Hundert Dateien installieren muss. So viele Klassen kommen da schon locker zusammen. Irgendwie sollte man das Ganze zusammenpacken können.
Ob Sie es glauben oder nicht: Das ist möglich! Sie hatten es nach dieser Einleitung wohl auch schon vermutet. Aber nun kommen wir zum komplizierteren Teil: Wie macht man das?
Das Packprogramm heißt jar. Übersetzt heißt es zwar Krug, was irgendwie passt, aber eigentlich ist der Name eine Abwandlung von tar, dem Standard-Packprogramm von Linux, dessen Syntax das Programm auch folgt. Sie müssen aber nicht alle Möglichkeiten kennenlernen. Es reicht zu wissen, wie Sie eine gepackte Anwendung zusammensetzen können.
Das Runtime Environment würde beim Start eines solchen Pakets natürlich schon gern wissen, in welcher der vielen Klassendateien eigentlich die Hauptfunktion main steckt. Dazu schreiben Sie ein Manifest. Das mag hochgestochen klingen, aber ausnahmsweise habe ich mir das nicht ausgedacht. Es heißt wirklich so.
Das Manifest könnte in der einfachsten Form den folgenden Aufbau haben:
Manifest-Version: 1.0Main-Class: ErsteKlasse
Im Abschluss muss noch eine Leerzeile hinzugefügt werden, sonst bekommt das Laufzeitsystem wieder seine Migräne.
Welchen Dateinamen Sie für die Manifest-Datei verwenden, ist egal. Das Manifest wird vom Befehl jar später immer unter dem Namen MANIFEST.MF im Archiv abgelegt. Im folgenden Aufruf gehen wir davon aus, dass Ihr Manifest unter dem Dateinamen manifest.txt erstellt wurde.
Der folgende Befehl erzeugt ein Programmpaket namens MeinProgramm.jar, entnimmt das Manifest der Datei manifest.txt und bindet die beiden Klassendateien ErsteKlasse.class und NochEine.class ein:
jar -cfm MeinProgramm.jar manifest.txt ErsteKlasse.class NochEine.class
Die entstandene Datei MeinProgramm.jar kann fast wie die Klassendateien über das Runtime Environment System aufgerufen werden. Allerdings muss die Option -jar noch angegeben werden:
java -jar MeinProgramm.jar
Wenn Sie die jar-Dateien als ausführbar auf Ihrem Computer anmelden, können Sie sie sogar direkt von der grafischen Oberfläche doppelklicken.