Sisällys

1 Johdanto Javaan
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 historiasta
2.1 Ohjelmointikielten historiasta
2.2 Oliokielten historiasta
3 Ensimmäiset ohjelmat
3.1 Ohjelman kirjoittaminen ja kääntäminen
3.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.3.1 Eclipseen tutustuminen
3.3.2 Ensimmäinen projekti
3.3.3 Sovellus Eclipsellä
3.4 Tehtäviä
4 Olioperustainen ohjelman kehittäminen
4.1 Johdatus olioperustaiseen ohjelman kehittämiseen
4.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äsuunnittelu
4.4.1 Arkkitehtuuri
4.4.2 Suunnittelumallit
4.5 Oliosuunnittelu
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äpitoon
4.6.1 Toteutus ja testaus
4.6.2 Käyttöönotto ja ylläpito
4.7 Tehtäviä
5 Luokat ja oliot
5.1 Olio-ohjelmoinnin peruskäsitteitä
5.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 Metodit
5.5.1 Metodien määrittely
5.5.2 Metodien kutsuminen
5.5.3 Metodien kuormittaminen
5.6 Olioiden elinkaari
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 JavaBeans
5.8 Koodin muotoilusta
5.9 Luokkakaavion luokan toteuttaminen
5.10 Tehtäviä
6 Kontrollirakenteet
6.1 Logiikkaa ja ehtolausekkeita
6.1.1 Yhtäsuuruusoperaattorit
6.1.2 Vertailuoperaattorit
6.1.3 Loogiset operaattorit
6.2 Valintalauseet
6.2.1 if-lauseet
6.2.2 Ehto-operaattori
6.2.3 switch-lause
6.3 Toistolauseet
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 Hyppylauseet
6.4.1 return-lause
6.4.2 break-lause
6.4.3 continue-lause
6.5 Tehtäviä
7 Merkit ja merkkijonot
7.1 Merkit ja merkistöt
7.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 primitiivityypeiksi
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ä
8 Taulukot
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 perusteet
9.1 Luokkakohtaiset piirteet
9.1.1 Vakioarvot ja vakiomuuttujat
9.1.2 Tehdasmetodit ja ainokaiset
9.2 Pakkaukset ja luokkien tuonti
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 tutkiminen
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äluokat
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ä
10 Kokoelmat – olioiden säilyttäjät
10.1 Tiedon lajittelu
10.1.1 Kuplalajittelu
10.1.2 Valintalajittelu
10.1.3 Lisäyslajittelu
10.1.4 Lomituslajittelu
10.1.5 Pikalajittelu
10.2 Tiedon haku
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 Kokoelmakehys
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ä
11 Funktionaalinen ohjelmointi
11.1 Lambda-lausekkeet
11.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
12 Kun jokin menee kuitenkin pieleen – poikkeukset
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ä
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?
14.1 JDK:n dokumentaatio
14.2 Omien luokkien dokumentointi
14.3 Tehtäviä
15 Graafiset käyttöliittymät
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äminen
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äikeet
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 tietovirrat
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 verkossa
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äohjelmointi
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ö
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
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ä
22 Web-sovellukset
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 Edition
23.1 Enterprise JavaBeans
23.1.1 Session Beans
23.1.2 Message Driven Beans
23.1.3 Ajoympäristön palvelut
23.2 Web Services – Www-sovelluspalvelut
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 Mikropalvelut
24 Työkalupakki
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 luku
25.1 Javan juuret
25.2 Javan tulevaisuus
25.3 Loppulause
Liite 1: UML yhdellä sivulla
Liite 2: Yleisiä virheitä
Hakemisto