java training

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

Java Get Powered