stanford-oval/wikipedia huggingface dataset:
Java
Sunin/Oraclen kehitysympäristö > Versioita

Javan tärkeimmät julkaisuversiot ja niiden julkaisupäivät:
JDK Beta esiteltiin 1995.
JDK 1.0 esiteltiin 23. tammikuuta 1996.
JDK 1.1 esiteltiin 19. helmikuuta 1997.
J2SE 1.2 esiteltiin 8. joulukuuta 1998.
J2SE 1.3 esiteltiin 8. toukokuuta 2000.
J2SE 1.4 esiteltiin 6. helmikuuta 2002.
J2SE 5.0 esiteltiin 30. syyskuuta 2004.
Java SE 6 esiteltiin 11. joulukuuta 2006.
Java SE 7 esiteltiin 28. heinäkuuta 2011. Viestintävirasto ilmoitti elokuussa 2012, että Java 7 aiheuttaa Windows-ympäristössä vakavan tietoturva-aukon ja kehottaa poistamaan version. Tietoturva-aukkoon tuli korjaava päivitys 30. elokuuta 2012.  (Tuettu heinäkuuhun 2022 asti)
Java SE 8 esiteltiin 18. maaliskuuta 2014.  (Tuettu joulukuuhun 2030 asti)
Java SE 9 esiteltiin 9. syyskuuta 2017.
Java SE 10 esiteltiin 20. maaliskuuta 2018.
Java SE 11 esiteltiin 25. syyskuuta 2018. (Tuettu syyskuuhun 2026 asti)
Java SE 12 esiteltiin 19. maaliskuuta 2019.
Java SE 13 esiteltiin 16. syyskuuta 2019.
Java SE 14 esiteltiin 17. maaliskuuta 2020.
Java SE 15 esiteltiin 15. syyskuuta 2020.
Java SE 16 esiteltiin 16. maaliskuuta 2021.
Java SE 17 esiteltiin 14. syyskuuta 2021. (Tuettu syyskuuhun 2029 asti)
Java SE 18 esiteltiin 22. maaliskuuta 2022.
Java SE 19 esiteltiin 20. syyskuuta 2022.
Java SE 20 esiteltiin 21. maaliskuuta 2023.
Java SE 21 julkaistiin 17. lokakuuta 2023.
Osa Java-versioista kuuluu Oraclen laajennetun tien piiriin. Pidempään tuettuja LTS-versioita (Long-Term-Support) ovat Java SE 7, 8, 11, 17 ja 21.
Kehitysympäristön asentaminen

Java SE Development Kit on yksityiskäyttäjälle ilmainen, jonka voit ladata Oraclen sivuilta, esim. https://www.oracle.com/in/java/technologies/downloads/ . Se tukee useimpia käyttöjärjestelmiä, kuten, Windowsi, linuxia, Mac OSia.
Oracle JDK 20 -sertifioidut järjestelmäkokoonpanot
Oracle JDK 20 -sertifioidut järjestelmäkokoonpanot Windowsille ovat: Windows Server 2022, Windows Server 2019 Windows Server 2016 Windows Server 2012 R2, Windows 2012, Windows 11 ja Windows 10.
Linuxin osalta Oracle JDK 20 -sertifioituja järjestelmäkokoonpanoja ovat Oracle Linux:n versiot 6, 7, 7.9+,8 ja 9. Ubuntu Linux:n osalta sertifioituja järjestelmäkokoonpanoja ovat 22.04 LTS, 22.10 ja 23.04, Red Hat Enterprise Linux:n osalta taas versiot 6, 7, 7.9+,8 ja 9 ja Suse Linux Enterprise Server:n sertifioituja järjestelmäkokoonpanoja ovat versiot 12 ja 15. Uudemmat Linuxin eri versiot versiot tukevat X.org-tilaa, mutta Wayland-tilaa ei tueta.
MacOS alustoista tuettuina ovat versiot macOS 11, macOS 12 ja macOS 13
Kaikki Oracle:n sivuilla mainitut käyttöjärjestelmät ovat myös sertifioituja, kun niitä käytetään virtuaalisena vierasjärjestelmänä missä tahansa seuraavista hypervisoreista/säilöistä, kunhan kyseinen hypervisori/säilö tukee käyttöjärjestelmää :
Oracle VM
Docker
Microsoft Hyper-V Server
Riippuen haluamastasi versiosta ja käyttöjärjestelmästäsi, tarvitset n. 200Mb tilaa kovalevyllesi, jotta saat ladattua JDK asennustiedoston koneellesi, minkä jälkeen voit asentaa sen itsellesi.
Turvallisuusarkkitehtuuri

Java-teknologian syntymisen ja käyttöönoton myötä tietoturvallisuus on ollut merkittävä aihe sekä kiinnostuksen kohde. Java-alustan turvallisuus sekä uudet tietoturvaongelmat, joita Java-teknologian käyttöönotto on aiheuttanut, ovat herättäneet yhä kasvavaa huomiota. Teknologian tarjoajan näkökulmasta katsottuna Javan suojaus tarjoaa kaksi näkökulmaa:
Tarjoaa turvallisen ja valmiin Java-alustan, jolla pystyy ajamaan Java-yhteensopivia sovelluksia turvallisesti
Tarjoaa Java-ohjelmointikielellä toteutettuja tietoturvatyökaluja ja -palveluita, jotka mahdollistavat laajemman valikoiman turvallisuusherkkiä sovelluksia esimerkiksi yrityksille
Turvallisuusarkkitehtuuri > Hiekkalaatikkomalli

Java-alusta tarjoaa oman tietoturva-arkkitehtuurin, jota kutsutaan ”hiekkalaatikoksi”. Hiekkalaatikko on yksi Javan valmiista tietoturvaominaisuuksista ja sen avulla käyttäjät voivat suorittaa rajoitetussa ympäristössä epäluotettavia tai huonosti kirjoitettua koodeja. ”Hiekkalaatikkoympäristössä” voidaan estää koodia pääsemästä tietyille alustan ominaisuuksille ja API-rajapinnoille. Koodia voidaan esimerkiksi estää lukemasta tai kirjoittamasta tiedostoja paikallisessa tiedostojärjestelmässä tai estää sitä suorittamasta mielivaltaisia komentoja sekä estää pääsy verkkoihin. Hiekkalaatikkomalli otettiin käyttöön Java Development Kitin (JDK) kautta, ja se otettiin yleisesti käyttöön JDK 1.0:lla rakennetuissa sovelluksissa, mukaan lukien Java-yhteensopivissa verkkoselaimissa. JDK 1.1 laajensi tätä mallia tuomalla mukaan allekirjoitetun sovelman (signed applet) käsitteen; jos sovelma oli allekirjoituksen perusteella luotetun tahon valmistama, se sai järjestelmään täydet valtuudet. Jos näin ei ollut, sovelma suoritettiin edelleen hiekkalaatikossa. Java SE -ympäristössä hiekkalaatikkomalli on entistä kehittyneempi tuoden mukanaan muun muassa hienostuneemman käyttöoikeuksien hallinnan, helpommin konfiguroitavan turvallisuuspolitiikan ja helpommin laajennettavan käyttöoikeuksien hallintarakenteen sekä turvatarkistusten laajentamisen kaikkiin Java-ohjelmiin, mukaan lukien sovellukset ja appletit.
Sovelluskohteet

Javan ensimmäinen kohdeympäristö oli web-selaimet, joissa Java-sovelmia (applet) voitiin ajaa turvallisesti. Appletit olivat osa jo ensimmäistä Java-julkaisua 1995. Tekniikan otti omakseen erityisesti Netscape selainsodissa Microsoftia vastaan. Myös Microsoft kehitti oman virtuaalikoneensa MSJVM:n, jonka toteutuksesta se joutui oikeusjutun kohteeksi Sunin taholta. Microsoft luopui Javan kehityksestä 2001 ja nyttemmin luonut oman lähes samanlaisen kilpailevan tekniikkansa (.NET ja C#). Applettien suosio on jäänyt vähäiseksi ja muut tekniikat, kuten Flash ovat ottaneet paikan yksinkertaisten selainsovellusten luonnissa. Myöskään Java-pohjaiset verkkotietokoneet (JavaStation, JavaOs), joita useat valmistajat esittelivät, eivät yleistyneet.
Verkon yli ladattavien sovellusten luontiin Oraclella on Java Web Start -tekniikka, joka mahdollistaa täydellisten sovellusten suorittamisen verkon yli. Java Web Start esiteltiin maaliskuussa 2001 ja Java versiosta 1.4 lähtien se on ollut osana JRE:tä.
Java Servlet API on dynaamisten websivujen kehittämiseen tarkoitettu rajapinta. Se on osa Java EE -pakettia. Servlet-rajapinnan toteuttaa servlet container (joskus käännetty suomeksi termillä kontti). Container tarjoaa web-palvelimen, jonka toiminnallisuutta voi laajentaa omilla komponenteilla hyödyntäen Javan rajapintoja. Container tarjoaa suoraan joitain palveluja, kuten istunnonhallinnan. JavaServer Pages (JSP) on Servlet API:a käyttävä tekniikka, joka käyttää yksinkertaista merkkauskieltä HTML:n seassa hyödyntämään palvelimella olevien komponenttien toiminnallisuutta tai sisältää suoraan Java-koodia. JSP muistuttaa lähinnä CGI- tai PHP-skriptausta.
Enterprise JavaBeans (EJB) on Servlet API:n kaltainen tekniikka, mutta on tarkoitettu etupäässä tietokantakäyttöön. EJB-komponentit (pavut) ajetaan sovelluspalvelimessa, joka tukee hajauttamista, transaktioita ja rinnakkaisuuden hallintaa. Sunin määrittelemää rajapintaa hyödyntävien servlet- ja EJB-tekniikoiden hyötynä on se, että periaatteessa sama sovellus on ajettavissa kaikissa rajapinnan toteuttavissa sovelluspalvelimissa. Näitä ovat esim. JBoss, IBM WebSphere Application Server, Oracle GlassFish ja Oracle WebLogic.
Javaan on saatavilla JavaFX-ohjelmointialusta , jonka ensimmäinen versio julkaistiin vuonna 2008. 
JavaFX:n oli alun perin tarkoitus korvata Swing API kokonaan, mutta myöhemmin aikeesta on luovuttu .
Apache-säätiö kehitti Javalle avoimen lähdekoodin työkaluja Jakarta-projektissa. Projektin nimi siirtyi Eclipse-säätiön Java-laajennusten paketin nimeksi samassa yhteydessä kun Eclipse otti kehitettäväkseen Apachen J2EE-sovelluspalvelimen. Useat Apachen Java-projektit on eriytetty omiksi ohjelmapaketeikseen, esim. Apache Ant. Apachen yleiset Java-kirjastot tunnetaan nykyisin nimellä Apache Commons.
Ohjelmointiympäristöt

Javalle on olemassa monia erilaisia ohjelmointiympäristöjä, jotka tarjoavat erilaisia ominaisuuksia ja työkaluja. Ilmaisia ovat esimerkiksi NetBeans ja Eclipse ja BlueJ. Kaupallisia ovat esimerkiksi JetBrainsin IntelliJ IDEA. Googlen Android Studio on virallinen ympäristö Android-kehitykseen ja tukee myös muilla kielillä kehittämistä.
Ominaisuudet > Perusominaisuudet

Java tukee tyypillisiä toistorakenteita (for, while) ja ehtolauserakenteita (if, else, switch).
Javassa osoittimelle voidaan antaa arvoksi null eli tyhjä. Kyseistä erikoisarvoa kutsutaan null-osoittimeksi, joka tarkoittaa, että osoitin ei osoita mihinkään. Null ei ole tyyppi tai olio itsessään, vaan viittaus, joka ei osoita mihinkään. Null on oletusarvo minkä tahansa viitetyypin muuttujalle, jota ei ole alustettu ilmoitushetkellä. Tämä koskee kaikenlaisia ​​muuttujia, instanssimuuttujia tai staattisia muuttujia, paitsi että kääntäjä varoittaa, jos käyttää paikallista muuttujaa alustamatta sitä. Null-arvoa käytetään usein osoittamaan, että viitemuuttujaa ei ole alustettu tai että menetelmä ei palauttanut kelvollista objektiviittausta. On tärkeää huomata, että null-arvo voidaan määrittää vain viitetyypeille, minkä myötä sitä ei voi määrittää primitiivisille muuttujille, kuten int, double, float tai boolean. Java:n instanceof -tyyppivertailuoperaattori kokeilee, onko objekti tietyn tyypin esiintymä. Se myös vertaa ilmentymää tyyppiin ja palauttaa joko true(tosi) tai false(epätosi). Jos instanceof-operaattoria käytetään minkä tahansa muuttujan kanssa, jolla on null-arvo, se palauttaa arvon false.
Ominaisuudet > Syntaksi

Javan syntaksi on ottaa suurimman osan pääpiirteistään C++ ja C ohjelmointikielistä. Toisin kuin C++, joka yhdistää syntaksinsa järjesteltyyn, geneeriseen ja oliopohjaiseen ohjelmointiin, Java rakennettiin puhtaaksi olio-ohjelmointikieleksi. Kaikki koodi on kirjoitettu luokkien sisälle, ja jokainen tietokohde on olio, poikkeuksena ovat kuitenkin primitiiviset datatyypit, (kuten esimerkiksi kokonaisluvut ja Boolen arvot), jotka eivät ole oliota suorituskykyyn liittyvien syiden takia. Java uudelleen käyttää joitain suosittuja C++ ominaisuuksia.
Toisin kuin C++, Java ei tue operaattorin ylirasitusta tai monimuotoista periytymistä luokille, mutta toisaalta monimuotoinen periytyminen on tuettu käyttöliittymille.
Java käyttää saman tyyppisiä kommentteja kuin C++. On olemassa kolme erilaista tyyliä kommentoida: yhden rivin tyyli merkittynä kahdella kenoviivalla (//), monen linjan tyyli aloitettuna tällä /* ja lopetettuna tällä */, ja Javadoc kommentointi tyyli aloitettuna tällä /** ja lopetettuna tällä */. Javadocin tyyli kommentoida mahdollistaa sen, että käyttäjä voi ajaa Javadoc suoritettavan luodakseen dokumentointia ohjelmalle. Sen dokumentoinnin voi mahdollisesti lukea integroiduilla kehitysympäristöillä (IDE:t) , kuten Eclipsellä antaakseen mahdollisuuden kehittäjille päästä dokumentointiin käsiksi IDE:n sisällä.
Tunnistin
Tunnistin on koodissa olevan elementin nimi. On olemassa tiettyjä vakiintuneita nimeämiskäytäntöjä, joita tulee noudattaa elementtien nimien valinnassa. Javassa tunnisteet ovat kirjainkoosta riippuvaisia.
Tunnistin voi sisältää:
-Minkä tahansa Unicode-merkin, joka on kirjain (mukaan lukien numeroa esittävät kirjaimet, kuten roomalaiset numerot) tai numero.
-Valuuttamerkin (kuten ¥).
-Yhdistävän välimerkin (kuten _).
Tunnistin ei voi:
-Aloittaa numerolla.
-Olla yhtä kuin varattu avainsana, null-arvo tai boolean-literal.
Muuttujat
Muuttujat ovat tunnisteita, jotka liittyvät arvoihin. Ne julistetaan kirjoittamalla muuttujan tyyppi ja nimi, ja ne voidaan halutessaan alustaa samassa lausekkeessa antamalla sille arvo.
int count;      //Declaring an uninitialized variable called 'count', of type 'int'
count = 35;     //Initializing the variable
int count = 35; //Declaring and initializing the variable at the same time
int count;      //Declaring an uninitialized variable called 'count', of type 'int'
count = 35;     //Initializing the variable
int count = 35; //Declaring and initializing the variable at the same time
Useita saman tyyppisiä muuttujia voidaan julistaa ja alustaa yhdessä lausekkeessa käyttäen pilkkua erotinmerkkinä.
int a, b;         //Declaring multiple variables of the same type
int a = 2, b = 3; //Declaring and initializing multiple variables of the same type
Ominaisuudet > Operaattorit

Operaattorit Javassa ovat samankaltaisia kuin C++:ssa. Kuitenkin Javassa ei ole poisto-operaattoria roskien keräysmekanismien vuoksi, eikä osoittimiin liittyviä toimintoja, koska Java ei perustu osoittimiin, sekä Java suorittaa muistinhallinnan automaattisesti, ilman että ohjelmoijan tarvitsee manuaalisesti allokoida muistia. Toinen ero on, että Javassa on merkitsemätön oikeanpuoleinen siirto-operaattori (>>>), kun taas C: n oikeanpuoleinen siirto-operaattorin merkki riippuu tyypistä. Javassa operaattoreita ei voi ylikuormittaa.
| Etusija | Operaattori | Kuvaus | Liitännäisyys |
| --- | --- | --- | --- |
| 1 | ()[] , | Metodin kutsu, taulukon täyttö Luokan jäsenten valinta | Vasemmalta oikealle |
| 2 | ++ -- | Jälkikäteen lisääminen ja vähentäminen | Vasemmalta oikealle |
| 3 | ++ -- + - ! ~ type (val) new | Etukäteen lisääminen ja vähentäminen Yksittäinen plus- ja miinusmerkki  Looginen EI ja binäärinen EI Tyyppimuunnos Luokan ilmentymä tai taulukon luominen | Oikealta vasemmalle |
| 4 | * / % | Kertolasku, jakolasku ja jakojäännös | Vasemmalta oikealle |
| 5 | + - + | Yhteen- ja vähennyslasku Merkkijonojen yhdistäminen | Vasemmalta oikealle |
| 6 | << >> >>> | Bittioperaatiot: vasen siirto, merkitsevä oikea siirto ja merkitsemätön oikea siirto | Vasemmalta oikealle |
| 7 | < <= > >= instanceof | Suhteellinen "pienempi kuin" ja "pienempi tai yhtä suuri kuin" Suhteellinen "suurempi kuin" ja "suurempi tai yhtä suuri kuin" Tyypin vertailu | Vasemmalta oikealle |
| 8 | == != | Vertailuoperaattorit: "yhtä suuri kuin" ja "ei yhtä suuri kuin" | Vasemmalta oikealle |
| 9 | & | Binaarinen ja looginen JA | Vasemmalta oikealle |
| 10 | ^ | Binaarinen ja looginen XOR (poissulkeva tai) | Vasemmalta oikealle |
| 11 | | | Binaarinen ja looginen TAI (sisällyttävä tai) | Vasemmalta oikealle |
| 12 | && | Looginen ehdollinen JA | Vasemmalta oikealle |
| 13 | || | Loginen ehdollinen TAI | Vasemmalta oikealle |
| 14 | c ? t : f | Kolminkertainen ehdollinen (katso ?:) | Oikealta vasemmalle |
| 15 | =+= -= *= /= %= <<= >>= >>>= &= ^= |= | Yksinkertainen sijoitus, summan ja erotuksen mukainen sijoitus Tulon, osamäärän ja jakojäännöksen mukainen sijoitus Sijoitus binaarisella vasemmalle siirrolla, merkitsevällä oikealle siirrolla ja merkitsemättömällä oikealle siirrolla Binaarisen JA, XOR- ja TAI-laskun mukainen sijoitus | Oikealta vasemmalle |
Ominaisuudet > Tunnukset

Javassa ohjelmoija joutuu antamaan nimen eli tunnuksen monille asioille. Esimerkiksi luokat, muuttujat, attribuutit ja metodit tarvitsevat tunnuksen. Javassa tunnus saa sisältää kirjaimia, numeroita ja alaviivan _. Dollarin merkkiä $ ja plussaa + ei kannata käyttää omien luokkien nimissä, koska näitä Java käyttää nimetessään sisäluokkia ja luetellun tietotyypin vakiarvoja. Välilyöntejä tai muita tyhjätilamerkkejä ei saa sisältyä tunnukseen. Tunnuksella ei ole pituusrajoitusta ja sen pitää alkaa kirjaimella. Hyvin kuvaavia nimiä saa käyttää tunnuksen nimeämisessä. Tunnuksista pitää tehdä kuvaavia ja sopivan pituisia. Tunnukset, jotka ovat liian pitkiä, ennemminkin tekevät koodista epäselvää luettavaa kuin auttavat koodin ymmärtämisessä. Tunnus ei saa olla mikään Javan avainsanoista.
Isot ja pienet kirjaimet tarkoittavat tunnuksissa eri asiaa. Monisanaisten tunnusten sanojen alkukirjaimet kirjoitetaan aina isolla kirjaimella, mikä on vakiintunut tapa Javassa. Luokan nimessä ensimmäisen sanan alkukirjain on tapana kirjoittaa isolla kirjaimella. Muuttujien, attribuuttien ja metodien nimissä pientä alkukirjainta käytetään ensimmäisen sanan alkukirjaimena. Esimerkiksi Raketti, RakettiMoottori, RakettiLaukaisualusta ja Alus ovat nimeämissäännön perusteella luokan nimiä. Nimeämissäännön perusteella muuttujien, attribuuttien ja metodien nimiä ovat esimerkiksi raketti, rakettiMoottori, räjäytäAlus ja ajaa.
Erikoiset merkit voivat aiheuttaa ongelmia tiedostojen nimissä, minkä takia luokkien nimeämisessä kannattaa käyttää vain merkkejä a–z. Esimerkiksi Äiti on huono luokan nimi, koska se sisältää ä-kirjaimen.
Ominaisuudet > Avainsanat

Javassa on 53 avainsanaa, jotka on luokiteltu useisiin luokkiin, kuten pääsymuuntimet, ohjauskulku, luokat ja tietotyypit. Esimerkkejä käyttöoikeusmäärityksistä ovat "public," "private," ja "protected", jotka määrittelevät luokan tai menetelmän laajuuden. Ohjauskulun avainsanat, kuten "if", "else", "for" ja "while", antavat ohjelmoijille mahdollisuuden määrittää ehdollisen logiikan ja silmukat. Luokkiin ja tietotyyppeihin liittyviä Java-avainsanoja ovat "class," "interface," "enum," "extends" ja "implements". Näiden avainsanojen avulla ohjelmoijat voivat määrittää luokkia, rajapintoja ja enumeja sekä ilmoittaa ja alustaa eri tietotyyppien muuttujia.
Ominaisuudet > Generics

Javassa on geneerisen ohjelmoinnin tuki sen tyyppijärjestelmässä. Generics on lisätty JDK versiossa 5.
Esimerkiksi ArrayList on listarakenne, joka tukee geneeristä ohjelmointia.
ArrayList on dynaaminen lista, joka toimii huomattavasti tehokkaammin kuin perinteiset taulukot.
Esimerkki ArrayListin käytöstä:
import java.util.ArrayList;

...
// ArrayList, joka hyväksyy String-tyypin
ArrayList<String> hedelmaSalaatti = new ArrayList<>();
hedelmaSalaatti.add("Omena");
hedelmaSalaatti.add("Mango");

for (String hedelma: hedelmaSalaatti)
{
     System.out.println("- " + hedelma);
}
Yllä havainnollistettu "import java.util.Arraylist" on ArrayList:n sijaitsema kirjasto ja sen tuominen java-ohjelmaan mahdollistaa ArrayList:n käytön. Listaa pystytään hyödyntämään kätevästi myös luokkien välillä ja siihen liittyvä toiminta voi tapahtua toisen luokan metodeilla.
Tässä esimerkissä ArrayListin käyttö toimii seuraavalla tavalla:
Määritellään lista "ArrayList", mitä tietotyyppiä listaan syötetään <String> tai alemman esimerkin mukaan <Integer>, mitä tietoa listaan syötetään "hedelmäSalaatti". Luodaan uusi lista "new Arraylist<>()". Tyypiksi voidaan määritellä ainoastaan luokkia, eikä primitiivisiä datatyyppejä voida käyttää. Jokaiselle primitiiviselle datatyypille on oma "luokkaversionsa" (wrapper).
Listaan voidaan lisätä tietoja.add menetelmällä, tässä tapauksessa hedelmäSalaatti .add(). Listalta voidaan myös poistaa tietoja metodilla .remove. Tässä tilanteessa hedelmäSalaatti.remove(). Size metodilla voidaan tulkita listan koko, joka toimii seuraavasti yllä olevaa esimerkkiä hyödyntäen: hedelmäSalaatti.size(). Vastaavasti get-metodilla voidaan näyttää tietyllä indeksillä varustettu alkio seuraavasti: hedelmäSalaatti.get(0). Tässä etsimme listan 0:n alkion, mikä vastaa ensimmäistä jäsentä.
Vastaavasti sitä käyttää myös muilla tietotyypeillä:
// ArrayList, joka hyväksyy int-tyypin
ArrayList<Integer> hedelmaSalaatti = new ArrayList<>();
hedelmaSalaatti.add(1);
hedelmaSalaatti.add(2);
Ominaisuudet > Kommentit

Java-ohjelmointikielessä kommentit ovat välttämätön osa koodia, jonka avulla kehittäjät voivat dokumentoida ja selittää ohjelmakoodia. Kommentit ovat tärkeitä, koska ne helpottavat ohjelman ymmärtämistä ja ylläpitoa, auttavat välttämään virheitä sekä mahdollistavat koodin nopean päivittämisen ja muokkaamisen. Java tukee kahta erilaista kommentointityyppiä: yksirivisiä ja monirivisiä kommentteja.
Yksiriviset kommentit aloitetaan kahdella etuliitteellä "//" ja ne päättyvät automaattisesti rivin loppuun. Yksirivisiä kommentteja käytetään yleensä lyhyisiin selityksiin, kuten muuttujien tai metodien nimien selittämiseen.
Moniriviset kommentit aloitetaan "/" merkinnällä ja päättyvät "/" merkinnällä. Monirivisiä kommentteja käytetään yleensä laajempiin selityksiin, kuten ohjelman toimintaa selittämiseen tai koodin osien dokumentointiin. Monirivisiä kommentteja voidaan käyttää myös tilanteissa, joissa koodia ei haluta suorittaa, mutta sitä ei haluta poistaa kokonaan koodista. Tämä on hyödyllistä esimerkiksi testauksen yhteydessä, kun halutaan jättää tiettyjä testilohkoja kommentoituna käyttöön myöhempää käyttöä varten.
Kommentit ovat tärkeitä myös siksi, että ne helpottavat koodin ylläpidettävyyttä ja mahdollistavat koodin ymmärrettävyyden muille kehittäjille. Koodin ymmärrettävyys on erityisen tärkeää, kun useampi kehittäjä työskentelee saman projektin parissa tai kun projektin ylläpitoa siirretään toiselle kehittäjälle. Kommentit helpottavat myös ohjelmakoodin testausta ja vähentävät virheiden riskiä.
On tärkeää käyttää kommentteja harkiten ja järkevästi. Liikaa kommentteja voi tehdä koodista sekavan ja hankalan lukea, kun taas liian vähän kommentteja voi tehdä koodista vaikeasti ymmärrettävää. Hyvä käytäntö on lisätä kommentteja aina silloin, kun koodi ei ole ilmeisen selvää tai se saattaa aiheuttaa epäselvyyksiä muille kehittäjille.
Ominaisuudet > Abstraktit luokat ja metodit

Abstrakti luokka on Javassa eräs tapa lisätä ohjelman enkapselointia tarkistamalla, ettei pääluokasta luoda uutta oliota, mutta pääluokan lapsiluokkien olioiden luominen on sallittu. Abstraktia luokkaa ei voida implementoida, mutta abstraktin luokan lapsiluokka voidaan.
Abstraktin luokan rakenteella tehdään määritelmän avulla muottipohja luokasta periytyville lapsiluokille. Näin varmistetaan, että jokainen periytyvä metodi toteuttaa tietyn toiminnallisuuden ilman että kantaluokkaa suoraan kutsutaan. Sen käyttöä edellyttää yleensä jonkin jaetun toiminnallisuuden tarpeen toteamista abstraktia luokkaa varten. Abstrakti luokka luodaan lisäämällä avainsana abstract class -avainsanan eteen. Ei-abstraktia abstraktin luokan lapsiluokkaa kutsutaan konkreettiseksi luokaksi.
Abstraktin luokan määritys tapahtuu abstract -avainsanalla.
public abstract class className {}
Jos abstraktista luokasta yritetään luoda uusi olio, Java palauttaa virheviestin. Virheen voi saada kiinni ajon aikana InstantiationError luokan avulla jos ja vain jos luokan määritys on yhteensopimattomasti muuttunut. Abstrakti metodi on metodi, joka on määritelty ilman ohjelmakoodia abstraktissa luokassa. Abstrakteja metodeja ei voida määritellä ei-abstraktissa luokassa.

Abstraktin metodin määritys tapahtuu abstract -avainsanalla.
public abstract class className {
    abstract void method();
}
Abstraktin luokan lapsiluokat voivat käyttää abstrakteja metodeja implementoimalla tai kumoamalla (Override) abstraktin metodin, joka periytynyt pääluokasta.
public abstract class subClassName extends className {
    @Override
    void method();
}
Kun abstrakti luokasta on luotu lapsiluokkia, lapsiluokka välittää implementoinnit kaikkiin abstrakteihin metodeihin sen pääluokassa. Jos näin ei ole, niin lapsiluokka pitää myös määritellä abstraktiksi. Abstrakteissa luokissa ja metodeissa voidaan käyttää avainsanaa static