Günster | Einführung in Java | E-Book | www.sack.de
E-Book

E-Book, Deutsch, 736 Seiten

Reihe: Rheinwerk Computing

Günster Einführung in Java

Für Studium, Ausbildung und Beruf
3. Auflage 2020
ISBN: 978-3-8362-7657-3
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection

Für Studium, Ausbildung und Beruf

E-Book, Deutsch, 736 Seiten

Reihe: Rheinwerk Computing

ISBN: 978-3-8362-7657-3
Verlag: Rheinwerk
Format: EPUB
Kopierschutz: 0 - No protection



Mit diesem Buch steigen Sie ohne Vorkenntnisse in Java und die objektorientierte Programmierung ein. Schritt für Schritt machen Sie sich mit der Sprache und ihren Konzepten vertraut. Sie lernen, in Algorithmen zu denken und Java sowie die vielen Werkzeuge Ihrer Plattform geschickt zu nutzen. Immer praxisnah und mit Gefühl für mögliche Verständnishürden: So werden auch professionelle Themen wie Testabdeckung, Multithreading und Servletentwicklung einsteigergerecht vermittelt. Schließlich schreiben Sie zeitgemäßen Code, der auch komplexe Software trägt. Ideal für Ausbildung, Studium und Beruf!

Aus dem Inhalt:

  • Die Entwicklungsumgebung einrichten und kennenlernen
  • Grundkonzepte glasklar vorgestellt
  • Sprachmittel gründlich verstehen
  • Neue Features einsetzen
  • Unit Tests und Test Driven Design
  • Datenbanken anbinden
  • In Servlet-Technologie einsteigen
  • Events einsetzen und asynchron programmieren
  • GUIs entwickeln
  • Guten Code schreiben
  • Mit Dateien und Streams arbeiten
  • In die Entwicklung von Android-Apps einsteigen
Günster Einführung in Java jetzt bestellen!

Autoren/Hrsg.


Weitere Infos & Material




  Materialien zum Buch ... 19


  1.  Einführung ... 21


       1.1 ... Was ist Java? ... 22

       1.2 ... Die Arbeitsumgebung installieren ... 28

       1.3 ... Erste Schritte in NetBeans ... 30

       1.4 ... Das erste Programm ... 32

       1.5 ... In Algorithmen denken, in Java schreiben ... 41

       1.6 ... Die Java-Klassenbibliothek ... 47

       1.7 ... Dokumentieren als Gewohnheit -- Javadoc ... 50

       1.8 ... JARs erstellen und ausführen ... 56

       1.9 ... Mit dem Debugger arbeiten ... 61

       1.10 ... Das erste eigene Projekt ... 66

       1.11 ... Zusammenfassung ... 68



  2.  Variablen und Datentypen ... 69


       2.1 ... Variablen ... 69

       2.2 ... Primitivtypen ... 73

       2.3 ... Objekttypen ... 87

       2.4 ... Objekt-Wrapper zu Primitiven ... 91

       2.5 ... Array-Typen ... 94

       2.6 ... Zusammenfassung ... 96



  3.  Entscheidungen ... 97


       3.1 ... Entweder-oder-Entscheidungen ... 97

       3.2 ... Logische Verknüpfungen ... 104

       3.3 ... Mehrfach verzweigen mit »switch« ... 110

       3.4 ... Zusammenfassung ... 116



  4.  Wiederholungen ... 117


       4.1 ... Bedingte Wiederholungen mit »while« ... 117

       4.2 ... Abgezählte Wiederholungen -- die »for«-Schleife ... 121

       4.3 ... Abbrechen und überspringen ... 123

       4.4 ... Zusammenfassung ... 126



  5.  Klassen und Objekte ... 127


       5.1 ... Klassen und Objekte ... 128

       5.2 ... Access-Modifier ... 130

       5.3 ... Felder ... 132

       5.4 ... Methoden ... 133

       5.5 ... Warum Objektorientierung? ... 142

       5.6 ... Konstruktoren ... 144

       5.7 ... Statische Felder und Methoden ... 148

       5.8 ... Unveränderliche Werte ... 151

       5.9 ... Spezielle Objektmethoden ... 154

       5.10 ... Zusammenfassung ... 156



  6.  Objektorientierung ... 157


       6.1 ... Vererbung ... 158

       6.2 ... Interfaces und abstrakte Datentypen ... 171

       6.3 ... Übung: Objektorientierte Modellierung ... 179

       6.4 ... Innere Klassen ... 180

       6.5 ... Enumerationen ... 187

       6.6 ... Zusammenfassung ... 190



  7.  Unit Testing ... 191


       7.1 ... Das JUnit-Framework ... 193

       7.2 ... Fortgeschrittene Unit Tests ... 199

       7.3 ... Besseres Design durch Testfälle ... 205

       7.4 ... Zusammenfassung ... 208



  8.  Die Standardbibliothek ... 209


       8.1 ... Zahlen ... 209

       8.2 ... Strings ... 214

       8.3 ... Reguläre Ausdrücke ... 224

       8.4 ... Zeit und Datum ... 231

       8.5 ... Internationalisierung und Lokalisierung ... 236

       8.6 ... Zusammenfassung ... 244



  9.  Fehler und Ausnahmen ... 245


       9.1 ... Exceptions werfen und behandeln ... 245

       9.2 ... Verschiedene Arten von Exceptions ... 252

       9.3 ... Invarianten, Vor- und Nachbedingungen ... 258

       9.4 ... Zusammenfassung ... 260



10.  Arrays und Collections ... 261


       10.1 ... Arrays ... 261

       10.2 ... Die for-each-Schleife ... 271

       10.3 ... Variable Parameterlisten ... 271

       10.4 ... Collections ... 273

       10.5 ... Typisierte Collections -- Generics ... 278

       10.6 ... Maps ... 288

       10.7 ... Zusammenfassung ... 290



11.  Lambda-Ausdrücke ... 291


       11.1 ... Was sind Lambda-Ausdrücke? ... 292

       11.2 ... Die Stream-API ... 304

       11.3 ... Un-Werte als Objekte -- »Optional« ... 321

       11.4 ... Eine Warnung zum Schluss ... 324

       11.5 ... Zusammenfassung ... 325



12.  Dateien, Streams und Reader ... 327


       12.1 ... Dateien und Verzeichnisse ... 328

       12.2 ... Reader, Writer und die »anderen« Streams ... 334

       12.3 ... Objekte lesen und schreiben ... 346

       12.4 ... Netzwerkkommunikation ... 349

       12.5 ... Zusammenfassung ... 352



13.  Multithreading ... 353


       13.1 ... Threads und Runnables ... 354

       13.2 ... Atomare Datentypen ... 361

       13.3 ... Synchronisation ... 362

       13.4 ... Fortgeschrittene Koordination zwischen Threads ... 370

       13.5 ... Die Zukunft -- wortwörtlich ... 376

       13.6 ... Das Speichermodell von Threads ... 381

       13.7 ... Zusammenfassung ... 383



14.  Servlets -- Java im Web ... 385


       14.1 ... Einen Servlet-Container installieren ... 386

       14.2 ... Die erste Servlet-Anwendung ... 392

       14.3 ... Servlets programmieren ... 403

       14.4 ... Java Server Pages ... 410

       14.5 ... Langlebige Daten im Servlet -- Ablage in Session und Application ... 416

       14.6 ... Fortgeschrittene Servlet-Konzepte -- Listener und Initialisierung ... 419

       14.7 ... Zusammenfassung ... 422



15.  Datenbanken und Entitäten ... 423


       15.1 ... Was ist eine Datenbank? ... 424

       15.2 ... Mit einer Datenbank über die JPA verbinden ... 431

       15.3 ... Anwendung und Entitäten ... 436

       15.4 ... Entitäten laden ... 439

       15.5 ... Entitäten löschen ... 444

       15.6 ... Beziehungen zu anderen Entitäten ... 445

       15.7 ... Zusammenfassung ... 452



16.  GUIs mit JavaFX ... 453


       16.1 ... Einführung ... 453

       16.2 ... Installation ... 454

       16.3 ... Architektur von JavaFX ... 454

       16.4 ... GUI-Komponenten ... 457

       16.5 ... Layouts ... 468

       16.6 ... GUI mit Java-API -- Urlaubsverwaltung ... 478

       16.7 ... Event-Handling ... 482

       16.8 ... JavaFX-Properties und Binding ... 489

       16.9 ... Deklarative GUIs mit FXML ... 495

       16.10 ... Layout mit CSS ... 501

       16.11 ... Transformationen, Animationen und Effekte ... 505

       16.12 ... Übungen ... 512

       16.13 ... Zusammenfassung ... 513



17.  Android ... 515


       17.1 ... Einstieg in die Android-Entwicklung ... 515

       17.2 ... Eine Benutzeroberfläche designen ... 528

       17.3 ... Anwendungen mit mehreren Activities ... 535

       17.4 ... Permissions und SystemServices ... 542

       17.5 ... Apps im Play Store veröffentlichen ... 546

       17.6 ... Zusammenfassung ... 546



18.  Hinter den Kulissen ... 549


       18.1 ... Klassenpfade und Classloading ... 549

       18.2 ... Garbage Collection ... 556

       18.3 ... Flexibel codieren mit der Reflection-API ... 563

       18.4 ... Blick in die Zukunft ... 569

       18.5 ... Zusammenfassung ... 572



19.  Und dann? ... 573


       19.1 ... Jakarta EE ... 574

       19.2 ... Open-Source-Software ... 579

       19.3 ... Ergänzende Technologien ... 580

       19.4 ... Andere Sprachen ... 583

       19.5 ... Programmieren Sie! ... 585



  Anhang ... 587


       A ... Java-Bibliotheken ... 589

       B ... Lösungen zu den Übungsaufgaben ... 597

       C ... Glossar ... 707

       D ... Kommandozeilenparameter ... 723



  Index ... 731


1    Einführung


Mehr als eine Programmiersprache. Das mag wie schlechte Fernsehwerbung klingen, ist aber keineswegs übertrieben, denn zur Plattform Java gehören eine Reihe von Komponenten, von denen die Programmiersprache nur eine ist. In diesem Kapitel lernen Sie die Bausteine kennen, aus denen die Plattform zusammengesetzt ist, sowie eine Entwicklungsumgebung, mit der Sie auf der Plattform schnell und einfach Java programmieren.

Warum diese Sprache? Das ist wohl die Frage, die jede Einführung in eine Programmiersprache so schnell wie möglich beantworten sollte. Schließlich wollen Sie wissen, ob Sie im Begriff sind, auf das richtige Pferd zu setzen.

Programmiersprachen gibt es viele. Deren Liste in der englischsprachigen Wikipedia (http://en.wikipedia.org/wiki/List_of_programming_languages) hat im Februar 2020 mehr als 600 Einträge. Selbst wenn 90 % davon keine nennenswerte Verbreitung (mehr) haben, bleiben mehr Sprachen übrig, als man im Leben lernen möchte, manche davon mit einer längeren Geschichte als Java, andere jünger und angeblich angesagter als Java. Warum also Java?

Java ist die meistgenutzte Programmiersprache weltweit (Quelle: http://www.tiobe. com/tiobe-index, März 2020), und es gibt sehr gute Gründe für diese Popularität. Viele davon sind natürlich Vorteile der Sprache Java selbst und der Java-Plattform – dazu gleich mehr –, aber der vielleicht wichtigste Grund ist ein externer: Java hat eine unerreichte Breite von Anwendungsgebieten. Es kommt in kritischen Geschäftsanwendungen ebenso zum Einsatz wie in Googles mobilem Betriebssystem Android. Java ist eine beliebte Sprache für serverseitige Programmierung im World Wide Web wie auch für Desktopanwendungen. In Java geschriebene Programme laufen auf fast jedem Computer, egal, ob dieser mit Linux, Windows oder Mac OS betrieben wird – und im Gegensatz zu anderen Programmiersprachen gibt es dabei nur eine Programmversion, nicht eine für jedes unterstützte System, denn Java-Programme sind plattformunabhängig.

Neben dem breiten Einsatzgebiet hat die Sprache Java, wie oben bereits erwähnt, auch »innere« Werte, die überzeugen. Oder besser: Zur Plattform Java gehört mehr als nur die Sprache.

1.1    Was ist Java?


Die Programmiersprache Java, um die es in diesem Buch hauptsächlich gehen soll, ist nur ein Bestandteil der Java-Plattform. Zur Plattform gehören neben der Sprache die Laufzeitumgebung, das Programm, das Java-Programme ausführt, und eine umfangreiche Klassenbibliothek, die in jeder Java-Installation ohne weiteren Installationsaufwand zur Verfügung steht. Betrachten wir die einzelnen Teile der Java-Plattform etwas näher.

1.1.1    Java – die Sprache


Das Hauptmerkmal der Programmiersprache Java besteht darin, dass sie objektorientiert ist. Das ist heute nichts Besonderes mehr, fast alle neueren Programmiersprachen folgen diesem Paradigma. Aber als Java entstand, im letzten Jahrtausend, fand gerade der Umbruch von prozeduraler zu objektorientierter Programmierung statt. Objektorientierung bedeutet in wenigen Worten, dass zusammengehörige Daten und Operationen in einer Datenstruktur zusammengefasst werden. Objektorientierung werde ich in Kapitel 5, »Klassen und Objekte«, und Kapitel 6, »Objektorientierung«, eingehend beleuchten.

Viele Details der Sprache hat Java vom prozeduralen C und dessen objektorientierter Erweiterung C++ geerbt. Für Java wurde aber vieles vereinfacht, und häufige Fehlerquellen wurden entschärft – allen voran das Speichermanagement, für das in C und C++ der Entwickler selbst verantwortlich ist. Das Resultat ist eine Sprache mit einer sehr einfachen und einheitlichen Syntax ohne Ausnahmen und Sonderfälle. Dieser Mangel an »syntaktischem Zucker« wird gerne kritisiert, weil Java-Code dadurch eher etwas länger ist als Code in anderen Sprachen. Andererseits ist es dadurch einfacher, Java-Code zu lesen, da man im Vergleich zu diesen anderen Sprachen nur eine kleine Menge an Sprachkonstrukten kennen muss, um ihn zu verstehen.

Java ist andererseits eine lebendige Sprache, die mit neuen Versionen gezielt weiterentwickelt wird, um für bestimmte Fälle ebendiesen Zucker doch zu bieten. In Version 8 von Java waren das zum Beispiel die Lambda-Ausdrücke (siehe Kapitel 11), in Java 14 wird es voraussichtlich die neue Variante der Entscheidung mit switch sein (siehe Kapitel 18). Dabei handelt es sich jeweils um neue Sprachkonstrukte, die die syntaktische Einfachheit der Sprache nicht zerstört, sondern an vielen Stellen klareren, verständlicheren Code möglich macht. Ihre Einführung sind ein gutes Beispiel dafür, dass die Entwickler der Sprache Java auf die Wünsche ihrer Community eingehen, dabei aber keine überstürzten Entscheidungen treffen – eine gute Kombination für langfristige Stabilität.

1.1.2    Java – die Laufzeitumgebung


Traditionell fallen Programmiersprachen in eine von zwei Gruppen: kompilierte und interpretierte Sprachen. Bei kompilierten Sprachen, wie zum Beispiel C, wird der Programmcode einmal von einem Compiler in Maschinencode umgewandelt. Dieser ist dann ohne weitere Werkzeuge ausführbar, aber nur auf einem Computer mit der Architektur und dem Betriebssystem, für die bzw. für das das Programm kompiliert wurde.

Im Gegensatz dazu benötigen interpretierte Sprachen wie Python oder Ruby ein zusätzliches Programm, den Interpreter, um ausgeführt werden zu können. Die Übersetzung des Programmcodes in Maschinencode findet erst genau in dem Moment statt, in dem das Programm ausgeführt wird. Wer ein solches Programm nutzen möchte, muss den passenden Interpreter auf seinem Computer installieren. Dadurch sind Programme in interpretierten Sprachen auf jedem System ausführbar, für das der Interpreter für diese Sprache vorhanden ist. Interpretierte Sprachen stehen aber im Ruf, langsamer zu sein als kompilierte Sprachen, da das Programm zur Laufzeit noch vom Interpreter analysiert und in Maschinencode übersetzt werden muss.

Java beschreitet einen Mittelweg zwischen diesen beiden Ansätzen: Java-Code wird mit dem Java-Compiler javac kompiliert, dessen Ausgabe ist aber nicht Maschinencode, sondern ein Zwischenformat, der sog. Java-Bytecode (siehe Abbildung 1.1).

Abbildung 1.1    Vom Java-Code zur Ausführung

Man braucht, um ein Java-Programm auszuführen, immer noch einen Interpreter, aber die Umsetzung des Bytecodes in Maschinencode ist für den Computer weniger aufwendig als die Analyse des für Menschen lesbaren Programmcodes. Der beschriebene Performance-Nachteil wird dadurch abgeschwächt. Java-Programme stehen teils in dem Ruf, sie seien langsamer als Programme in anderen Sprachen, die zu Maschinencode kompiliert werden. Dieser Ruf ist jedoch nicht mehr gerechtfertigt, ein Performance-Unterschied ist im Allgemeinen nicht feststellbar.

Der Interpreter, oft auch als Java Virtual Machine (JVM) bezeichnet, ist ein Bestandteil der Java-Laufzeitumgebung (Java Runtime Environment, JRE), aber die Laufzeitumgebung kann mehr. Sie übernimmt auch das gesamte Speichermanagement eines Java-Programms. C++-Entwickler müssen sich selbst darum kümmern, für alle ihre Objekte Speicher zu reservieren, und vor allem auch darum, ihn später wieder freizugeben. Fehler dabei führen zu sogenannten Speicherlecks, also zu Fehlern, bei denen Speicher zwar immer wieder reserviert, aber nicht freigegeben wird, so dass das Programm irgendwann mangels Speicher abstürzt. In Java muss man sich darüber kaum Gedanken machen, die Speicherfreigabe übernimmt der Garbage Collector. Er erkennt Objekte, die vom Programm nicht mehr benötigt werden, und gibt ihren Speicher automatisch frei – Speicherlecks sind dadurch zwar nicht komplett ausgeschlossen, aber fast. Details zum Garbage Collector finden Sie in Kapitel 18, »Hinter den Kulissen«.

Zur Laufzeitumgebung gehört außerdem der Java-Compiler HotSpot, der kritische Teile des Bytecodes zur Laufzeit in »echten« Maschinencode kompiliert und Java-Programmen so noch einen Performance-Schub gibt.

Implementierungen des Java Runtime Environments gibt es für alle verbreiteten Betriebssysteme, manchmal sogar mehrere. Die Implementierung der Laufzeitumgebung ist die des Java-Herstellers Oracle (ursprünglich Sun Microsystems, die aber im Jahre 2010 von Oracle übernommen wurden), aber daneben gibt es weitere, allen voran das Open-Source-Projekt OpenJDK. Da das Verhalten der Laufzeitumgebung streng standardisiert ist, lassen sich Programme fast immer problemlos mit einer beliebigen Laufzeitumgebung ausführen. Es gibt zwar Ausnahmefälle, in denen sich Programme in verschiedenen Laufzeitumgebungen unterschiedlich verhalten, aber sie sind erfreulich selten.

Android

Java ist auch eine der Sprachen, in denen Apps für Android-Geräte entwickelt werden können. Android verwendet aber eine von Grund auf andere VM, so dass der erzeugte Bytecode nicht mit regulären Java-VMs kompatibel ist. Auch die von Java...


Günster, Kai
Kai Günster ist Softwareentwickler, Autor eines Online-Magazins und mehrerer Fachbücher. Er ist Experte für Java-Technologien in verteilten Web-Anwendungen, HTML und JavaScript. Seine Projekterfahrung reicht von E-Government über komplexe Reisereservierungssysteme bis zur IP-Telefonie. Dabei bleibt er der Java-Plattform schon seit vielen Jahren treu, lotet immer wieder gern neue Features aus und setzt HTML5 für komfortable Web-GUIs ein. Er schreibt zum Eintauchen und Mitmachen. Leser schätzen seine Fachbücher für ihre klare Sprache, ihre kompakten, lehrreichen Beispiele, und nicht zuletzt für ihren Unterhaltungswert.



Ihre Fragen, Wünsche oder Anmerkungen
Vorname*
Nachname*
Ihre E-Mail-Adresse*
Kundennr.
Ihre Nachricht*
Lediglich mit * gekennzeichnete Felder sind Pflichtfelder.
Wenn Sie die im Kontaktformular eingegebenen Daten durch Klick auf den nachfolgenden Button übersenden, erklären Sie sich damit einverstanden, dass wir Ihr Angaben für die Beantwortung Ihrer Anfrage verwenden. Selbstverständlich werden Ihre Daten vertraulich behandelt und nicht an Dritte weitergegeben. Sie können der Verwendung Ihrer Daten jederzeit widersprechen. Das Datenhandling bei Sack Fachmedien erklären wir Ihnen in unserer Datenschutzerklärung.