Inhoudsopgave cursusboek Java 17 Fundamentals
Hoofdstuk1: Inleiding
1.1 De geschiedenis van Java
1.2 Java als programmeertaal
1.2.1 Soorten programmeertalen
1.2.1.1 Gecompileerde programmeertalen
1.2.1.2 Geïnterpreteerde programmeertalen
1.2.2 Java versus andere programmeertalen
1.2.3 Kenmerken van Java als programmeertaal
1.3 Java als platform
1.4 Soorten Java-toepassingen
1.5 Samenvatting
Hoofdstuk2: De Java Development Kit
2.1 Inleiding
2.2 JDK en documentatie
2.3 De omgevingsvariabele JAVA_HOME
2.4 Ontwikkelomgevingen
2.5 Samenvatting
Hoofdstuk3: Mijn eerste Java-toepassing
3.1 Inleiding
3.2 De broncode schrijven
3.3 De broncode compileren
3.4 De bytecode uitvoeren
3.5 De opbouw van het programma
3.5.1 Commentaar in Java-code
3.5.2 Het pakket definiëren
3.5.3 De klasse definiëren
3.5.4 De methode main()
3.5.5 Het eigenlijke werk
3.6 Samenvatting
Hoofdstuk4: Programmatielogica
4.1 Inleiding
4.2 Sequenties
4.3 Invoer en uitvoer
4.4 Keuzes
4.5 Herhalingen
4.6 Samenvatting: programmeeralgoritmen
Hoofdstuk5: De Java-programmeertaal
5.1 Inleiding
5.2 Variabelen en letterlijke waarden
5.2.1 De declaratie van variabelen
5.2.2 Het datatype
5.2.2.1 Het primitieve datatype
5.2.2.2 Het referentietype
5.2.2.3 Afleiding van het datatype voor lokale variabelen
5.2.3 Literals
5.2.3.1 Boolean-literals
5.2.3.2 Karakter-literals
5.2.3.3 Literals voor gehele getallen
5.2.3.4 Floating point literals
5.2.3.5 String literals
5.2.4 De naam
5.2.5 Final variables of constanten
5.2.6 Typeconversie
5.3 Operatoren
5.3.1 Rekenkundige operatoren
5.3.2 Relationele operatoren
5.3.3 Logische operatoren
5.3.4 Shift-operatoren
5.3.5 Bit-operatoren
5.3.6 Toekenningsoperatoren
5.3.7 Conditionele operatoren
5.3.8 Overige operatoren
5.3.9 Prioriteitsregels
5.4 Uitdrukkingen, statements en blokken
5.4.1 Uitdrukkingen
5.4.2 Statements
5.4.2.1 Uitdrukkings-statements
5.4.2.2 Declaratie-statements
5.4.2.3 Programmaverloop-statement
5.4.3 Codeblok
5.5 Programmaverloop-statements
5.5.1 Inleiding
5.5.2 Het if else statement
5.5.3 Het switch statement en de switch expression
5.5.4 Het while en do while statement
5.5.5 Het for statement of zelftellende lus
5.6 Methoden
5.7 Samenvatting
Hoofdstuk6: Objectgeoriënteerd programmeren
6.1 Inleiding
6.2 Inleiding in het objectgeoriënteerd programmeren
6.2.1 Objecten
6.2.1.1 Private en publieke eigenschappen
6.2.1.2 Private en publieke methoden
6.2.1.3 Voordelen van OOP
6.2.2 Boodschappen
6.2.3 Klassen
6.3 Werken met bestaande objecten
6.3.1 Inleiding
6.3.2 Objecten maken van een bestaande klasse
6.3.2.1 De creatie van het object
6.3.2.2 De initialisatie van het object
6.3.2.3 De declaratie en initialisatie van de referentievariabele
6.3.2.4 Pakketten importeren
6.3.3 Objecten gebruiken
6.3.3.1 Publieke eigenschappen gebruiken
6.3.3.2 Publieke methoden gebruiken
6.3.4 Objecten opruimen
6.4 Tekenreeksen
6.4.1 Inleiding
6.4.2 De klasse String
6.4.2.1 Eigenschappen
6.4.2.2 Constructors
6.4.2.3 Methoden
6.4.2.4 Geheugengebruik bij strings
6.4.2.5 Tekstblokken
6.4.3 De klasse StringBuilder
6.4.4 Strings samenvoegen met de + operator
6.4.5 Gegevens formatteren met de klasse Formatter
6.5 Samenvatting
Hoofdstuk7: Arrays
7.1 Inleiding
7.2 Arrays maken
7.3 Arrays gebruiken
7.4 De uitgebreide for-lus (for each)
7.5 Arrays van objecten
7.6 Arrays van arrays
7.7 Lookup tables
7.8 Methoden met een variabel aantal parameters
7.9 Samenvatting
Hoofdstuk8: Klassen definiëren
8.1 Inleiding
8.2 De declaratie van de klasse
8.3 De klassenomschrijving (body)
8.3.1 Eigenschappen
8.3.2 Methoden
8.3.2.1 Declaratie van methoden
8.3.2.2 De body van de methode
8.3.2.3 Gegevens doorgeven aan een methode
8.3.2.4 Waarden teruggeven via een methode
8.3.2.5 Method name overloading
8.3.3 Constructors
8.3.4 Instance members en class members
8.3.4.1 Instance-variabelen
8.3.4.2 Klassenvariabelen
8.3.4.3 Instance-methoden
8.3.4.4 Klassenmethoden
8.3.5 De klasse Math
8.4 Samenvatting
Hoofdstuk9: Associaties
9.1 Inleiding
9.2 Associaties
9.3 Aggregaties
9.4 Composities
9.5 High cohesion
9.6 Samenvatting
Hoofdstuk10: Overerving en klassenhiërarchie
10.1 Inleiding
10.1.1 Subklassen en superklassen
10.1.2 Overerving
10.1.2.1 Overerven
10.1.2.2 Toevoegen
10.1.2.3 Vervangen
10.1.3 Klassenhiërarchie
10.1.4 Abstracte klassen
10.2 Subklassen definiëren in Java
10.3 Eigenschappen van subklassen
10.3.1 Overerven van eigenschappen
10.3.2 Toevoegen van eigenschappen
10.3.3 Vervangen (verbergen) van eigenschappen
10.4 Methoden van subklassen
10.4.1 Overerven van methoden
10.4.2 Toevoegen van methoden
10.4.3 Vervangen van methoden (override)
10.4.4 Polymorfisme
10.5 Constructors van subklassen
10.6 Klasseneigenschappen en klassenmethoden
10.7 Final-klassen en methoden
10.8 Abstracte klassen
10.9 De superklasse Object
10.9.1 Klassenhiërarchie
10.9.2 De operator instanceof
10.9.3 Methoden van de Object-klasse
10.9.3.1 toString()
10.9.3.2 equals() en hashCode()
10.10 Polymorfisme (bis)
10.11 Code hergebruik: overerving versus associaties
10.12 Samenvatting
Hoofdstuk11: De opsomming
11.1 Inleiding
11.2 Eigenschappen, methoden en constructors
11.3 Samenvatting
Hoofdstuk12: Eenvoudige klassen
12.1 Inleiding
12.2 Wrappers voor primitieve datatypes
12.2.1 Wrapper-klassen
12.2.2 Autoboxing
12.2.3 Static members
12.3 Datums en tijden
12.3.1 Inleiding
12.3.2 Computertijden: de klasse Instant
12.3.3 Menselijke datums en tijden
12.3.3.1 Opsommingstypes voor weekdagen en maanden
12.3.3.2 Lokale datums en tijden
12.3.3.3 Tijdzones
12.3.3.4 Datums en tijden met tijdzones
12.3.4 Tijdsduur
12.3.5 Formattering van datums en tijden
12.3.6 Omzetting van en naar Date en Calendar
12.4 Samenvatting
Hoofdstuk13: Interfaces
13.1 Inleiding
13.2 Een interface definiëren
13.2.1 De declaratie van de interface
13.2.2 De beschrijving van de interface
13.3 Een interface implementeren in een klasse
13.4 Standaardmethoden
13.5 Statische methoden
13.6 De interface als datatype
13.7 Samenvatting
Hoofdstuk14: Verzegelde klassen en interfaces
14.1 Inleiding
14.2 Verzegelen van een klasse of interface
14.3 Subklassen van een verzegelde klasse of interface
14.4 Samenvatting
Hoofdstuk15: Geneste en anonieme klassen
15.1 Inleiding
15.2 Gewone geneste klassen (inner classes)
15.3 Lokale geneste klassen (local inner classes)
15.4 Anonieme geneste klassen (anonymous inner classes)
15.5 Static geneste klassen (static nested classes)
15.6 Samenvatting
Hoofdstuk16: Exception handling
16.1 Inleiding
16.2 Exceptions afhandelen
16.2.1 Een exception veroorzaken
16.2.2 Een exception opvangen
16.2.3 Meerdere exceptions opvangen
16.2.4 Gemeenschappelijke exception handlers
16.2.5 Het finally blok
16.3 Exceptions genereren
16.3.1 Het throw-statement
16.3.2 Exceptions bij vervangen methoden
16.4 Soorten exceptions
16.4.1 Exceptions versus errors
16.4.2 Checked exceptions versus runtime exceptions
16.4.2.1 Checked exceptions
16.4.2.2 Runtime exceptions
16.5 Zelf een exception-klasse maken
16.6 Exceptions opvangen, inpakken en verder gooien
16.7 Samenvatting
Hoofdstuk17: Records
17.1 Inleiding
17.2 Definitie van een record
17.3 Constructors
17.4 Methoden
17.5 Statische variabelen en methoden
17.6 Overerving
17.7 Samenvatting
Hoofdstuk18: Javadoc
18.1 Inleiding
18.2 Javadoc tags
18.2.1 Documentatie van klassen en interfaces
18.2.2 Documentatie van eigenschappen
18.2.3 Documentatie van methoden en constructors
18.2.4 Documentatie van pakketten
18.2.5 Overzichtsdocumentatie
18.3 JAVADOC-tool
18.4 Samenvatting
Hoofdstuk19: Generieken
19.1 Inleiding
19.2 Generieke klassen
19.2.1 Generieken definiëren
19.2.2 Het gebruikte type inperken
19.2.3 Onbepaald type
19.2.4 Subklassen van generieke klassen
19.3 Generieke interfaces
19.4 Generieke methoden
19.4.1 Formele generieke parameters
19.4.2 Formele generieke parameters met wildcards
19.4.3 Formele generieke parameters met bounded wildcards
19.4.4 Type-parameters
19.5 Achter de schermen van de generieken
19.6 Arrays en generieken
19.7 Samenwerking tussen oude en nieuwe code
19.8 Samenvatting
Hoofdstuk20: Lambda Expressions
20.1 Inleiding
20.2 Functionele interfaces
20.3 Definitie van lambda expressions
20.4 Methodereferenties
20.4.1 Statische methoden van een klasse of interface
20.4.2 Methoden van een gebonden object
20.4.3 Methoden van een ongebonden object
20.4.4 Constructorreferenties
20.5 Standaard functionele interfaces
20.5.1 Predicate
20.5.2 Function
20.5.3 Consumer
Hoofdstuk21: Streaming API
21.1 Inleiding: interne versus externe iteraties
21.2 Bron van streams
21.3 Bewerkingen
21.3.1 Eindbewerkingen
21.3.1.1 Consumerende bewerkingen
21.3.1.2 Reducerende bewerkingen
21.3.1.3 Collecteren
21.3.2 Tussenliggende bewerkingen
21.3.2.1 Filters
21.3.2.2 Omzetting
21.3.2.3 Sortering
21.4 Samenvatting
Hoofdstuk22: Collections
22.1 Het Collections Framework
22.2 De interface Collection en implementaties
22.2.1 List
22.2.1.1 ArrayList
22.2.1.2 LinkedList
22.2.1.3 Factory methods
22.2.2 Set
22.2.2.1 HashSet
22.2.2.2 LinkedHashSet
22.2.2.3 Factory methods
22.2.3 SortedSet & NavigableSet
22.2.3.1 TreeSet
22.2.4 Queue
22.2.4.1 LinkedList
22.2.4.2 PriorityQueue
22.2.5 Deque
22.2.6 Vergelijking tussen de implementaties
22.2.7 Het sorteren van verzamelingen
22.2.7.1 Intrinsieke sortering
22.2.7.2 Eenmalig sorteren van een List
22.2.8 Collections en streams
22.3 De interface Map en implementaties
22.3.1 Map
22.3.1.1 HashMap
22.3.1.2 LinkedHashMap
22.3.2 SortedMap & NavigableMap
22.3.2.1 TreeMap
22.3.3 Vergelijking tussen de implementaties
Hoofdstuk23: Lezen en schrijven (I/O)
23.1 Inleiding
23.2 Mappen en bestanden
23.2.1 De interface Path
23.2.2 De klasse FileSystem
23.2.3 De klasse Files
23.2.4 De klasse File
23.3 IO-streams
23.3.1 Character streams
23.3.1.1 Tekst schrijven naar een bestand
23.3.1.2 Tekst lezen van een bestand
23.3.1.3 Tekst lezen met een Processing Stream
23.3.2 Byte streams
23.3.2.1 Binaire gegevens schrijven naar een bestand
23.3.2.2 Binaire gegevens lezen van een bestand
23.3.2.3 Codering en karaktersets
23.4 Object Serialization
23.4.1 Objecten serialiseren en deserialiseren
23.4.2 Klassen serialiseerbaar maken
23.4.3 Transiënte variabelen
23.4.4 Het serialisatiemechanisme aanpassen
23.4.5 Serialisatie en overerving
23.4.6 Versienummering
23.5 Programma-attributen
Hoofdstuk24: Java via de commandolijn
24.1 Inleiding
24.2 Compileren
24.3 Modules maken
24.3.1 Inleiding
24.3.2 Een module definiëren
24.3.3 Pakketten exporteren
24.3.4 Afhankelijkheden van andere modules
24.3.5 Transitieve afhankelijkheden
24.3.6 Optionele afhankelijkheden
24.4 JAR-bestanden maken
24.4.1 Basisprincipes van een JAR
24.4.2 Een JAR-bestand maken
24.4.3 Een JAR-bestand opnemen in het modulepad
24.4.4 Resources uit een JAR-bestand lezen.
24.5 Programma's uitvoeren
24.6 Soorten modules
24.6.1 Systeemmodules
24.6.2 Applicatiemodules
24.6.3 Automatische modules
24.6.4 Unnamed modules
24.7 Linken
Hoofdstuk25: Systeembronnen gebruiken
25.1 Inleiding
25.2 De System-klasse
25.2.1 Standaard-I/O streams
25.2.1.1 Standaard-inputstream
25.2.1.2 Standaard-outputstream
25.2.1.3 De standaard-errorstream
25.2.1.4 De klasse Console
25.2.2 Systeemeigenschappen
25.2.3 Overige methoden
25.3 Het Runtime object
25.4 De ProcessBuilder
Hoofdstuk26: Multithreading
26.1 Inleiding: multiprocessing en multithreading
26.2 Een nieuwe thread creëren
26.2.1 Subklasse van de klasse Thread
26.2.2 De interface Runnable
26.2.3 Thread met lambda expression
26.3 De levenscyclus van threads
26.4 De uitvoering van threads in de toestand RUNNABLE
26.4.1 De scheduler
26.4.2 Prioriteiten van threads
26.4.3 Preëmptieve multitasking
26.4.4 Coöperatieve multitasking
26.5 Daemon threads
26.6 De wachttoestand
26.6.1 De slaaptoestand
26.6.2 Wachten op de beëindiging van een andere thread
26.7 Synchronisatie van threads (monitoring)
26.7.1 Object locking
26.7.2 Wait() en notify()
26.8 De Timer-klasse en de TimerTask-klasse
26.9 Concurrency framework
26.9.1 Concurrent collections
26.9.2 Atomaire objecten
26.9.3 Callable, ExecutorService and Future
26.10 Parallellisme met streams