Sisällys
1 Johdanto Javaan
Liite 2: Yleisiä virheitä
Hakemisto
1.1 Taustaa
1.2 JavaScript ja Ajax
1.3 Java ja C/C++
1.4 Javan ominaisuuksia pähkinänkuoressa
1.5 Javan kehittyminen
2 Ohjelmoinnin historiasta1.2 JavaScript ja Ajax
1.3 Java ja C/C++
1.4 Javan ominaisuuksia pähkinänkuoressa
1.5 Javan kehittyminen
2.1 Ohjelmointikielten historiasta
2.2 Oliokielten historiasta
3 Ensimmäiset ohjelmat2.2 Oliokielten historiasta
3.1 Ohjelman kirjoittaminen ja kääntäminen
3.2 Ensimmäinen sovellus
4 Olioperustainen ohjelman kehittäminen3.2 Ensimmäinen sovellus
3.2.1 Ohjelmakoodin kirjoittaminen
3.2.2 Koodin rakenne
3.2.3 Välikielelle kääntäminen
3.2.4 Sovelluksen ajaminen
3.3 Työskentely Eclipsellä3.2.2 Koodin rakenne
3.2.3 Välikielelle kääntäminen
3.2.4 Sovelluksen ajaminen
3.3.1 Eclipseen tutustuminen
3.3.2 Ensimmäinen projekti
3.3.3 Sovellus Eclipsellä
3.4 Tehtäviä3.3.2 Ensimmäinen projekti
3.3.3 Sovellus Eclipsellä
4.1 Johdatus olioperustaiseen ohjelman kehittämiseen
4.2 Esitutkimus
4.3 Vaatimusanalyysi
5 Luokat ja oliot4.2 Esitutkimus
4.3 Vaatimusanalyysi
4.3.1 Käyttötapaukset
4.3.2 Luokkien ja attribuuttien tunnistaminen
4.3.3 Tietohakemisto
4.3.4 Assosiaatiot
4.3.5 Luokkakaavio
4.4 Järjestelmäsuunnittelu4.3.2 Luokkien ja attribuuttien tunnistaminen
4.3.3 Tietohakemisto
4.3.4 Assosiaatiot
4.3.5 Luokkakaavio
4.4.1 Arkkitehtuuri
4.4.2 Suunnittelumallit
4.5 Oliosuunnittelu4.4.2 Suunnittelumallit
4.5.1 Luokkien toimintojen määrittäminen
4.5.2 Assosiaatioiden tarkastelu ja suunnittelu
4.5.3 Luokkakaavion viimeistely
4.5.4 Algoritmien suunnittelu
4.6 Toteutuksen kautta ylläpitoon4.5.2 Assosiaatioiden tarkastelu ja suunnittelu
4.5.3 Luokkakaavion viimeistely
4.5.4 Algoritmien suunnittelu
4.6.1 Toteutus ja testaus
4.6.2 Käyttöönotto ja ylläpito
4.7 Tehtäviä4.6.2 Käyttöönotto ja ylläpito
5.1 Olio-ohjelmoinnin peruskäsitteitä
5.2 Luokkien määrittely
5.3 Tunnukset ja Javan avainsanat
5.4 Muuttujat ja attribuutit
5.8 Koodin muotoilusta
5.9 Luokkakaavion luokan toteuttaminen
5.10 Tehtäviä
6 Kontrollirakenteet5.2 Luokkien määrittely
5.3 Tunnukset ja Javan avainsanat
5.4 Muuttujat ja attribuutit
5.4.1 Muuttujien määrittely ja tietotyypit
5.4.2 Tyypinpäättely
5.4.3 Muuttujien arvojen tulostaminen
5.4.4 Muotoiltu tulostus
5.4.5 Tyyppimuunnokset primitiivityyppien välillä
5.4.6 Literaalit ja lukujärjestelmät
5.4.7 Muunnokset lukujärjestelmien välillä
5.4.8 Attribuuttien määrittely
5.4.9 Operaattorit
5.4.10 Käyttäjän kanssa keskusteleva ohjelma
5.5 Metodit5.4.2 Tyypinpäättely
5.4.3 Muuttujien arvojen tulostaminen
5.4.4 Muotoiltu tulostus
5.4.5 Tyyppimuunnokset primitiivityyppien välillä
5.4.6 Literaalit ja lukujärjestelmät
5.4.7 Muunnokset lukujärjestelmien välillä
5.4.8 Attribuuttien määrittely
5.4.9 Operaattorit
5.4.10 Käyttäjän kanssa keskusteleva ohjelma
5.5.1 Metodien määrittely
5.5.2 Metodien kutsuminen
5.5.3 Metodien kuormittaminen
5.6 Olioiden elinkaari5.5.2 Metodien kutsuminen
5.5.3 Metodien kuormittaminen
5.6.1 Olioiden luonti
5.6.2 Olion tilan alustaminen
5.6.3 Olioihin viittaavat muuttujat
5.6.4 Olion metodien kutsuminen
5.6.5 Olioiden tuhoaminen
5.6.6 Muistinhallinta
5.7 JavaBeans5.6.2 Olion tilan alustaminen
5.6.3 Olioihin viittaavat muuttujat
5.6.4 Olion metodien kutsuminen
5.6.5 Olioiden tuhoaminen
5.6.6 Muistinhallinta
5.8 Koodin muotoilusta
5.9 Luokkakaavion luokan toteuttaminen
5.10 Tehtäviä
6.1 Logiikkaa ja ehtolausekkeita
7 Merkit ja merkkijonot
6.1.1 Yhtäsuuruusoperaattorit
6.1.2 Vertailuoperaattorit
6.1.3 Loogiset operaattorit
6.2 Valintalauseet6.1.2 Vertailuoperaattorit
6.1.3 Loogiset operaattorit
6.2.1 if-lauseet
6.2.2 Ehto-operaattori
6.2.3 switch-lause
6.3 Toistolauseet6.2.2 Ehto-operaattori
6.2.3 switch-lause
6.3.1 while
6.3.2 do–while
6.3.3 for
6.3.4 Parannettu for-silmukka
6.3.5 Yleisiä virheitä
6.4 Hyppylauseet6.3.2 do–while
6.3.3 for
6.3.4 Parannettu for-silmukka
6.3.5 Yleisiä virheitä
6.4.1 return-lause
6.4.2 break-lause
6.4.3 continue-lause
6.5 Tehtäviä6.4.2 break-lause
6.4.3 continue-lause
7.1 Merkit ja merkistöt
7.2 Merkkijonot ja String-luokka
7.3 Merkkien ja merkkijonojen käsittely
7.5 Säännölliset lausekkeet
8 Taulukot7.2 Merkkijonot ja String-luokka
7.3 Merkkien ja merkkijonojen käsittely
7.3.1 Character-luokka
7.3.2 StringBuilder
7.3.3 StringTokenizer
7.4 Merkkijonojen muuntaminen primitiivityypeiksi7.3.2 StringBuilder
7.3.3 StringTokenizer
7.5 Säännölliset lausekkeet
7.5.1 Merkkijoukot ja toisto
7.5.2 Javan regexp API
7.5.3 Rajahahmot ja tunnistajan ahneus
7.6 Tehtäviä7.5.2 Javan regexp API
7.5.3 Rajahahmot ja tunnistajan ahneus
8.1 Taulukkoon viittaavat muuttujat ja taulukon luonti
8.2 Taulukon alkioon viittaaminen
8.3 Taulukko metodin parametrina
8.4 Taulukon sisällön kopiointi toiseen taulukkoon
8.5 3-ulotteiset taulukot
8.6 Vaihteleva määrä metodin parametreja
8.7 Esimerkki: ajat järjestyksessä
8.8 Tehtäviä
9 Javan perusteet8.2 Taulukon alkioon viittaaminen
8.3 Taulukko metodin parametrina
8.4 Taulukon sisällön kopiointi toiseen taulukkoon
8.5 3-ulotteiset taulukot
8.6 Vaihteleva määrä metodin parametreja
8.7 Esimerkki: ajat järjestyksessä
8.8 Tehtäviä
9.1 Luokkakohtaiset piirteet
9.3 Luokkakohtaisten piirteiden tuonti
9.4 Kääreluokat ja primitiivityyppien automaattinen käärintä
9.5 Liittymät
9.6 Periytyminen
9.8 Geneeriset tyypit
9.10 Lueteltu tietotyyppi
9.11 Rekursio
9.12 Metaluokka Class
9.13 Sivuhuomautukset
9.14 Luokkien paketointi
9.15 Moduulit
10 Kokoelmat – olioiden säilyttäjät
9.1.1 Vakioarvot ja vakiomuuttujat
9.1.2 Tehdasmetodit ja ainokaiset
9.2 Pakkaukset ja luokkien tuonti9.1.2 Tehdasmetodit ja ainokaiset
9.3 Luokkakohtaisten piirteiden tuonti
9.4 Kääreluokat ja primitiivityyppien automaattinen käärintä
9.5 Liittymät
9.6 Periytyminen
9.6.1 Abstraktit luokat
9.6.2 Dynaaminen sidonta ja monimuotoisuus
9.6.3 Rakentajien kutsuminen
9.6.4 Luokan muiden rakentajien kutsuminen
9.6.5 this ja super
9.6.6 Object-luokan metodit
9.7 Tyyppimuunnokset ja olion tyypin tutkiminen9.6.2 Dynaaminen sidonta ja monimuotoisuus
9.6.3 Rakentajien kutsuminen
9.6.4 Luokan muiden rakentajien kutsuminen
9.6.5 this ja super
9.6.6 Object-luokan metodit
9.8 Geneeriset tyypit
9.8.1 Geneeristen tyyppien määrittely
9.8.2 Geneeristen tyyppien alityypitys ja jokerityyppi
9.8.3 Uuden ja vanhan koodin yhteiskäyttö
9.9 Sisäluokat9.8.2 Geneeristen tyyppien alityypitys ja jokerityyppi
9.8.3 Uuden ja vanhan koodin yhteiskäyttö
9.10 Lueteltu tietotyyppi
9.11 Rekursio
9.12 Metaluokka Class
9.13 Sivuhuomautukset
9.14 Luokkien paketointi
9.15 Moduulit
9.15.1 Moduulin määrittely
9.15.2 Palvelut ja palveluntuottajat
9.15.3 Kääntäminen ja ajaminen
9.16 Tehtäviä9.15.2 Palvelut ja palveluntuottajat
9.15.3 Kääntäminen ja ajaminen
10.1 Tiedon lajittelu
10.3 Algoritmien vaativuus
10.4 Yleisiä tietorakenteita
10.5 Kokoelmat ja olioiden vertailu
10.7 Yleinen kokoelma – Collection
10.8 Iteraattori – Iterator
10.9 Joukot – HashSet ja TreeSet
10.10 Javan listarakenteet – ArrayList ja LinkedList
10.11 Avainnetut kokoelmat – HashMap ja TreeMap
10.12 Yhteenveto kokoelmista
10.13 Kokoelmakehyksen algoritmit
10.14 Luokkakaavion viittausten toteuttaminen
10.15 Ohjelman suorituskyvyn parantaminen
11 Funktionaalinen ohjelmointi
10.1.1 Kuplalajittelu
10.1.2 Valintalajittelu
10.1.3 Lisäyslajittelu
10.1.4 Lomituslajittelu
10.1.5 Pikalajittelu
10.2 Tiedon haku10.1.2 Valintalajittelu
10.1.3 Lisäyslajittelu
10.1.4 Lomituslajittelu
10.1.5 Pikalajittelu
10.3 Algoritmien vaativuus
10.4 Yleisiä tietorakenteita
10.5 Kokoelmat ja olioiden vertailu
10.5.1 Object.equals
10.5.2 Object.hashCode
10.5.3 Comparable
10.5.4 Comparator
10.6 Kokoelmakehys10.5.2 Object.hashCode
10.5.3 Comparable
10.5.4 Comparator
10.7 Yleinen kokoelma – Collection
10.8 Iteraattori – Iterator
10.9 Joukot – HashSet ja TreeSet
10.10 Javan listarakenteet – ArrayList ja LinkedList
10.11 Avainnetut kokoelmat – HashMap ja TreeMap
10.12 Yhteenveto kokoelmista
10.13 Kokoelmakehyksen algoritmit
10.14 Luokkakaavion viittausten toteuttaminen
10.15 Ohjelman suorituskyvyn parantaminen
10.15.1 Pullonkaulojen tunnistaminen
10.15.2 Yleisiä ohjeita
10.15.3 Turhien olioiden välttäminen
10.15.4 Merkkijonojen käsittely
10.15.5 Vältä muistin turhaa varaamista
10.15.6 Välimuistit ja resurssivarannot
10.16 Tehtäviä10.15.2 Yleisiä ohjeita
10.15.3 Turhien olioiden välttäminen
10.15.4 Merkkijonojen käsittely
10.15.5 Vältä muistin turhaa varaamista
10.15.6 Välimuistit ja resurssivarannot
11.1 Lambda-lausekkeet
11.2 Metodeihin viittaaminen
11.3 Javan funktionaaliset liittymät
11.4 Stream API
12 Kun jokin menee kuitenkin pieleen – poikkeukset11.2 Metodeihin viittaaminen
11.3 Javan funktionaaliset liittymät
11.4 Stream API
11.4.1 Virran luominen
11.4.2 Liukuhihnan määrittely
11.4.3 Päättävät operaatiot
11.4.2 Liukuhihnan määrittely
11.4.3 Päättävät operaatiot
12.1 Erilaisia poikkeuksia
12.2 Poikkeuksen aiheuttajan paikallistaminen
12.3 Poikkeustilanteen käsittely – try, catch ja finally
12.4 Resurssit sulkeva try
12.5 Käsiteltävät poikkeukset
12.6 Omat poikkeukset ja poikkeuksen aiheuttaminen
12.7 Ohjeita poikkeusten käyttämiseen
12.8 Tehtäviä
13 Testaus ja virheiden etsintä12.2 Poikkeuksen aiheuttajan paikallistaminen
12.3 Poikkeustilanteen käsittely – try, catch ja finally
12.4 Resurssit sulkeva try
12.5 Käsiteltävät poikkeukset
12.6 Omat poikkeukset ja poikkeuksen aiheuttaminen
12.7 Ohjeita poikkeusten käyttämiseen
12.8 Tehtäviä
13.1 Käännösaikaiset virheet
13.2 Ajonaikaiset ja loogiset virheet – bugit
13.3 Virheiden etsintää yksikkötestein
13.4 Testien kattavuus
13.5 Assert ja sopimuspohjainen suunnittelu
13.6 Tehtäviä
14 Mistä apua?13.2 Ajonaikaiset ja loogiset virheet – bugit
13.3 Virheiden etsintää yksikkötestein
13.4 Testien kattavuus
13.5 Assert ja sopimuspohjainen suunnittelu
13.6 Tehtäviä
14.1 JDK:n dokumentaatio
14.2 Omien luokkien dokumentointi
14.3 Tehtäviä
15 Graafiset käyttöliittymät14.2 Omien luokkien dokumentointi
14.3 Tehtäviä
15.1 Tapahtumapohjainen ohjelmointi
15.2 Ensimmäinen ohjelma
15.3 Tapahtumien käsittely
15.4 JavaFX-komponentit
15.5 Käyttöliittymän ohjelmointi Eclipsellä
15.6 Näytölle piirtäminen
15.7 Tehtäviä
16 Ohjelman kansainvälistäminen15.2 Ensimmäinen ohjelma
15.3 Tapahtumien käsittely
15.4 JavaFX-komponentit
15.5 Käyttöliittymän ohjelmointi Eclipsellä
15.6 Näytölle piirtäminen
15.7 Tehtäviä
16.1 Kielen ja maan määrittely
16.2 Merkkijonojen eristäminen
16.3 Tulostuksen muotoilu
16.4 Merkkijonojen vertailu
16.5 Esimerkki: Lintubongari
16.6 Tehtäviä
17 Tehtävien samanaikainen suorittaminen – säikeet16.2 Merkkijonojen eristäminen
16.3 Tulostuksen muotoilu
16.4 Merkkijonojen vertailu
16.5 Esimerkki: Lintubongari
16.6 Tehtäviä
17.1 Johdatus rinnakkaisuuteen
17.2 Prosessit ja säikeet
17.3 Säikeiden suorituksen hallinta
17.4 Kommunikointi
17.5 Toiminnan tahdistaminen
17.6 Rinnakkaisuuden sudenkuopat
17.7 Tehtävien rinnakkaistaminen ja ajastaminen
17.8 Tehtäviä
18 Tiedostot ja tietovirrat17.2 Prosessit ja säikeet
17.3 Säikeiden suorituksen hallinta
17.4 Kommunikointi
17.5 Toiminnan tahdistaminen
17.6 Rinnakkaisuuden sudenkuopat
17.7 Tehtävien rinnakkaistaminen ja ajastaminen
17.8 Tehtäviä
18.1 Tietovirtaan kirjoittaminen
18.2 Tiedostosta lukeminen
18.3 Muita tietovirtoja
18.4 Olioiden tallentaminen ja lukeminen
18.5 Tiedostojen käsittelyä
18.6 Tehtäviä
19 Tietoliikenne verkossa18.2 Tiedostosta lukeminen
18.3 Muita tietovirtoja
18.4 Olioiden tallentaminen ja lukeminen
18.5 Tiedostojen käsittelyä
18.6 Tehtäviä
19.1 Johdatus tietoliikenteeseen
19.2 Tietoliikenne HTTP-protokollaa käyttäen
19.3 Asiakas ja palvelin
19.4 Rupattelusovellus
19.5 Tehtäviä
20 Järjestelmäohjelmointi19.2 Tietoliikenne HTTP-protokollaa käyttäen
19.3 Asiakas ja palvelin
19.4 Rupattelusovellus
19.5 Tehtäviä
20.1 Sovelluksen parametrit
20.2 System ja Runtime
20.3 Käyttöjärjestelmän prosessit
20.4 Tehtäviä
21 Tietokantojen käyttö20.2 System ja Runtime
20.3 Käyttöjärjestelmän prosessit
20.4 Tehtäviä
21.1 Johdatus tietokantoihin
21.2 JDBC – yhteys tietokantaan Javalla
21.3 Johdatus SQL-kieleen
21.4 Apache Derby
21.5 Tietokantayhteyden muodostaminen
21.6 Tietokannan tietojen muuttaminen
21.7 Tietojen hakeminen kannasta
21.8 Valmistellut kyselyt
21.9 SQL ja sovelluksen tietoturva
21.10 Tapahtumat
21.11 Taulujen väliset liitokset
21.12 Java Persistence API
22 Web-sovellukset21.2 JDBC – yhteys tietokantaan Javalla
21.3 Johdatus SQL-kieleen
21.4 Apache Derby
21.5 Tietokantayhteyden muodostaminen
21.6 Tietokannan tietojen muuttaminen
21.7 Tietojen hakeminen kannasta
21.8 Valmistellut kyselyt
21.9 SQL ja sovelluksen tietoturva
21.10 Tapahtumat
21.11 Taulujen väliset liitokset
21.12 Java Persistence API
21.12.1 Sovelluksen arkkitehtuuri
21.12.2 Entiteettiolioiden suhde tietokantaan
21.12.3 Optimistinen lukitus
21.12.4 Olioiden etsiminen kyselyin
21.12.5 Suhteet
21.13 Tehtäviä21.12.2 Entiteettiolioiden suhde tietokantaan
21.12.3 Optimistinen lukitus
21.12.4 Olioiden etsiminen kyselyin
21.12.5 Suhteet
22.1 Johdatus HTTP-protokollaan
22.2 Web-sovelluksen luominen
22.3 Johdatus palvelinsovelmiin
22.4 Ensimmäinen palvelinsovelma
22.5 Pyynnön otsikon tiedot
22.6 POST-viestin käsittely ja parametrit
22.7 Evästeet
22.8 Istunnot
22.9 Pyynnön käsittelyn delegointi
22.10 Tiedostojen vastaanottaminen
22.11 Tietokannan käyttö palvelinsovelmassa
22.12 JavaServer Faces
22.13 Expression Language
22.14 JSTL-tagikirjasto
22.15 JSF-esimerkki
22.16 Tehtäviä
23 Java Enterprise Edition22.2 Web-sovelluksen luominen
22.3 Johdatus palvelinsovelmiin
22.4 Ensimmäinen palvelinsovelma
22.5 Pyynnön otsikon tiedot
22.6 POST-viestin käsittely ja parametrit
22.7 Evästeet
22.8 Istunnot
22.9 Pyynnön käsittelyn delegointi
22.10 Tiedostojen vastaanottaminen
22.11 Tietokannan käyttö palvelinsovelmassa
22.12 JavaServer Faces
22.13 Expression Language
22.14 JSTL-tagikirjasto
22.15 JSF-esimerkki
22.16 Tehtäviä
23.1 Enterprise JavaBeans
24 Työkalupakki
23.1.1 Session Beans
23.1.2 Message Driven Beans
23.1.3 Ajoympäristön palvelut
23.2 Web Services – Www-sovelluspalvelut23.1.2 Message Driven Beans
23.1.3 Ajoympäristön palvelut
23.2.1 Www-sovelluspalvelujen standardit
23.2.2 Www-sovelluspalvelun toteuttaminen
23.2.3 Www-sovelluspalvelun käyttäminen
23.2.4 RESTful palvelut
23.3 Mikropalvelut23.2.2 Www-sovelluspalvelun toteuttaminen
23.2.3 Www-sovelluspalvelun käyttäminen
23.2.4 RESTful palvelut
24.1 Maven
24.2 Versionhallinta
24.3 Jenkins
24.4 Koodin analysointi
24.5 Avoimen lähdekoodin luokkakirjastot
24.6 Scala & Groovy
25 Viimeinen luku24.2 Versionhallinta
24.3 Jenkins
24.4 Koodin analysointi
24.5 Avoimen lähdekoodin luokkakirjastot
24.6 Scala & Groovy
25.1 Javan juuret
25.2 Javan tulevaisuus
25.3 Loppulause
Liite 1: UML yhdellä sivulla25.2 Javan tulevaisuus
25.3 Loppulause
Liite 2: Yleisiä virheitä
Hakemisto