Inhoudsopgave 1 Inleiding 1.1 Wat kan je met Java doen? . . . . . . . . . . . . . . . . . . . . . 1.2 Over Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Gebruik van dit boek . . . . . . . . . . . . . . . . . . . . . . . . . 1.4 Installatie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5 Het eerste programma . . . . . . . . . . . . . . . . . . . . . . . . 1.6 Vaak voorkomende problemen . . . . . . . . . . . . . . . . . . . . 1.6.1 Invalid jdkhome specified . . . . . . . . . . . . . . . . . . 1.6.2 Het indrukken van de F6-toets heeft geen effect . . . . . . 1.6.3 E´en of meer projecten ontwikkelden fouten tijdens de compilatie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.7 Ontleding van het eerste programma . . . . . . . . . . . . . . . .
1 1 3 5 6 11 13 13 13
2 Object-geori¨ enteerd programmeren 2.1 Abstractie . . . . . . . . . . . . . . . . . . 2.2 Klasse . . . . . . . . . . . . . . . . . . . . 2.3 Attribuut . . . . . . . . . . . . . . . . . . 2.3.1 Type . . . . . . . . . . . . . . . . . 2.3.2 Een attribuut declareren . . . . . . 2.3.3 Een attribuut initialiseren . . . . . 2.4 Methode . . . . . . . . . . . . . . . . . . . 2.4.1 Definitie . . . . . . . . . . . . . . . 2.4.2 De leden van een object benoemen 2.4.3 Parameter . . . . . . . . . . . . . . 2.4.4 Teruggeefwaarde . . . . . . . . . . 2.4.5 Overladen . . . . . . . . . . . . . . 2.5 Objecten construeren . . . . . . . . . . . . 2.6 Statische attributen en methodes . . . . . 2.7 Primitieve types en referentietypes . . . .
14 14
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
17 17 18 19 21 22 22 23 23 25 26 27 29 29 33 35
3 Basisconstructies 3.1 Opdrachten . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Veranderlijken . . . . . . . . . . . . . . . . . . . . . . . . 3.3 Toekenningsopdrachten . . . . . . . . . . . . . . . . . . . 3.3.1 Uitdrukking . . . . . . . . . . . . . . . . . . . . . . 3.3.2 Initialisatie van een veranderlijke of een attribuut . 3.3.3 Afgekorte toekenning . . . . . . . . . . . . . . . . . 3.3.4 Ophoging en verlaging . . . . . . . . . . . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
39 39 40 41 42 42 43 43
iii
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
. . . . . . . . . . . . . . .
iv
INHOUDSOPGAVE 3.4
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
44 44 46 46 48 51 54 55
4 Controlestructuren 4.1 Voorwaardelijke opdrachten . . . . . . . . . . . . . . . . 4.1.1 Vergelijkingen . . . . . . . . . . . . . . . . . . . . 4.1.2 Logische bewerkingen . . . . . . . . . . . . . . . 4.1.3 Algemene vorm van de voorwaardelijke opdracht 4.1.4 Voorwaardelijke uitdrukking . . . . . . . . . . . . 4.1.5 Keuze-opdracht . . . . . . . . . . . . . . . . . . . 4.2 Herhalingen . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.1 Lusopdracht ‘while’ . . . . . . . . . . . . . . . . 4.2.2 Genestelde lussen . . . . . . . . . . . . . . . . . . 4.2.3 Rij . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.4 for . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2.5 do/while . . . . . . . . . . . . . . . . . . . . . . . 4.2.6 Een iteratie onderbreken . . . . . . . . . . . . . . 4.2.7 De lusopdracht afbreken . . . . . . . . . . . . . . 4.2.8 Labels . . . . . . . . . . . . . . . . . . . . . . . . 4.3 Recursie . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
59 60 60 63 64 66 67 68 69 73 74 76 79 82 83 84 85
5 Overerving 5.1 Subtypes . . . . . . . . . . . . . . . . . 5.2 Overerving van attributen en methodes 5.3 Een ge¨erfde methode onderdrukken . . . 5.4 Abstracte klassen en abstracte methodes 5.5 Interface . . . . . . . . . . . . . . . . . . 5.6 De bijzondere rol van de klasse Object .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
87 . 87 . 92 . 95 . 98 . 100 . 104
6 Pakketten, afscherming en groepering 6.1 De klassenbibliotheek . . . . . . . . . . . . . . . . . . . . . 6.2 Gebruik van pakketten . . . . . . . . . . . . . . . . . . . . 6.2.1 Naamconventies . . . . . . . . . . . . . . . . . . . 6.3 Werken met tekstveranderlijken . . . . . . . . . . . . . . . 6.3.1 De klasse java.lang.String . . . . . . . . . . . . . . 6.3.2 StringBuffer . . . . . . . . . . . . . . . . . . . . . . 6.4 Werken met bestanden: het pakket java.io . . . . . . . . . 6.4.1 Sequenti¨ele bestanden versus willekeurige toegang 6.4.2 Wat is de kleinste eenheid van informatie? . . . . . 6.4.3 Afgeleide streams . . . . . . . . . . . . . . . . . . . 6.4.4 De standaard-bytestromen van het systeem . . . . 6.4.5 Geheugenstromen . . . . . . . . . . . . . . . . . . 6.5 Toegangsbeperking . . . . . . . . . . . . . . . . . . . . . . 6.6 Inwendige klassen . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
3.5 3.6 3.7
Bewerkingen . . . . . . . . . . . . . . . 3.4.1 Rekenkundige bewerkingen . . . 3.4.2 Samenstelling van tekststrengen 3.4.3 Andere bewerkingen . . . . . . . Invoer langs het toetsenbord . . . . . . . Uitdrukking . . . . . . . . . . . . . . . . 3.6.1 Afgekorte toekenning . . . . . . . De uitvoering van een Java-programma
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . .
105 105 108 110 111 111 120 122 123 123 128 129 130 132 135
v
INHOUDSOPGAVE
6.7
6.6.1 Statische inwendige klassen . . . . . . . . . . 6.6.2 Gewone inwendige klassen . . . . . . . . . . . 6.6.3 Anonieme klassen . . . . . . . . . . . . . . . Bereik, zichtbaarheid, levensduur en toegankelijkheid
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
137 139 141 141
7 Kwaliteit 7.1 Uitzonderingen . . . . . . . . . . . . . . . . . . . . 7.1.1 Paranoia . . . . . . . . . . . . . . . . . . . . 7.1.2 Definitie . . . . . . . . . . . . . . . . . . . . 7.1.3 Exceptions doorgeven . . . . . . . . . . . . 7.1.4 Exceptions opvangen . . . . . . . . . . . . . 7.1.5 Exceptions genereren . . . . . . . . . . . . . 7.1.6 Exceptions defini¨eren . . . . . . . . . . . . . 7.2 Commentaar . . . . . . . . . . . . . . . . . . . . . 7.3 De documentatie-generator Javadoc . . . . . . . . 7.4 Levenscyclus systeemontwikkeling . . . . . . . . . . 7.5 Domeinklassen . . . . . . . . . . . . . . . . . . . . 7.6 Technisch ontwerp . . . . . . . . . . . . . . . . . . 7.6.1 Architectuur . . . . . . . . . . . . . . . . . 7.6.2 Ontwerppatronen . . . . . . . . . . . . . . . 7.6.3 Voorbeeld van een patroon: factory method 7.6.4 Voorbeeld van een patroon: adapter . . . . 7.6.5 Frameworks . . . . . . . . . . . . . . . . . . 7.7 Moduletest met JUnit . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
145 145 145 148 148 150 152 153 156 157 161 163 165 165 171 172 173 175 176
8 Webtoepassingen 8.1 De technologie van het web . . . . . . . . . . 8.1.1 De context: webservers en browsers . 8.1.2 HTML . . . . . . . . . . . . . . . . . . 8.2 Servlet . . . . . . . . . . . . . . . . . . . . . . 8.2.1 Definitie en voorbeeld . . . . . . . . . 8.2.2 Informatie doorgeven met formulieren 8.2.3 De levenscyclus van een servlet . . . . 8.3 JavaServer Pages (JSP) . . . . . . . . . . . . 8.4 Sessie . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
185 185 185 188 190 190 195 198 202 204
9 Grafische gebruikersinterfaces 9.1 Swing . . . . . . . . . . . . . . . . . . 9.2 Opbouw van een interface . . . . . . . 9.3 De opmaak beheersen . . . . . . . . . 9.3.1 FlowLayout . . . . . . . . . . . 9.3.2 BorderLayout . . . . . . . . . 9.3.3 GridLayout . . . . . . . . . . . 9.3.4 GridBagLayout . . . . . . . . . 9.3.5 Opmaakbeheerders combineren 9.4 Gebeurtenissen afhandelen . . . . . . . 9.5 Menu . . . . . . . . . . . . . . . . . . 9.6 Tekenen . . . . . . . . . . . . . . . . . 9.7 Applet . . . . . . . . . . . . . . . . . . 9.7.1 Definitie en voorbeeld . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
207 207 208 215 216 216 219 220 225 227 233 237 240 240
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
vi
INHOUDSOPGAVE . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
242 242 250 250
10 Herbruikbare componenten (Beans) 10.1 Begrippen . . . . . . . . . . . . . . . . . . . . . . 10.2 Een bestaande Bean gebruiken in een toepassing 10.3 Archieven . . . . . . . . . . . . . . . . . . . . . . 10.3.1 Wat is een archief? . . . . . . . . . . . . . 10.3.2 Manifest . . . . . . . . . . . . . . . . . . . 10.4 Zelf een Bean ontwikkelen . . . . . . . . . . . . . 10.5 Eigenschap . . . . . . . . . . . . . . . . . . . . . 10.6 Gebeurtenis . . . . . . . . . . . . . . . . . . . . . 10.7 Gebonden eigenschappen . . . . . . . . . . . . . 10.8 Beperkte eigenschappen . . . . . . . . . . . . . . 10.9 BeanInfo . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
259 259 260 262 262 264 265 266 268 271 274 276
11 Parallel programmeren 11.1 Begrippen . . . . . . . . . . . . . . . . . . . 11.2 Timers . . . . . . . . . . . . . . . . . . . . . 11.3 Animatie . . . . . . . . . . . . . . . . . . . 11.4 De klasse Thread en de interface Runnable 11.5 Prioriteit en activering . . . . . . . . . . . . 11.6 Synchronisatie . . . . . . . . . . . . . . . . 11.6.1 join . . . . . . . . . . . . . . . . . . 11.6.2 synchronized . . . . . . . . . . . . 11.6.3 wait en notify . . . . . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
279 279 280 282 283 286 290 290 291 297
12 Relationele gegevensbanken 12.1 Platform-onafhankelijke toegang 12.2 Voorbeelden van installaties . . . 12.3 Een gegevensbank bevragen . . . 12.4 Een gegevensbank manipuleren . 12.5 Transactie . . . . . . . . . . . . . 12.6 Gevorderde technieken . . . . . . 12.7 Object-relational mapping . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
301 301 301 301 301 301 301 302
13 Gedistribueerd programmeren 13.1 Taakverdeling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.2 Web services . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.3 Uitgewerkt voorbeeld: vliegtuigreizen . . . . . . . . . . . . . . . .
303 303 303 303
14 Bedrijfstoepassingen 14.1 Enterprise JavaBeans . . . . . . . 14.2 Spring . . . . . . . . . . . . . . . 14.2.1 Inversion of Control . . . 14.2.2 Een elementair voorbeeld
305 305 305 305 307
9.8 9.9
9.7.2 Het leven van een applet Model/View/Controller . . . . Tabellen en bomen weergeven . 9.9.1 Tabellen . . . . . . . . .
. . . .
. . . .
. . . . . . .
. . . .
. . . .
. . . . . . .
. . . .
. . . .
. . . . . . .
. . . .
. . . .
. . . . . . .
. . . .
. . . .
. . . . . . .
. . . .
. . . .
. . . . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
vii
INHOUDSOPGAVE
15 Bijzondere programmeertechnieken 313 15.1 Abstracte gegevenstypes . . . . . . . . . . . . . . . . . . . . . . . 313 15.2 Generische types . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 15.3 Collecties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 16 Java op de GSM 16.1 J2ME: schaarse hulpbronnen . . . . . . 16.2 Een simulator voor onze GSM-omgeving 16.3 Een eerste voorbeeldprogramma . . . . . 16.4 Een MIDlet overbrengen naar een GSM 16.5 Een spel . . . . . . . . . . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
323 323 324 324 334 335
A Oplossingen van de oefeningen
341
Bibliografie
343
Index
346