Indholdsfortegnelse

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

Jacob Nordfalk - Objektorienteret programmering i Java - http://javabog.dk