|
0 Forord 0.1 Bogens opbygning 0.1.1 Veje gennem bogen 0.1.2 Kapitlernes opbygning 0.2 Til underviseren 0.3 Forord til anden udgave 0.4 Tak 1 Introduktion 1.1 Programmering 1.1.1 Styresystemet 1.1.2 Hvorfor lære at programmere? 1.1.3 Et simpelt program 1.1.4 Hvordan lærer man at programmere 1.2 Fordele og ulemper ved Java 1.2.1 Stærke sider 1.2.2 Stor opbakning 1.2.3 Svagheder 1.3 Programmeringsværktøjer til Java 1.3.1 Sun JDK 1.3.2 Borland JBuilder 1.3.3 Oracle JDeveloper 1.3.4 Sun Forte/NetBeans 1.3.5 IBM VisualAge for Java 1.3.6 Andre 1.4 Hjælp og videre læsning 1.4.1 Projekter med åben kildekode 2 Basal programmering 2.1 Det første javaprogram 2.1.1 Kommentarer 2.1.2 Klassedefinitionen 2.1.3 Oversættelse og kørsel af programmet 2.2 Variabler 2.2.1 Heltal 2.2.2 Sammensætte strenge med + 2.2.3 Beregningsudtryk 2.2.4 Kommatal 2.2.5 Matematiske funktioner 2.2.6 Kald af metoder 2.2.7 Logiske variabler 2.2.8 Opgaver 2.3 Betinget udførelse 2.3.1 if-else 2.3.2 Opgaver 2.4 Blokke 2.4.1 Indrykning 2.5 Løkker 2.5.1 while-løkken 2.5.2 for-løkken 2.5.3 Indlejrede løkker 2.5.4 Uendelige løkker 2.5.5 Opgaver 2.6 Værditypekonvertering 2.6.1 Eksplicit typekonvertering 2.6.2 Implicit typekonvertering 2.6.3 Misforståelser omkring typekonvertering 2.7 Fejl 2.7.1 Indholdsmæssige (logiske) fejl 2.7.2 Sproglige fejl 2.7.3 Køretidsfejl 2.8 Test dig selv 2.9 Resumé 2.9.1 Gode råd om programmering 2.10 Opgaver 2.10.1 Befordringsfradrag 2.10.2 Kurveprogram 2.11 Appendiks 2.11.1 Navngivningsregler 2.11.2 De simple typer 2.11.3 Værditypekonvertering 2.11.4 Aritmetiske operatorer 2.11.5 Regning med logiske udtryk 2.11.6 Sammenligningsoperatorer 2.12 Avanceret 2.12.1 Indlæsning fra tastaturet 2.12.2 Grafiske indtastningsvinduer 2.12.3 Primtal 2.12.4 Klassemetoder 2.12.5 Kombination af logiske operatorer 2.12.6 Alternativudtryk 2.12.7 Brug af ++ og -- (optælling og nedtælling) 2.12.8 Brug af += og -= 2.12.9 do-while-løkken 2.12.10 break 2.12.11 continue 2.12.12 break og continue med navngivne løkker 2.12.13 switch 2.12.14 Komma i for-løkker 3 Objekter 3.1 Objekter og klasser 3.2 Punkter (klassen Point) 3.2.1 Erklæring og oprettelse 3.2.2 Objektvariabler 3.2.3 Metodekald 3.2.4 Eksempel 3.2.5 Import af standardklasser 3.3 Rektangler (klassen Rectangle) 3.3.1 Konstruktører 3.3.2 Metoder 3.3.3 Metoders returtype 3.3.4 Metoders parametre 3.4 Tekststrenge (klassen String) 3.4.1 Strenge er uforanderlige 3.4.2 Man behøver ikke bruge new til String-objekter 3.4.3 Navnesammenfald for metoder 3.4.4 At sætte strenge sammen med + 3.4.5 Sammenligning 3.4.6 Opgaver 3.5 Lister (klassen Vector) 3.5.1 Eksempel: Punkter i Vector 3.6 Ekstra eksempler 3.6.1 Blanding af kort med Vector 3.6.2 Opdeling af strenge (klassen StringTokenizer) 3.6.3 Datoer (klassen Date) 3.6.4 Opgaver 3.7 Test dig selv 3.8 Resumé 3.9 Appendiks 3.9.1 Klassen Point 3.9.2 Klassen Rectangle 3.9.3 Klassen String 3.9.4 Specialtegn i strenge 3.9.5 Klassen StringTokenizer 3.9.6 Klassen Date 3.9.7 Klassen Vector 3.10 Avanceret 3.10.1 Sætte strenge sammen (klassen StringBuffer) 3.10.2 Nøgleindekserede tabeller (klassen Hashtable) 3.10.3 Talformatering (klassen DecimalFormat) 3.10.4 Datoformatering (klassen SimpleDateFormat) 3.10.5 Foruddefinerede datoformater (DateFormat) |
4 Definition af klasser 4.1 En Boks-klasse 4.1.1 Variabler 4.1.2 Brug af klassen 4.1.3 Metodedefinition 4.1.4 Flere objekter 4.2 Indkapsling 4.3 Konstruktører 4.3.1 Standardkonstruktører 4.3.2 Opgaver 4.4 En Terning-klasse 4.4.1 Opgaver 4.5 Relationer mellem objekter 4.5.1 En Raflebæger-klasse 4.5.2 Opgaver 4.6 Nøgleordet this 4.7 Ekstra eksempler 4.7.1 En n-sidet terning 4.7.2 Personer 4.7.3 Design af klasser 4.8 Test dig selv 4.9 Resumé 4.9.1 Formen af en klasse 4.9.2 Formen af en metode 4.10 Opgaver 4.10.1 Fejlfinding 4.11 Avanceret 4.11.1 Bankkonti 4.11.2 Opgaver 5 Nedarvning 5.1 At udbygge eksisterende klasser 5.1.1 Eksempel: En falsk terning 5.1.2 At udbygge med flere metoder og variabler 5.1.3 Nøgleordet super 5.1.4 Opgaver 5.2 Polymorfe variabler 5.2.1 Dispensation fra traditionel typesikkerhed 5.2.2 Polymorfi 5.2.3 Eksempel på polymorfi: Brug af Raflebaeger 5.2.4 Hvilken vej er en variabel polymorf ? 5.2.5 Reference-typekonvertering 5.3 Eksempel: Et matador-spil 5.3.1 Polymorfi 5.3.2 Opgaver 5.4 Stamklassen Object 5.4.1 Referencer til objekter 5.5 Konstruktører i underklasser 5.5.1 Konsekvenser 5.6 Ekstra eksempler 5.6.1 Matadorspillet version 2 5.6.2 Opgaver 5.7 Test dig selv 5.8 Resumé 5.9 Avanceret 5.9.1 Initialisering uden for konstruktørerne 5.9.2 Kald af en konstruktør fra en anden konstruktør 5.9.3 Metoder erklæret final 5.9.4 Metoder erklæret protected 5.9.5 Variabel-overskygning 6 Pakker 6.1 At importere klassedefinitioner 6.2 Standardpakkerne 6.2.1 Pakken java.lang 6.3 Placering på filsystemet 6.4 At definere egne pakker 6.4.1 Eksempel 6.5 Pakke klasser i jar-filer (Java-arkiver) 6.5.1 Eksekverbare jar-filer 6.6 Test dig selv 6.7 Resumé 6.8 Opgaver 6.9 Avanceret - public, protected og private 6.9.1 Variabler og metoder 6.9.2 Klasser 7 Lokale, objekt- og klassevariabler 7.1 Klassevariabler og -metoder 7.1.1 Eksempler på klassevariabler 7.1.2 Eksempler på klassemetoder 7.2 Lokale variabler og parametre 7.2.1 Parametervariabler 7.3 Test dig selv 7.4 Resumé 7.4.1 Tilknytning 7.4.2 Adgang til variabler og metoder 7.4.3 Adgang fra metoder 7.5 Avanceret 7.5.1 Introduktion til rekursive algoritmer 7.5.2 Rekursion: Beregning af formel 7.5.3 Rekursion: Listning af filer 7.5.4 Rekursion: Tegning af fraktaler 8 Arrays 8.1 Erklæring og brug 8.1.1 Eksempel: Statistik 8.1.2 Initialisere et array med startværdier 8.1.3 Arrayet i main()-metoden 8.2 Gennemløb og manipulering af array 8.3 Array af objekter 8.3.1 Polymorfi 8.4 Array versus Vector-klassen 8.5 Resumé 8.6 Opgaver 8.7 Avanceret 8.7.1 Flerdimensionale arrays |
9 Grafiske programmer 9.1 Klassen Graphics 9.1.1 Eksempel 9.2 Metoder i vinduer, som du kan kalde 9.2.1 Eksempel: Kurvetegning 9.3 Opgaver 9.3.1 Opgave: Grafisk Matador-spil 9.4 Avanceret 9.4.1 Simple animationer 9.4.2 Animationer med en separat tråd 9.4.3 Undgå blinkeri 9.4.4 Grafikbuffer (double buffering) 9.4.5 Java2D - avanceret grafiktegning 10 Appletter 10.1 HTML-dokumentet 10.2 Javakoden 10.3 Metoder i appletter 10.3.1 Metoder i appletter, som du kan kalde 10.3.2 Metoder i appletter, som systemet kalder 10.3.3 Eksempel 10.4 Resumé 10.5 Avanceret 10.5.1 Sikkerhedsbegrænsninger for appletter 10.5.2 Pakker og CODE/CODEBASE i HTML-koden 10.5.3 Begrænsninger i ældre netlæsere 10.5.4 Ændring af applet til at virke i ældre netlæsere 10.5.5 Java Plug-in 11 Grafiske standardkomponenter 11.1 Generering med et værktøj 11.1.1 Interaktive programmer 11.2 Grafiske komponenter 11.2.1 Button 11.2.2 Checkbox 11.2.3 Choice 11.2.4 TextField 11.2.5 TextArea 11.2.6 Label 11.2.7 List 11.2.8 Canvas 11.3 Eksempel 11.4 Containere 11.4.1 Panel 11.4.2 Applet 11.4.3 Window 11.4.4 Frame 11.4.5 Dialog 11.5 Relationer mellem klasserne 11.6 Layout-managere 11.6.1 Ingen styring (null-layout) 11.6.2 FlowLayout 11.6.3 BorderLayout 11.6.4 GridBagLayout 11.7 Menuer 11.8 Test dig selv 11.9 Resumé 11.10 Avanceret 11.10.1 AWT-komponenter på andre platforme 11.10.2 Swing-komponenter 12 Interfaces - grænseflader til objekter 12.1 Definere et interface 12.2 Implementere et interface 12.2.1 Variabler af type Tegnbar 12.2.2 Eksempler med interfacet Tegnbar 12.2.3 Visning af nogle Tegnbare objekter 12.2.4 Polymorfi 12.3 Interfaces i standardbibliotekerne 12.3.1 Sortering med en Comparator 12.3.2 Flere tråde med Runnable 12.3.3 Lytte til musen med MouseListener 12.4 Test dig selv 12.5 Resumé 12.6 Opgaver 12.7 Avanceret 12.7.1 Implementere flere interfaces 12.7.2 At udbygge interfaces 12.7.3 Multipel arv 12.7.4 Variabler i et interface 13 Hændelser i grafiske brugergrænseflader 13.1 Eksempel: LytTilMusen 13.2 Eksempel: Linietegning 13.2.1 Linietegning i én klasse 13.3 Ekstra eksempler 13.3.1 Lytte til musebevægelser 13.3.2 Lytte til en knap 13.3.3 Lytte efter tastetryk 13.4 Appendiks 13.4.1 Lyttere og deres metoder 13.5 Avanceret 13.5.1 Autogenereret kode til hændelseshåndtering 13.5.2 Adaptere |
14 Undtagelser og køretidsfejl 14.1 Almindelige undtagelser 14.2 At fange og håndtere undtagelser 14.2.1 Undtagelsesobjekter og deres stakspor 14.3 Undtagelser med tvungen håndtering 14.3.1 Fange undtagelser eller sende dem videre 14.3.2 Konsekvenser af at sende undtagelser videre 14.4 Præcis håndtering af undtagelser 14.5 Fange flere slags undtagelser 14.6 Resumé 14.7 Opgaver 14.8 Avanceret 14.8.1 Fange Throwable 14.8.2 Selv kaste undtagelser (throw) 14.8.3 try - finally 14.8.4 Selv definere undtagelsestyper 15 Datastrømme og filhåndtering 15.1 Skrive til en tekstfil 15.2 Læse fra en tekstfil 15.3 Indlæsning fra tastatur 15.4 Analysering af tekstdata 15.4.1 Konvertere strenge til tal 15.4.2 Samlet eksempel: Statistik 15.5 Binær læsning og skrivning 15.5.1 Optimering af ydelse 15.6 Appendiks 15.6.1 Navngivning 15.6.2 Binære data ( -OutputStream og -InputStream) 15.6.3 Tekstdata ( -Writer og -Reader) 15.6.4 Fillæsning og -skrivning (File- ) 15.6.5 Strenge (String- ) 15.6.6 Arrays (ByteArray- og CharArray- ) 15.6.7 Læse og skrive objekter (Object- ) 15.6.8 Dataopsamling (Buffered- ) 15.6.9 Gå fra binære til tegnbaserede datastrømme 15.6.10 Filtreringsklasser til konvertering og databehandling 15.6.11 Brug af på filtreringsklasser 15.7 Test dig selv 15.8 Resumé 15.9 Opgaver 15.10 Avanceret 15.10.1 Klassen RandomAccessFile 15.10.2 Filhåndtering (klassen File) 15.10.3 Platformuafhængige filnavne 16 Netværkskommunikation 16.1 At forbinde til en port 16.2 At lytte på en port 16.3 URL-klassen 16.4 Opgaver 16.5 Avanceret 16.5.1 FTP-kommunikation 16.5.2 Brug af FTP fra en applet 17 Flertrådet programmering 17.1 Princip 17.1.1 Eksempel 17.2 Ekstra eksempler 17.2.1 En flertrådet webserver 17.2.2 Et flertrådet program med hoppende bolde 17.3 Opgaver 17.4 Avanceret 17.4.1 Nedarvning fra Thread 17.4.2 Synkronisering 17.4.3 Synkronisering på objekter og semaforer 17.4.4 wait() og notify() 17.4.5 prioritet 17.4.6 Opgaver 18 Serialisering af objekter 18.1 Hente og gemme objekter 18.2 Serialisering af egne klasser 18.2.1 Interfacet Serializable 18.2.2 Nøgleordet transient 18.2.3 Eksempel 18.3 Opgaver 18.4 Avanceret 18.4.1 Serialisere det samme objekt flere gange 18.4.2 Selv styre serialiseringen af en klasse 19 RMI - objekter over netværk 19.1 Principper 19.2 I praksis 19.2.1 På serversiden 19.2.2 På klientsiden 19.3 Opgaver 19.3.1 Server og klient to forskellige steder 19.4 Avanceret 19.4.1 RMI og pakker 20 JDBC - databaseadgang 20.1 Kontakt til databasen 20.1.1 JDBC-ODBC-broen under Windows 20.2 Kommunikere med databasen 20.2.1 Kommandoer 20.2.2 Forespørgsler 20.3 Adskille database- og programlogik 20.4 Opgaver 20.5 Avanceret 20.5.1 Forpligtende eller ej? (commit) 20.5.2 Optimering 20.5.3 Metadata 20.5.4 Opdatering og navigering i ResultSet-objekter 21 Avancerede klasser 21.1 Nøgleordet abstract 21.1.1 Abstrakte klasser 21.1.2 Abstrakte metoder 21.2 Nøgleordet final 21.2.1 Variabler erklæret final 21.2.2 Metoder erklæret final 21.2.3 Klasser erklæret final 21.3 Indre klasser 21.4 Almindelige indre klasser 21.4.1 Eksempel - Linietegning 21.5 Lokale indre klasser 21.6 Anonyme indre klasser 21.6.1 Eksempel - filtrering af filnavne 21.6.2 Eksempel - Linietegning 21.6.3 Eksempel - tråde 21.7 Resumé 21.8 Opgaver 21.9 Avanceret 21.9.1 public, protected og private på en indre klasse 21.9.2 static på en indre klasse 22 Objektorienteret analyse og design 22.1 Krav til programmet 22.2 Objektorienteret analyse 22.2.1 Skrive vigtige ord op 22.2.2 Brugsmønstre 22.2.3 Aktivitetsdiagrammer 22.2.4 Skærmbilleder 22.3 Objektorienteret design 22.3.1 Design af klasser 22.3.2 Kollaborationsdiagrammer 22.3.3 Klassediagrammer 23 Engelsk-dansk ordliste 24 Stikordsregister |