CINXE.COM
Java – Wikipedia
<!DOCTYPE html> <html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-disabled skin-theme-clientpref-day vector-sticky-header-enabled vector-toc-available" lang="fi" dir="ltr"> <head> <meta charset="UTF-8"> <title>Java – Wikipedia</title> <script>(function(){var className="client-js vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-disabled skin-theme-clientpref-day vector-sticky-header-enabled vector-toc-available";var cookie=document.cookie.match(/(?:^|; )fiwikimwclientpreferences=([^;]+)/);if(cookie){cookie[1].split('%2C').forEach(function(pref){className=className.replace(new RegExp('(^| )'+pref.replace(/-clientpref-\w+$|[^\w-]+/g,'')+'-clientpref-\\w+( |$)'),'$1'+pref+'$2');});}document.documentElement.className=className;}());RLCONF={"wgBreakFrames":false,"wgSeparatorTransformTable":[",\t."," \t,"],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"fi normal","wgMonthNames":["","tammikuu","helmikuu","maaliskuu","huhtikuu","toukokuu","kesäkuu","heinäkuu","elokuu","syyskuu","lokakuu","marraskuu","joulukuu"],"wgRequestId":"a49349c2-91b1-4b40-8cc9-87f7b576d643","wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"Java","wgTitle":"Java","wgCurRevisionId":23144845,"wgRevisionId":23144845,"wgArticleId":410,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["Small-elementtiä käyttämättömät tarkenteelliset tietolaatikot","Puutteelliset lähdemerkinnät","Väitteelle ei ole merkitty esittäjää","Suomentaja-parametria käyttävät viitteet","Wikipedia-artikkelit BNE-tunnisteilla","Wikipedia-artikkelit BNF-tunnisteilla","Wikipedia-artikkelit BNFdata-tunnisteilla","Wikipedia-artikkelit GND-tunnisteilla","Wikipedia-artikkelit J9U-tunnisteilla","Wikipedia-artikkelit LCCN-tunnisteilla","Wikipedia-artikkelit NKC-tunnisteilla","Wikipedia-artikkelit ELMCIP ID -tunnisteilla","Seulonnan keskeiset artikkelit","Java"],"wgPageViewLanguage":"fi","wgPageContentLanguage":"fi","wgPageContentModel":"wikitext","wgRelevantPageName":"Java","wgRelevantArticleId":410,"wgIsProbablyEditable":true,"wgRelevantPageIsProbablyEditable":true,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgNoticeProject":"wikipedia","wgCiteReferencePreviewsActive":true,"wgFlaggedRevsParams":{"tags":{"accuracy":{"levels":3}}},"wgStableRevisionId":23144845,"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgPopupsFlags":0,"wgVisualEditor":{"pageLanguageCode":"fi","pageLanguageDir":"ltr","pageVariantFallbacks":"fi"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":true,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":100000,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":false,"wgVector2022LanguageInHeader":true,"wgULSisLanguageSelectorEmpty":false,"wgWikibaseItemId":"Q251","wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"],"GEHomepageSuggestedEditsEnableTopics":true,"wgGETopicsMatchModeEnabled":false,"wgGELevelingUpEnabledForUser":false,"wgSiteNoticeId":"2.1"}; RLSTATE={"ext.gadget.hidePersonalSandboxEdits":"ready","ext.gadget.fiwiki_flaggedrevs_css_rcfix":"ready","ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.cite.styles":"ready","ext.pygments":"ready","skins.vector.search.codex.styles":"ready","skins.vector.styles":"ready","skins.vector.icons":"ready","jquery.makeCollapsible.styles":"ready","ext.flaggedRevs.basic":"ready","mediawiki.codex.messagebox.styles":"ready","ext.wikimediamessages.styles":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","ext.uls.interlanguage":"ready","wikibase.client.init":"ready","ext.wikimediaBadges":"ready","ext.dismissableSiteNotice.styles":"ready"};RLPAGEMODULES=["ext.cite.ux-enhancements","ext.pygments.view","mediawiki.page.media","site","mediawiki.page.ready","jquery.makeCollapsible","mediawiki.toc","skins.vector.js","ext.centralNotice.geoIP","ext.centralNotice.startUp","ext.flaggedRevs.advanced","ext.gadget.publicarttablesort","ext.gadget.ViikonKilpailu","ext.gadget.WikiLovesMonunmets","ext.gadget.ProtectionIndicator","ext.gadget.frwiki_infobox_v3","ext.gadget.linkeddata","ext.gadget.perustiedotwikidatassa","ext.urlShortener.toolbar","ext.centralauth.centralautologin","mmv.bootstrap","ext.popups","ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader","ext.echo.centralauth","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming","ext.uls.interface","ext.cx.eventlogging.campaigns","ext.cx.uls.quick.actions","wikibase.client.vector-2022","ext.checkUser.clientHints","ext.growthExperiments.SuggestedEditSession","oojs-ui.styles.icons-media","oojs-ui-core.icons","ext.dismissableSiteNotice"];</script> <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(function(){return["user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); }];});});</script> <link rel="stylesheet" href="/w/load.php?lang=fi&modules=ext.cite.styles%7Cext.dismissableSiteNotice.styles%7Cext.flaggedRevs.basic%7Cext.pygments%2CwikimediaBadges%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediamessages.styles%7Cjquery.makeCollapsible.styles%7Cmediawiki.codex.messagebox.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles%7Cwikibase.client.init&only=styles&skin=vector-2022"> <script async="" src="/w/load.php?lang=fi&modules=startup&only=scripts&raw=1&skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=fi&modules=ext.gadget.fiwiki_flaggedrevs_css_rcfix%2ChidePersonalSandboxEdits&only=styles&skin=vector-2022"> <link rel="stylesheet" href="/w/load.php?lang=fi&modules=site.styles&only=styles&skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.22"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta name="viewport" content="width=1120"> <meta property="og:title" content="Java – Wikipedia"> <meta property="og:type" content="website"> <link rel="preconnect" href="//upload.wikimedia.org"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//fi.m.wikipedia.org/wiki/Java"> <link rel="alternate" type="application/x-wiki" title="Muokkaa" href="/w/index.php?title=Java&action=edit"> <link rel="apple-touch-icon" href="/static/apple-touch/wikipedia.png"> <link rel="icon" href="/static/favicon/wikipedia.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="Wikipedia (fi)"> <link rel="EditURI" type="application/rsd+xml" href="//fi.wikipedia.org/w/api.php?action=rsd"> <link rel="canonical" href="https://fi.wikipedia.org/wiki/Java"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.fi"> <link rel="alternate" type="application/atom+xml" title="Wikipedia-Atom-syöte" href="/w/index.php?title=Toiminnot:Tuoreet_muutokset&feed=atom"> <link rel="dns-prefetch" href="//meta.wikimedia.org" /> <link rel="dns-prefetch" href="auth.wikimedia.org"> </head> <body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject mw-editable page-Java rootpage-Java skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">Siirry sisältöön</a> <div class="vector-header-container"> <header class="vector-header mw-header"> <div class="vector-header-start"> <nav class="vector-main-menu-landmark" aria-label="Sivusto"> <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" title="Päävalikko" > <input type="checkbox" id="vector-main-menu-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-main-menu-dropdown" class="vector-dropdown-checkbox " aria-label="Päävalikko" > <label id="vector-main-menu-dropdown-label" for="vector-main-menu-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-menu mw-ui-icon-wikimedia-menu"></span> <span class="vector-dropdown-label-text">Päävalikko</span> </label> <div class="vector-dropdown-content"> <div id="vector-main-menu-unpinned-container" class="vector-unpinned-container"> <div id="vector-main-menu" class="vector-main-menu vector-pinnable-element"> <div class="vector-pinnable-header vector-main-menu-pinnable-header vector-pinnable-header-unpinned" data-feature-name="main-menu-pinned" data-pinnable-element-id="vector-main-menu" data-pinned-container-id="vector-main-menu-pinned-container" data-unpinned-container-id="vector-main-menu-unpinned-container" > <div class="vector-pinnable-header-label">Päävalikko</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">siirrä sivupalkkiin</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">piilota</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Valikko </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-description" class="mw-list-item"><a href="/wiki/Wikipedia:Etusivu" title="Siirry etusivulle [z]" accesskey="z"><span>Etusivu</span></a></li><li id="n-aboutsite" class="mw-list-item"><a href="/wiki/Wikipedia:Tietoja"><span>Tietoja Wikipediasta</span></a></li><li id="n-allarticles" class="mw-list-item"><a href="/wiki/Wikipedia:Selaa_luokittain"><span>Kaikki sivut</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Toiminnot:Satunnainen_sivu" title="Avaa satunnainen sivu [x]" accesskey="x"><span>Satunnainen artikkeli</span></a></li><li id="n-specialpages" class="mw-list-item"><a href="/wiki/Toiminnot:Toimintosivut"><span>Toimintosivut</span></a></li> </ul> </div> </div> <div id="p-interaction" class="vector-menu mw-portlet mw-portlet-interaction" > <div class="vector-menu-heading"> Osallistuminen </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-help" class="mw-list-item"><a href="/wiki/Ohje:Sis%C3%A4llys" title="Ohjeita"><span>Ohje</span></a></li><li id="n-Kahvihuone" class="mw-list-item"><a href="/wiki/Wikipedia:Kahvihuone"><span>Kahvihuone</span></a></li><li id="n-currentevents" class="mw-list-item"><a href="/wiki/Wikipedia:Ajankohtaista" title="Taustatietoa tämänhetkisistä tapahtumista"><span>Ajankohtaista</span></a></li><li id="n-Tuoreet-odottavat-muutokset" class="mw-list-item"><a href="//fi.wikipedia.org/wiki/Toiminnot:Tuoreet_muutokset?damaging=&goodfaith=&hideliu=0&hideanons=0&userExpLevel=&hidemyself=0&hidebyothers=0&hidebots=1&hidehumans=0&hidepatrolled=1&hideunpatrolled=0&hideminor=0&hidemajor=0&hidepageedits=0&hidenewpages=0&hidecategorization=1&hideWikibase=1&hidelog=0&highlight=1&goodfaith__verylikelybad_color=c5&goodfaith__likelybad_color=c4&goodfaith__maybebad_color=c3&damaging__verylikelybad_color=c5&damaging__likelybad_color=c4&damaging__maybebad_color=c3"><span>Tuoreet odottavat muutokset</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Toiminnot:Tuoreet_muutokset" title="Luettelo tuoreista muutoksista [r]" accesskey="r"><span>Tuoreet muutokset</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/Wikipedia:Etusivu" class="mw-logo"> <img class="mw-logo-icon" src="/static/images/icons/wikipedia.png" alt="" aria-hidden="true" height="50" width="50"> <span class="mw-logo-container skin-invert"> <img class="mw-logo-wordmark" alt="Wikipedia" src="/static/images/mobile/copyright/wikipedia-wordmark-en.svg" style="width: 7.5em; height: 1.125em;"> <img class="mw-logo-tagline" alt="" src="/static/images/mobile/copyright/wikipedia-tagline-fi.svg" width="120" height="13" style="width: 7.5em; height: 0.8125em;"> </span> </a> </div> <div class="vector-header-end"> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-collapses vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <a href="/wiki/Toiminnot:Haku" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Hae Wikipediasta [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Haku</span> </a> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail cdx-typeahead-search--auto-expand-width"> <form action="/w/index.php" id="searchform" class="cdx-search-input cdx-search-input--has-end-button"> <div id="simpleSearch" class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="Hae Wikipediasta" aria-label="Hae Wikipediasta" autocapitalize="sentences" title="Hae Wikipediasta [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Toiminnot:Haku"> </div> <button class="cdx-button cdx-search-input__end-button">Hae</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Henkilökohtaiset työkalut"> <div class="vector-user-links-main"> <div id="p-vector-user-menu-preferences" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-userpage" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <nav class="vector-appearance-landmark" aria-label="Ulkoasu"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="Muuta sivun kirjainkokoa, leveyttä ja väriä" > <input type="checkbox" id="vector-appearance-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-appearance-dropdown" class="vector-dropdown-checkbox " aria-label="Ulkoasu" > <label id="vector-appearance-dropdown-label" for="vector-appearance-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance"></span> <span class="vector-dropdown-label-text">Ulkoasu</span> </label> <div class="vector-dropdown-content"> <div id="vector-appearance-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div id="p-vector-user-menu-notifications" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-overflow" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="https://donate.wikimedia.org/?wmf_source=donate&wmf_medium=sidebar&wmf_campaign=fi.wikipedia.org&uselang=fi" class=""><span>Lahjoitukset</span></a> </li> <li id="pt-createaccount-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Toiminnot:Luo_tunnus&returnto=Java" title="On suositeltavaa luoda käyttäjätunnus ja kirjautua sisään. Se ei kuitenkaan ole pakollista." class=""><span>Luo tunnus</span></a> </li> <li id="pt-login-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Toiminnot:Kirjaudu_sis%C3%A4%C3%A4n&returnto=Java" title="On suositeltavaa kirjautua sisään. Se ei kuitenkaan ole pakollista. [o]" accesskey="o" class=""><span>Kirjaudu sisään</span></a> </li> </ul> </div> </div> </div> <div id="vector-user-links-dropdown" class="vector-dropdown vector-user-menu vector-button-flush-right vector-user-menu-logged-out" title="Lisää valintoja" > <input type="checkbox" id="vector-user-links-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-user-links-dropdown" class="vector-dropdown-checkbox " aria-label="Henkilökohtaiset työkalut" > <label id="vector-user-links-dropdown-label" for="vector-user-links-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-ellipsis mw-ui-icon-wikimedia-ellipsis"></span> <span class="vector-dropdown-label-text">Henkilökohtaiset työkalut</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="Käyttäjävalikko" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport" class="user-links-collapsible-item mw-list-item"><a href="https://donate.wikimedia.org/?wmf_source=donate&wmf_medium=sidebar&wmf_campaign=fi.wikipedia.org&uselang=fi"><span>Lahjoitukset</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Toiminnot:Luo_tunnus&returnto=Java" title="On suositeltavaa luoda käyttäjätunnus ja kirjautua sisään. Se ei kuitenkaan ole pakollista."><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>Luo tunnus</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Toiminnot:Kirjaudu_sis%C3%A4%C3%A4n&returnto=Java" title="On suositeltavaa kirjautua sisään. Se ei kuitenkaan ole pakollista. [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Kirjaudu sisään</span></a></li> </ul> </div> </div> <div id="p-user-menu-anon-editor" class="vector-menu mw-portlet mw-portlet-user-menu-anon-editor" > <div class="vector-menu-heading"> Sivut kirjautumattomille muokkaajille <a href="/wiki/Wikipedia:Tervetuloa_Wikipediaan" aria-label="Lue lisää muokkaamisesta"><span>lue lisää</span></a> </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-anoncontribs" class="mw-list-item"><a href="/wiki/Toiminnot:Omat_muokkaukset" title="Luettelo tästä IP-osoitteesta tehdyistä muokkauksista [y]" accesskey="y"><span>Muokkaukset</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Toiminnot:Oma_keskustelu" title="Keskustelu tämän IP-osoitteen muokkauksista [n]" accesskey="n"><span>Keskustelu</span></a></li> </ul> </div> </div> </div> </div> </nav> </div> </header> </div> <div class="mw-page-container"> <div class="mw-page-container-inner"> <div class="vector-sitenotice-container"> <div id="siteNotice"><div id="mw-dismissablenotice-anonplace"></div><script>(function(){var node=document.getElementById("mw-dismissablenotice-anonplace");if(node){node.outerHTML="\u003Cdiv class=\"mw-dismissable-notice\"\u003E\u003Cdiv class=\"mw-dismissable-notice-close\"\u003E[\u003Ca tabindex=\"0\" role=\"button\"\u003Epiilota\u003C/a\u003E]\u003C/div\u003E\u003Cdiv class=\"mw-dismissable-notice-body\"\u003E\u003C!-- CentralNotice --\u003E\u003Cdiv id=\"localNotice\" data-nosnippet=\"\"\u003E\u003Cdiv class=\"sitenotice\" lang=\"fi\" dir=\"ltr\"\u003E\u003Cdiv style=\"text-align:center;margin-left:20%\"\u003E\u003Cspan style=\"color:red\"\u003E\u0026#10084;\u003C/span\u003E \u003Cb\u003EHuhtikuun haaste:\u003C/b\u003E \u003Ca href=\"/wiki/Wikiprojekti:Punaisten_linkkien_naiset/2025\" title=\"Wikiprojekti:Punaisten linkkien naiset/2025\"\u003ELisää naisia Wikipediaan! – Osallistu kirjoituskilpailuun 1.–30.4.\u003C/a\u003E\u003C/div\u003E\u003C/div\u003E\u003C/div\u003E\u003C/div\u003E\u003C/div\u003E";}}());</script></div> </div> <div class="vector-column-start"> <div class="vector-main-menu-container"> <div id="mw-navigation"> <nav id="mw-panel" class="vector-main-menu-landmark" aria-label="Sivusto"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> <div class="vector-sticky-pinned-container"> <nav id="mw-panel-toc" aria-label="Sisällysluettelo" data-event-name="ui.sidebar-toc" class="mw-table-of-contents-container vector-toc-landmark"> <div id="vector-toc-pinned-container" class="vector-pinned-container"> <div id="vector-toc" class="vector-toc vector-pinnable-element"> <div class="vector-pinnable-header vector-toc-pinnable-header vector-pinnable-header-pinned" data-feature-name="toc-pinned" data-pinnable-element-id="vector-toc" > <h2 class="vector-pinnable-header-label">Sisällysluettelo</h2> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-toc.pin">siirrä sivupalkkiin</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-toc.unpin">piilota</button> </div> <ul class="vector-toc-contents" id="mw-panel-toc-list"> <li id="toc-mw-content-text" class="vector-toc-list-item vector-toc-level-1"> <a href="#" class="vector-toc-link"> <div class="vector-toc-text">Johdanto</div> </a> </li> <li id="toc-Nimi" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Nimi"> <div class="vector-toc-text"> <span class="vector-toc-numb">1</span> <span>Nimi</span> </div> </a> <ul id="toc-Nimi-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Historia" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Historia"> <div class="vector-toc-text"> <span class="vector-toc-numb">2</span> <span>Historia</span> </div> </a> <button aria-controls="toc-Historia-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Vaihda alaosio Historia</span> </button> <ul id="toc-Historia-sublist" class="vector-toc-list"> <li id="toc-Periaatteet" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Periaatteet"> <div class="vector-toc-text"> <span class="vector-toc-numb">2.1</span> <span>Periaatteet</span> </div> </a> <ul id="toc-Periaatteet-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Yleistä" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Yleistä"> <div class="vector-toc-text"> <span class="vector-toc-numb">3</span> <span>Yleistä</span> </div> </a> <ul id="toc-Yleistä-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Sunin/Oraclen_kehitysympäristö" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Sunin/Oraclen_kehitysympäristö"> <div class="vector-toc-text"> <span class="vector-toc-numb">4</span> <span>Sunin/Oraclen kehitysympäristö</span> </div> </a> <button aria-controls="toc-Sunin/Oraclen_kehitysympäristö-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Vaihda alaosio Sunin/Oraclen kehitysympäristö</span> </button> <ul id="toc-Sunin/Oraclen_kehitysympäristö-sublist" class="vector-toc-list"> <li id="toc-Versioita" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Versioita"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.1</span> <span>Versioita</span> </div> </a> <ul id="toc-Versioita-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Kehitysympäristön_asentaminen" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Kehitysympäristön_asentaminen"> <div class="vector-toc-text"> <span class="vector-toc-numb">5</span> <span>Kehitysympäristön asentaminen</span> </div> </a> <ul id="toc-Kehitysympäristön_asentaminen-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Turvallisuusarkkitehtuuri" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Turvallisuusarkkitehtuuri"> <div class="vector-toc-text"> <span class="vector-toc-numb">6</span> <span>Turvallisuusarkkitehtuuri</span> </div> </a> <button aria-controls="toc-Turvallisuusarkkitehtuuri-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Vaihda alaosio Turvallisuusarkkitehtuuri</span> </button> <ul id="toc-Turvallisuusarkkitehtuuri-sublist" class="vector-toc-list"> <li id="toc-Hiekkalaatikkomalli" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Hiekkalaatikkomalli"> <div class="vector-toc-text"> <span class="vector-toc-numb">6.1</span> <span>Hiekkalaatikkomalli</span> </div> </a> <ul id="toc-Hiekkalaatikkomalli-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Sovelluskohteet" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Sovelluskohteet"> <div class="vector-toc-text"> <span class="vector-toc-numb">7</span> <span>Sovelluskohteet</span> </div> </a> <ul id="toc-Sovelluskohteet-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Ohjelmointiympäristöt" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Ohjelmointiympäristöt"> <div class="vector-toc-text"> <span class="vector-toc-numb">8</span> <span>Ohjelmointiympäristöt</span> </div> </a> <ul id="toc-Ohjelmointiympäristöt-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Ominaisuudet" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Ominaisuudet"> <div class="vector-toc-text"> <span class="vector-toc-numb">9</span> <span>Ominaisuudet</span> </div> </a> <button aria-controls="toc-Ominaisuudet-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Vaihda alaosio Ominaisuudet</span> </button> <ul id="toc-Ominaisuudet-sublist" class="vector-toc-list"> <li id="toc-Perusominaisuudet" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Perusominaisuudet"> <div class="vector-toc-text"> <span class="vector-toc-numb">9.1</span> <span>Perusominaisuudet</span> </div> </a> <ul id="toc-Perusominaisuudet-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Olio-ohjelmointi" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Olio-ohjelmointi"> <div class="vector-toc-text"> <span class="vector-toc-numb">9.2</span> <span>Olio-ohjelmointi</span> </div> </a> <ul id="toc-Olio-ohjelmointi-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Syntaksi" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Syntaksi"> <div class="vector-toc-text"> <span class="vector-toc-numb">9.3</span> <span>Syntaksi</span> </div> </a> <ul id="toc-Syntaksi-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Operaattorit" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Operaattorit"> <div class="vector-toc-text"> <span class="vector-toc-numb">9.4</span> <span>Operaattorit</span> </div> </a> <ul id="toc-Operaattorit-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Tunnukset" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Tunnukset"> <div class="vector-toc-text"> <span class="vector-toc-numb">9.5</span> <span>Tunnukset</span> </div> </a> <ul id="toc-Tunnukset-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Esimerkki" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Esimerkki"> <div class="vector-toc-text"> <span class="vector-toc-numb">9.6</span> <span>Esimerkki</span> </div> </a> <ul id="toc-Esimerkki-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Avainsanat" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Avainsanat"> <div class="vector-toc-text"> <span class="vector-toc-numb">9.7</span> <span>Avainsanat</span> </div> </a> <ul id="toc-Avainsanat-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Generics" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Generics"> <div class="vector-toc-text"> <span class="vector-toc-numb">9.8</span> <span>Generics</span> </div> </a> <ul id="toc-Generics-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Kommentit" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Kommentit"> <div class="vector-toc-text"> <span class="vector-toc-numb">9.9</span> <span>Kommentit</span> </div> </a> <ul id="toc-Kommentit-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Periytyminen" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Periytyminen"> <div class="vector-toc-text"> <span class="vector-toc-numb">9.10</span> <span>Periytyminen</span> </div> </a> <ul id="toc-Periytyminen-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Abstraktit_luokat_ja_metodit" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Abstraktit_luokat_ja_metodit"> <div class="vector-toc-text"> <span class="vector-toc-numb">9.11</span> <span>Abstraktit luokat ja metodit</span> </div> </a> <ul id="toc-Abstraktit_luokat_ja_metodit-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Tiedostonkäsittely_Javassa" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Tiedostonkäsittely_Javassa"> <div class="vector-toc-text"> <span class="vector-toc-numb">9.12</span> <span>Tiedostonkäsittely Javassa</span> </div> </a> <ul id="toc-Tiedostonkäsittely_Javassa-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Muistinhallinta" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Muistinhallinta"> <div class="vector-toc-text"> <span class="vector-toc-numb">9.13</span> <span>Muistinhallinta</span> </div> </a> <ul id="toc-Muistinhallinta-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Tyyppimuunnokset" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Tyyppimuunnokset"> <div class="vector-toc-text"> <span class="vector-toc-numb">9.14</span> <span>Tyyppimuunnokset</span> </div> </a> <ul id="toc-Tyyppimuunnokset-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Suorituskyky" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Suorituskyky"> <div class="vector-toc-text"> <span class="vector-toc-numb">9.15</span> <span>Suorituskyky</span> </div> </a> <ul id="toc-Suorituskyky-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Virheidenkäsittely" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Virheidenkäsittely"> <div class="vector-toc-text"> <span class="vector-toc-numb">9.16</span> <span>Virheidenkäsittely</span> </div> </a> <ul id="toc-Virheidenkäsittely-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Javan_tarjoamia_kirjastoja" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Javan_tarjoamia_kirjastoja"> <div class="vector-toc-text"> <span class="vector-toc-numb">9.17</span> <span>Javan tarjoamia kirjastoja</span> </div> </a> <ul id="toc-Javan_tarjoamia_kirjastoja-sublist" class="vector-toc-list"> <li id="toc-Esimerkkikirjastoja" class="vector-toc-list-item vector-toc-level-3"> <a class="vector-toc-link" href="#Esimerkkikirjastoja"> <div class="vector-toc-text"> <span class="vector-toc-numb">9.17.1</span> <span>Esimerkkikirjastoja</span> </div> </a> <ul id="toc-Esimerkkikirjastoja-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Ulkoiset_Java_kirjastot" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Ulkoiset_Java_kirjastot"> <div class="vector-toc-text"> <span class="vector-toc-numb">9.18</span> <span>Ulkoiset Java kirjastot</span> </div> </a> <ul id="toc-Ulkoiset_Java_kirjastot-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Erot_muihin_kieliin" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Erot_muihin_kieliin"> <div class="vector-toc-text"> <span class="vector-toc-numb">10</span> <span>Erot muihin kieliin</span> </div> </a> <button aria-controls="toc-Erot_muihin_kieliin-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Vaihda alaosio Erot muihin kieliin</span> </button> <ul id="toc-Erot_muihin_kieliin-sublist" class="vector-toc-list"> <li id="toc-Java_ja_JavaScript" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Java_ja_JavaScript"> <div class="vector-toc-text"> <span class="vector-toc-numb">10.1</span> <span>Java ja JavaScript</span> </div> </a> <ul id="toc-Java_ja_JavaScript-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Uuden_luokan_tekeminen_ja_käyttäminen._Luokan_rakentaja_ja_metodien_yksinkertaista_käyttöä." class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Uuden_luokan_tekeminen_ja_käyttäminen._Luokan_rakentaja_ja_metodien_yksinkertaista_käyttöä."> <div class="vector-toc-text"> <span class="vector-toc-numb">11</span> <span>Uuden luokan tekeminen ja käyttäminen. Luokan rakentaja ja metodien yksinkertaista käyttöä.</span> </div> </a> <button aria-controls="toc-Uuden_luokan_tekeminen_ja_käyttäminen._Luokan_rakentaja_ja_metodien_yksinkertaista_käyttöä.-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Vaihda alaosio Uuden luokan tekeminen ja käyttäminen. Luokan rakentaja ja metodien yksinkertaista käyttöä.</span> </button> <ul id="toc-Uuden_luokan_tekeminen_ja_käyttäminen._Luokan_rakentaja_ja_metodien_yksinkertaista_käyttöä.-sublist" class="vector-toc-list"> <li id="toc-Pää_tiedosto" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Pää_tiedosto"> <div class="vector-toc-text"> <span class="vector-toc-numb">11.1</span> <span>Pää tiedosto</span> </div> </a> <ul id="toc-Pää_tiedosto-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Luokkatiedosto._Luokan_ja_metodien_tekeminen" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Luokkatiedosto._Luokan_ja_metodien_tekeminen"> <div class="vector-toc-text"> <span class="vector-toc-numb">11.2</span> <span>Luokkatiedosto. Luokan ja metodien tekeminen</span> </div> </a> <ul id="toc-Luokkatiedosto._Luokan_ja_metodien_tekeminen-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Singleton" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Singleton"> <div class="vector-toc-text"> <span class="vector-toc-numb">11.3</span> <span>Singleton</span> </div> </a> <ul id="toc-Singleton-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Säikeet" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Säikeet"> <div class="vector-toc-text"> <span class="vector-toc-numb">12</span> <span>Säikeet</span> </div> </a> <ul id="toc-Säikeet-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Javan_käyttö_Java-alustan_ulkopuolella" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Javan_käyttö_Java-alustan_ulkopuolella"> <div class="vector-toc-text"> <span class="vector-toc-numb">13</span> <span>Javan käyttö Java-alustan ulkopuolella</span> </div> </a> <button aria-controls="toc-Javan_käyttö_Java-alustan_ulkopuolella-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Vaihda alaosio Javan käyttö Java-alustan ulkopuolella</span> </button> <ul id="toc-Javan_käyttö_Java-alustan_ulkopuolella-sublist" class="vector-toc-list"> <li id="toc-Android" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Android"> <div class="vector-toc-text"> <span class="vector-toc-numb">13.1</span> <span>Android</span> </div> </a> <ul id="toc-Android-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Kritiikki" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Kritiikki"> <div class="vector-toc-text"> <span class="vector-toc-numb">14</span> <span>Kritiikki</span> </div> </a> <button aria-controls="toc-Kritiikki-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Vaihda alaosio Kritiikki</span> </button> <ul id="toc-Kritiikki-sublist" class="vector-toc-list"> <li id="toc-Etumerkittömät_kokonaisluvut" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Etumerkittömät_kokonaisluvut"> <div class="vector-toc-text"> <span class="vector-toc-numb">14.1</span> <span>Etumerkittömät kokonaisluvut</span> </div> </a> <ul id="toc-Etumerkittömät_kokonaisluvut-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Yhdistetyt_arvotyypit" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Yhdistetyt_arvotyypit"> <div class="vector-toc-text"> <span class="vector-toc-numb">14.2</span> <span>Yhdistetyt arvotyypit</span> </div> </a> <ul id="toc-Yhdistetyt_arvotyypit-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Perusmuuttujien_ja_taulukoiden_integrointi" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Perusmuuttujien_ja_taulukoiden_integrointi"> <div class="vector-toc-text"> <span class="vector-toc-numb">14.3</span> <span>Perusmuuttujien ja taulukoiden integrointi</span> </div> </a> <ul id="toc-Perusmuuttujien_ja_taulukoiden_integrointi-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Serialisaatio" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Serialisaatio"> <div class="vector-toc-text"> <span class="vector-toc-numb">14.4</span> <span>Serialisaatio</span> </div> </a> <ul id="toc-Serialisaatio-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Suuret_taulukot" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Suuret_taulukot"> <div class="vector-toc-text"> <span class="vector-toc-numb">14.5</span> <span>Suuret taulukot</span> </div> </a> <ul id="toc-Suuret_taulukot-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Hitaus" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Hitaus"> <div class="vector-toc-text"> <span class="vector-toc-numb">14.6</span> <span>Hitaus</span> </div> </a> <ul id="toc-Hitaus-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Turvallisuus" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Turvallisuus"> <div class="vector-toc-text"> <span class="vector-toc-numb">14.7</span> <span>Turvallisuus</span> </div> </a> <ul id="toc-Turvallisuus-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Katso_myös" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Katso_myös"> <div class="vector-toc-text"> <span class="vector-toc-numb">15</span> <span>Katso myös</span> </div> </a> <button aria-controls="toc-Katso_myös-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Vaihda alaosio Katso myös</span> </button> <ul id="toc-Katso_myös-sublist" class="vector-toc-list"> <li id="toc-Javan_vertailu_muihin_ohjelmointikieliin" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Javan_vertailu_muihin_ohjelmointikieliin"> <div class="vector-toc-text"> <span class="vector-toc-numb">15.1</span> <span>Javan vertailu muihin ohjelmointikieliin</span> </div> </a> <ul id="toc-Javan_vertailu_muihin_ohjelmointikieliin-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Lähteet" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Lähteet"> <div class="vector-toc-text"> <span class="vector-toc-numb">16</span> <span>Lähteet</span> </div> </a> <button aria-controls="toc-Lähteet-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Vaihda alaosio Lähteet</span> </button> <ul id="toc-Lähteet-sublist" class="vector-toc-list"> <li id="toc-Viitteet" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Viitteet"> <div class="vector-toc-text"> <span class="vector-toc-numb">16.1</span> <span>Viitteet</span> </div> </a> <ul id="toc-Viitteet-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Aiheesta_muualla" class="vector-toc-list-item vector-toc-level-1"> <a class="vector-toc-link" href="#Aiheesta_muualla"> <div class="vector-toc-text"> <span class="vector-toc-numb">17</span> <span>Aiheesta muualla</span> </div> </a> <ul id="toc-Aiheesta_muualla-sublist" class="vector-toc-list"> </ul> </li> </ul> </div> </div> </nav> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <nav aria-label="Sisällysluettelo" class="vector-toc-landmark"> <div id="vector-page-titlebar-toc" class="vector-dropdown vector-page-titlebar-toc vector-button-flush-left" title="Sisällysluettelo" > <input type="checkbox" id="vector-page-titlebar-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-titlebar-toc" class="vector-dropdown-checkbox " aria-label="Vaihda sisällysluettelo" > <label id="vector-page-titlebar-toc-label" for="vector-page-titlebar-toc-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-listBullet mw-ui-icon-wikimedia-listBullet"></span> <span class="vector-dropdown-label-text">Vaihda sisällysluettelo</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-titlebar-toc-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Java</span></h1> <div id="p-lang-btn" class="vector-dropdown mw-portlet mw-portlet-lang" > <input type="checkbox" id="p-lang-btn-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-lang-btn" class="vector-dropdown-checkbox mw-interlanguage-selector" aria-label="Mene artikkeliin toisella kielellä. Saatavilla 118 kielellä" > <label id="p-lang-btn-label" for="p-lang-btn-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--action-progressive mw-portlet-lang-heading-118" aria-hidden="true" ><span class="vector-icon mw-ui-icon-language-progressive mw-ui-icon-wikimedia-language-progressive"></span> <span class="vector-dropdown-label-text">118 kieltä</span> </label> <div class="vector-dropdown-content"> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="interlanguage-link interwiki-ace mw-list-item"><a href="https://ace.wikipedia.org/wiki/Java" title="Java — atšeh" lang="ace" hreflang="ace" data-title="Java" data-language-autonym="Acèh" data-language-local-name="atšeh" class="interlanguage-link-target"><span>Acèh</span></a></li><li class="interlanguage-link interwiki-af mw-list-item"><a href="https://af.wikipedia.org/wiki/Java_(programmeertaal)" title="Java (programmeertaal) — afrikaans" lang="af" hreflang="af" data-title="Java (programmeertaal)" data-language-autonym="Afrikaans" data-language-local-name="afrikaans" class="interlanguage-link-target"><span>Afrikaans</span></a></li><li class="interlanguage-link interwiki-am mw-list-item"><a href="https://am.wikipedia.org/wiki/%E1%8C%83%E1%89%AB" title="ጃቫ — amhara" lang="am" hreflang="am" data-title="ጃቫ" data-language-autonym="አማርኛ" data-language-local-name="amhara" class="interlanguage-link-target"><span>አማርኛ</span></a></li><li class="interlanguage-link interwiki-ar mw-list-item"><a href="https://ar.wikipedia.org/wiki/%D8%AC%D8%A7%D9%81%D8%A7_(%D9%84%D8%BA%D8%A9_%D8%A8%D8%B1%D9%85%D8%AC%D8%A9)" title="جافا (لغة برمجة) — arabia" lang="ar" hreflang="ar" data-title="جافا (لغة برمجة)" data-language-autonym="العربية" data-language-local-name="arabia" class="interlanguage-link-target"><span>العربية</span></a></li><li class="interlanguage-link interwiki-an mw-list-item"><a href="https://an.wikipedia.org/wiki/Luengache_de_programaci%C3%B3n_Java" title="Luengache de programación Java — aragonia" lang="an" hreflang="an" data-title="Luengache de programación Java" data-language-autonym="Aragonés" data-language-local-name="aragonia" class="interlanguage-link-target"><span>Aragonés</span></a></li><li class="interlanguage-link interwiki-as mw-list-item"><a href="https://as.wikipedia.org/wiki/%E0%A6%9C%E0%A6%BE%E0%A6%AD%E0%A6%BE" title="জাভা — assami" lang="as" hreflang="as" data-title="জাভা" data-language-autonym="অসমীয়া" data-language-local-name="assami" class="interlanguage-link-target"><span>অসমীয়া</span></a></li><li class="interlanguage-link interwiki-ast mw-list-item"><a href="https://ast.wikipedia.org/wiki/Java_(llinguaxe_de_programaci%C3%B3n)" title="Java (llinguaxe de programación) — asturia" lang="ast" hreflang="ast" data-title="Java (llinguaxe de programación)" data-language-autonym="Asturianu" data-language-local-name="asturia" class="interlanguage-link-target"><span>Asturianu</span></a></li><li class="interlanguage-link interwiki-az mw-list-item"><a href="https://az.wikipedia.org/wiki/Java" title="Java — azeri" lang="az" hreflang="az" data-title="Java" data-language-autonym="Azərbaycanca" data-language-local-name="azeri" class="interlanguage-link-target"><span>Azərbaycanca</span></a></li><li class="interlanguage-link interwiki-azb mw-list-item"><a href="https://azb.wikipedia.org/wiki/%D8%AC%D8%A7%D9%88%D8%A7" title="جاوا — South Azerbaijani" lang="azb" hreflang="azb" data-title="جاوا" data-language-autonym="تۆرکجه" data-language-local-name="South Azerbaijani" class="interlanguage-link-target"><span>تۆرکجه</span></a></li><li class="interlanguage-link interwiki-id mw-list-item"><a href="https://id.wikipedia.org/wiki/Java" title="Java — indonesia" lang="id" hreflang="id" data-title="Java" data-language-autonym="Bahasa Indonesia" data-language-local-name="indonesia" class="interlanguage-link-target"><span>Bahasa Indonesia</span></a></li><li class="interlanguage-link interwiki-ms mw-list-item"><a href="https://ms.wikipedia.org/wiki/Java" title="Java — malaiji" lang="ms" hreflang="ms" data-title="Java" data-language-autonym="Bahasa Melayu" data-language-local-name="malaiji" class="interlanguage-link-target"><span>Bahasa Melayu</span></a></li><li class="interlanguage-link interwiki-bn mw-list-item"><a href="https://bn.wikipedia.org/wiki/%E0%A6%9C%E0%A6%BE%E0%A6%AD%E0%A6%BE_(%E0%A6%AA%E0%A7%8D%E0%A6%B0%E0%A7%8B%E0%A6%97%E0%A7%8D%E0%A6%B0%E0%A6%BE%E0%A6%AE%E0%A6%BF%E0%A6%82_%E0%A6%AD%E0%A6%BE%E0%A6%B7%E0%A6%BE)" title="জাভা (প্রোগ্রামিং ভাষা) — bengali" lang="bn" hreflang="bn" data-title="জাভা (প্রোগ্রামিং ভাষা)" data-language-autonym="বাংলা" data-language-local-name="bengali" class="interlanguage-link-target"><span>বাংলা</span></a></li><li class="interlanguage-link interwiki-zh-min-nan mw-list-item"><a href="https://zh-min-nan.wikipedia.org/wiki/Java_(th%C3%AAng-sek_g%C3%AD-gi%C3%A2n)" title="Java (thêng-sek gí-giân) — min nan -kiina" lang="nan" hreflang="nan" data-title="Java (thêng-sek gí-giân)" data-language-autonym="閩南語 / Bân-lâm-gú" data-language-local-name="min nan -kiina" class="interlanguage-link-target"><span>閩南語 / Bân-lâm-gú</span></a></li><li class="interlanguage-link interwiki-be mw-list-item"><a href="https://be.wikipedia.org/wiki/Java_(%D0%BC%D0%BE%D0%B2%D0%B0_%D0%BF%D1%80%D0%B0%D0%B3%D1%80%D0%B0%D0%BC%D0%B0%D0%B2%D0%B0%D0%BD%D0%BD%D1%8F)" title="Java (мова праграмавання) — valkovenäjä" lang="be" hreflang="be" data-title="Java (мова праграмавання)" data-language-autonym="Беларуская" data-language-local-name="valkovenäjä" class="interlanguage-link-target"><span>Беларуская</span></a></li><li class="interlanguage-link interwiki-be-x-old mw-list-item"><a href="https://be-tarask.wikipedia.org/wiki/Java" title="Java — Belarusian (Taraškievica orthography)" lang="be-tarask" hreflang="be-tarask" data-title="Java" data-language-autonym="Беларуская (тарашкевіца)" data-language-local-name="Belarusian (Taraškievica orthography)" class="interlanguage-link-target"><span>Беларуская (тарашкевіца)</span></a></li><li class="interlanguage-link interwiki-bs mw-list-item"><a href="https://bs.wikipedia.org/wiki/Java_(programski_jezik)" title="Java (programski jezik) — bosnia" lang="bs" hreflang="bs" data-title="Java (programski jezik)" data-language-autonym="Bosanski" data-language-local-name="bosnia" class="interlanguage-link-target"><span>Bosanski</span></a></li><li class="interlanguage-link interwiki-bug mw-list-item"><a href="https://bug.wikipedia.org/wiki/Java" title="Java — bugi" lang="bug" hreflang="bug" data-title="Java" data-language-autonym="Basa Ugi" data-language-local-name="bugi" class="interlanguage-link-target"><span>Basa Ugi</span></a></li><li class="interlanguage-link interwiki-bg mw-list-item"><a href="https://bg.wikipedia.org/wiki/Java" title="Java — bulgaria" lang="bg" hreflang="bg" data-title="Java" data-language-autonym="Български" data-language-local-name="bulgaria" class="interlanguage-link-target"><span>Български</span></a></li><li class="interlanguage-link interwiki-ca mw-list-item"><a href="https://ca.wikipedia.org/wiki/Java_(llenguatge_de_programaci%C3%B3)" title="Java (llenguatge de programació) — katalaani" lang="ca" hreflang="ca" data-title="Java (llenguatge de programació)" data-language-autonym="Català" data-language-local-name="katalaani" class="interlanguage-link-target"><span>Català</span></a></li><li class="interlanguage-link interwiki-cv mw-list-item"><a href="https://cv.wikipedia.org/wiki/Java_(%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80_%D1%87%C4%95%D0%BB%D1%85%D0%B8)" title="Java (компьютер чĕлхи) — tšuvassi" lang="cv" hreflang="cv" data-title="Java (компьютер чĕлхи)" data-language-autonym="Чӑвашла" data-language-local-name="tšuvassi" class="interlanguage-link-target"><span>Чӑвашла</span></a></li><li class="interlanguage-link interwiki-cs mw-list-item"><a href="https://cs.wikipedia.org/wiki/Java_(programovac%C3%AD_jazyk)" title="Java (programovací jazyk) — tšekki" lang="cs" hreflang="cs" data-title="Java (programovací jazyk)" data-language-autonym="Čeština" data-language-local-name="tšekki" class="interlanguage-link-target"><span>Čeština</span></a></li><li class="interlanguage-link interwiki-co mw-list-item"><a href="https://co.wikipedia.org/wiki/Java" title="Java — korsika" lang="co" hreflang="co" data-title="Java" data-language-autonym="Corsu" data-language-local-name="korsika" class="interlanguage-link-target"><span>Corsu</span></a></li><li class="interlanguage-link interwiki-cy mw-list-item"><a href="https://cy.wikipedia.org/wiki/Java_(iaith_raglennu)" title="Java (iaith raglennu) — kymri" lang="cy" hreflang="cy" data-title="Java (iaith raglennu)" data-language-autonym="Cymraeg" data-language-local-name="kymri" class="interlanguage-link-target"><span>Cymraeg</span></a></li><li class="interlanguage-link interwiki-da mw-list-item"><a href="https://da.wikipedia.org/wiki/Java_(programmeringssprog)" title="Java (programmeringssprog) — tanska" lang="da" hreflang="da" data-title="Java (programmeringssprog)" data-language-autonym="Dansk" data-language-local-name="tanska" class="interlanguage-link-target"><span>Dansk</span></a></li><li class="interlanguage-link interwiki-ary mw-list-item"><a href="https://ary.wikipedia.org/wiki/%D8%AC%D8%A7%DA%A4%D8%A7" title="جاڤا — marokonarabia" lang="ary" hreflang="ary" data-title="جاڤا" data-language-autonym="الدارجة" data-language-local-name="marokonarabia" class="interlanguage-link-target"><span>الدارجة</span></a></li><li class="interlanguage-link interwiki-de mw-list-item"><a href="https://de.wikipedia.org/wiki/Java_(Programmiersprache)" title="Java (Programmiersprache) — saksa" lang="de" hreflang="de" data-title="Java (Programmiersprache)" data-language-autonym="Deutsch" data-language-local-name="saksa" class="interlanguage-link-target"><span>Deutsch</span></a></li><li class="interlanguage-link interwiki-et mw-list-item"><a href="https://et.wikipedia.org/wiki/Java" title="Java — viro" lang="et" hreflang="et" data-title="Java" data-language-autonym="Eesti" data-language-local-name="viro" class="interlanguage-link-target"><span>Eesti</span></a></li><li class="interlanguage-link interwiki-el mw-list-item"><a href="https://el.wikipedia.org/wiki/Java" title="Java — kreikka" lang="el" hreflang="el" data-title="Java" data-language-autonym="Ελληνικά" data-language-local-name="kreikka" class="interlanguage-link-target"><span>Ελληνικά</span></a></li><li class="interlanguage-link interwiki-en mw-list-item"><a href="https://en.wikipedia.org/wiki/Java_(programming_language)" title="Java (programming language) — englanti" lang="en" hreflang="en" data-title="Java (programming language)" data-language-autonym="English" data-language-local-name="englanti" class="interlanguage-link-target"><span>English</span></a></li><li class="interlanguage-link interwiki-es mw-list-item"><a href="https://es.wikipedia.org/wiki/Java_(lenguaje_de_programaci%C3%B3n)" title="Java (lenguaje de programación) — espanja" lang="es" hreflang="es" data-title="Java (lenguaje de programación)" data-language-autonym="Español" data-language-local-name="espanja" class="interlanguage-link-target"><span>Español</span></a></li><li class="interlanguage-link interwiki-eo mw-list-item"><a href="https://eo.wikipedia.org/wiki/Java_(programlingvo)" title="Java (programlingvo) — esperanto" lang="eo" hreflang="eo" data-title="Java (programlingvo)" data-language-autonym="Esperanto" data-language-local-name="esperanto" class="interlanguage-link-target"><span>Esperanto</span></a></li><li class="interlanguage-link interwiki-ext mw-list-item"><a href="https://ext.wikipedia.org/wiki/Java" title="Java — extremadura" lang="ext" hreflang="ext" data-title="Java" data-language-autonym="Estremeñu" data-language-local-name="extremadura" class="interlanguage-link-target"><span>Estremeñu</span></a></li><li class="interlanguage-link interwiki-eu mw-list-item"><a href="https://eu.wikipedia.org/wiki/Java_(programazio-lengoaia)" title="Java (programazio-lengoaia) — baski" lang="eu" hreflang="eu" data-title="Java (programazio-lengoaia)" data-language-autonym="Euskara" data-language-local-name="baski" class="interlanguage-link-target"><span>Euskara</span></a></li><li class="interlanguage-link interwiki-fa mw-list-item"><a href="https://fa.wikipedia.org/wiki/%D8%AC%D8%A7%D9%88%D8%A7" title="جاوا — persia" lang="fa" hreflang="fa" data-title="جاوا" data-language-autonym="فارسی" data-language-local-name="persia" class="interlanguage-link-target"><span>فارسی</span></a></li><li class="interlanguage-link interwiki-fr mw-list-item"><a href="https://fr.wikipedia.org/wiki/Java_(langage)" title="Java (langage) — ranska" lang="fr" hreflang="fr" data-title="Java (langage)" data-language-autonym="Français" data-language-local-name="ranska" class="interlanguage-link-target"><span>Français</span></a></li><li class="interlanguage-link interwiki-ga mw-list-item"><a href="https://ga.wikipedia.org/wiki/Java" title="Java — iiri" lang="ga" hreflang="ga" data-title="Java" data-language-autonym="Gaeilge" data-language-local-name="iiri" class="interlanguage-link-target"><span>Gaeilge</span></a></li><li class="interlanguage-link interwiki-gl mw-list-item"><a href="https://gl.wikipedia.org/wiki/Java_(linguaxe_de_programaci%C3%B3n)" title="Java (linguaxe de programación) — galicia" lang="gl" hreflang="gl" data-title="Java (linguaxe de programación)" data-language-autonym="Galego" data-language-local-name="galicia" class="interlanguage-link-target"><span>Galego</span></a></li><li class="interlanguage-link interwiki-gu mw-list-item"><a href="https://gu.wikipedia.org/wiki/%E0%AA%9C%E0%AA%BE%E0%AA%B5%E0%AA%BE_(%E0%AA%AA%E0%AB%8D%E0%AA%B0%E0%AB%8B%E0%AA%97%E0%AB%8D%E0%AA%B0%E0%AA%BE%E0%AA%AE%E0%AA%BF%E0%AA%82%E0%AA%97_%E0%AA%AD%E0%AA%BE%E0%AA%B7%E0%AA%BE)" title="જાવા (પ્રોગ્રામિંગ ભાષા) — gudžarati" lang="gu" hreflang="gu" data-title="જાવા (પ્રોગ્રામિંગ ભાષા)" data-language-autonym="ગુજરાતી" data-language-local-name="gudžarati" class="interlanguage-link-target"><span>ગુજરાતી</span></a></li><li class="interlanguage-link interwiki-hak mw-list-item"><a href="https://hak.wikipedia.org/wiki/Java" title="Java — hakka-kiina" lang="hak" hreflang="hak" data-title="Java" data-language-autonym="客家語 / Hak-kâ-ngî" data-language-local-name="hakka-kiina" class="interlanguage-link-target"><span>客家語 / Hak-kâ-ngî</span></a></li><li class="interlanguage-link interwiki-ko mw-list-item"><a href="https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_%EC%96%B8%EC%96%B4)" title="자바 (프로그래밍 언어) — korea" lang="ko" hreflang="ko" data-title="자바 (프로그래밍 언어)" data-language-autonym="한국어" data-language-local-name="korea" class="interlanguage-link-target"><span>한국어</span></a></li><li class="interlanguage-link interwiki-ha mw-list-item"><a href="https://ha.wikipedia.org/wiki/Java_programming_language" title="Java programming language — hausa" lang="ha" hreflang="ha" data-title="Java programming language" data-language-autonym="Hausa" data-language-local-name="hausa" class="interlanguage-link-target"><span>Hausa</span></a></li><li class="interlanguage-link interwiki-hy mw-list-item"><a href="https://hy.wikipedia.org/wiki/%D5%8B%D5%A1%D5%BE%D5%A1" title="Ջավա — armenia" lang="hy" hreflang="hy" data-title="Ջավա" data-language-autonym="Հայերեն" data-language-local-name="armenia" class="interlanguage-link-target"><span>Հայերեն</span></a></li><li class="interlanguage-link interwiki-hi mw-list-item"><a href="https://hi.wikipedia.org/wiki/%E0%A4%9C%E0%A4%BE%E0%A4%B5%E0%A4%BE_(%E0%A4%AA%E0%A5%8D%E0%A4%B0%E0%A5%8B%E0%A4%97%E0%A5%8D%E0%A4%B0%E0%A4%BE%E0%A4%AE%E0%A4%BF%E0%A4%82%E0%A4%97_%E0%A4%AD%E0%A4%BE%E0%A4%B7%E0%A4%BE)" title="जावा (प्रोग्रामिंग भाषा) — hindi" lang="hi" hreflang="hi" data-title="जावा (प्रोग्रामिंग भाषा)" data-language-autonym="हिन्दी" data-language-local-name="hindi" class="interlanguage-link-target"><span>हिन्दी</span></a></li><li class="interlanguage-link interwiki-hr mw-list-item"><a href="https://hr.wikipedia.org/wiki/Java_(programski_jezik)" title="Java (programski jezik) — kroatia" lang="hr" hreflang="hr" data-title="Java (programski jezik)" data-language-autonym="Hrvatski" data-language-local-name="kroatia" class="interlanguage-link-target"><span>Hrvatski</span></a></li><li class="interlanguage-link interwiki-io mw-list-item"><a href="https://io.wikipedia.org/wiki/Java_(programifo-linguo)" title="Java (programifo-linguo) — ido" lang="io" hreflang="io" data-title="Java (programifo-linguo)" data-language-autonym="Ido" data-language-local-name="ido" class="interlanguage-link-target"><span>Ido</span></a></li><li class="interlanguage-link interwiki-ia mw-list-item"><a href="https://ia.wikipedia.org/wiki/Java_(linguage_de_programmation)" title="Java (linguage de programmation) — interlingua" lang="ia" hreflang="ia" data-title="Java (linguage de programmation)" data-language-autonym="Interlingua" data-language-local-name="interlingua" class="interlanguage-link-target"><span>Interlingua</span></a></li><li class="interlanguage-link interwiki-is mw-list-item"><a href="https://is.wikipedia.org/wiki/Java_(forritunarm%C3%A1l)" title="Java (forritunarmál) — islanti" lang="is" hreflang="is" data-title="Java (forritunarmál)" data-language-autonym="Íslenska" data-language-local-name="islanti" class="interlanguage-link-target"><span>Íslenska</span></a></li><li class="interlanguage-link interwiki-it mw-list-item"><a href="https://it.wikipedia.org/wiki/Java_(linguaggio_di_programmazione)" title="Java (linguaggio di programmazione) — italia" lang="it" hreflang="it" data-title="Java (linguaggio di programmazione)" data-language-autonym="Italiano" data-language-local-name="italia" class="interlanguage-link-target"><span>Italiano</span></a></li><li class="interlanguage-link interwiki-he mw-list-item"><a href="https://he.wikipedia.org/wiki/%D7%92%27%D7%90%D7%95%D7%95%D7%94_(%D7%A9%D7%A4%D7%AA_%D7%AA%D7%9B%D7%A0%D7%95%D7%AA)" title="ג'אווה (שפת תכנות) — heprea" lang="he" hreflang="he" data-title="ג'אווה (שפת תכנות)" data-language-autonym="עברית" data-language-local-name="heprea" class="interlanguage-link-target"><span>עברית</span></a></li><li class="interlanguage-link interwiki-kn mw-list-item"><a href="https://kn.wikipedia.org/wiki/%E0%B2%9C%E0%B2%BE%E0%B2%B5%E0%B2%BE" title="ಜಾವಾ — kannada" lang="kn" hreflang="kn" data-title="ಜಾವಾ" data-language-autonym="ಕನ್ನಡ" data-language-local-name="kannada" class="interlanguage-link-target"><span>ಕನ್ನಡ</span></a></li><li class="interlanguage-link interwiki-ka mw-list-item"><a href="https://ka.wikipedia.org/wiki/%E1%83%AF%E1%83%90%E1%83%95%E1%83%90_(%E1%83%9E%E1%83%A0%E1%83%9D%E1%83%92%E1%83%A0%E1%83%90%E1%83%9B%E1%83%98%E1%83%A0%E1%83%94%E1%83%91%E1%83%98%E1%83%A1_%E1%83%94%E1%83%9C%E1%83%90)" title="ჯავა (პროგრამირების ენა) — georgia" lang="ka" hreflang="ka" data-title="ჯავა (პროგრამირების ენა)" data-language-autonym="ქართული" data-language-local-name="georgia" class="interlanguage-link-target"><span>ქართული</span></a></li><li class="interlanguage-link interwiki-kk mw-list-item"><a href="https://kk.wikipedia.org/wiki/Java_(%D0%B1%D0%B0%D2%93%D0%B4%D0%B0%D1%80%D0%BB%D0%B0%D0%BC%D0%B0%D0%BB%D0%B0%D1%83_%D1%82%D1%96%D0%BB%D1%96)" title="Java (бағдарламалау тілі) — kazakki" lang="kk" hreflang="kk" data-title="Java (бағдарламалау тілі)" data-language-autonym="Қазақша" data-language-local-name="kazakki" class="interlanguage-link-target"><span>Қазақша</span></a></li><li class="interlanguage-link interwiki-ky mw-list-item"><a href="https://ky.wikipedia.org/wiki/Java" title="Java — kirgiisi" lang="ky" hreflang="ky" data-title="Java" data-language-autonym="Кыргызча" data-language-local-name="kirgiisi" class="interlanguage-link-target"><span>Кыргызча</span></a></li><li class="interlanguage-link interwiki-sw mw-list-item"><a href="https://sw.wikipedia.org/wiki/Java_(lugha_ya_programu)" title="Java (lugha ya programu) — swahili" lang="sw" hreflang="sw" data-title="Java (lugha ya programu)" data-language-autonym="Kiswahili" data-language-local-name="swahili" class="interlanguage-link-target"><span>Kiswahili</span></a></li><li class="interlanguage-link interwiki-ht mw-list-item"><a href="https://ht.wikipedia.org/wiki/Java_(enf%C3%B2matik)" title="Java (enfòmatik) — haiti" lang="ht" hreflang="ht" data-title="Java (enfòmatik)" data-language-autonym="Kreyòl ayisyen" data-language-local-name="haiti" class="interlanguage-link-target"><span>Kreyòl ayisyen</span></a></li><li class="interlanguage-link interwiki-ku mw-list-item"><a href="https://ku.wikipedia.org/wiki/Java_(ziman%C3%AA_bernamesaziy%C3%AA)" title="Java (zimanê bernamesaziyê) — kurdi" lang="ku" hreflang="ku" data-title="Java (zimanê bernamesaziyê)" data-language-autonym="Kurdî" data-language-local-name="kurdi" class="interlanguage-link-target"><span>Kurdî</span></a></li><li class="interlanguage-link interwiki-la mw-list-item"><a href="https://la.wikipedia.org/wiki/Java_(lingua_programmandi)" title="Java (lingua programmandi) — latina" lang="la" hreflang="la" data-title="Java (lingua programmandi)" data-language-autonym="Latina" data-language-local-name="latina" class="interlanguage-link-target"><span>Latina</span></a></li><li class="interlanguage-link interwiki-lv mw-list-item"><a href="https://lv.wikipedia.org/wiki/Java_(programm%C4%93%C5%A1anas_valoda)" title="Java (programmēšanas valoda) — latvia" lang="lv" hreflang="lv" data-title="Java (programmēšanas valoda)" data-language-autonym="Latviešu" data-language-local-name="latvia" class="interlanguage-link-target"><span>Latviešu</span></a></li><li class="interlanguage-link interwiki-lt mw-list-item"><a href="https://lt.wikipedia.org/wiki/Java_(programavimo_kalba)" title="Java (programavimo kalba) — liettua" lang="lt" hreflang="lt" data-title="Java (programavimo kalba)" data-language-autonym="Lietuvių" data-language-local-name="liettua" class="interlanguage-link-target"><span>Lietuvių</span></a></li><li class="interlanguage-link interwiki-lij mw-list-item"><a href="https://lij.wikipedia.org/wiki/Java_(lenguazzo)" title="Java (lenguazzo) — liguuri" lang="lij" hreflang="lij" data-title="Java (lenguazzo)" data-language-autonym="Ligure" data-language-local-name="liguuri" class="interlanguage-link-target"><span>Ligure</span></a></li><li class="interlanguage-link interwiki-lmo mw-list-item"><a href="https://lmo.wikipedia.org/wiki/Java" title="Java — lombardi" lang="lmo" hreflang="lmo" data-title="Java" data-language-autonym="Lombard" data-language-local-name="lombardi" class="interlanguage-link-target"><span>Lombard</span></a></li><li class="interlanguage-link interwiki-hu mw-list-item"><a href="https://hu.wikipedia.org/wiki/Java_(programoz%C3%A1si_nyelv)" title="Java (programozási nyelv) — unkari" lang="hu" hreflang="hu" data-title="Java (programozási nyelv)" data-language-autonym="Magyar" data-language-local-name="unkari" class="interlanguage-link-target"><span>Magyar</span></a></li><li class="interlanguage-link interwiki-mk mw-list-item"><a href="https://mk.wikipedia.org/wiki/Java_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%81%D0%BA%D0%B8_%D1%98%D0%B0%D0%B7%D0%B8%D0%BA)" title="Java (програмски јазик) — makedonia" lang="mk" hreflang="mk" data-title="Java (програмски јазик)" data-language-autonym="Македонски" data-language-local-name="makedonia" class="interlanguage-link-target"><span>Македонски</span></a></li><li class="interlanguage-link interwiki-ml badge-Q17437796 badge-featuredarticle mw-list-item" title="suositeltu artikkeli"><a href="https://ml.wikipedia.org/wiki/%E0%B4%9C%E0%B4%BE%E0%B4%B5_(%E0%B4%AA%E0%B5%8D%E0%B4%B0%E0%B5%8B%E0%B4%97%E0%B5%8D%E0%B4%B0%E0%B4%BE%E0%B4%AE%E0%B4%BF%E0%B4%99%E0%B5%8D_%E0%B4%AD%E0%B4%BE%E0%B4%B7)" title="ജാവ (പ്രോഗ്രാമിങ് ഭാഷ) — malajalam" lang="ml" hreflang="ml" data-title="ജാവ (പ്രോഗ്രാമിങ് ഭാഷ)" data-language-autonym="മലയാളം" data-language-local-name="malajalam" class="interlanguage-link-target"><span>മലയാളം</span></a></li><li class="interlanguage-link interwiki-mr mw-list-item"><a href="https://mr.wikipedia.org/wiki/%E0%A4%9C%E0%A4%BE%E0%A4%B5%E0%A4%BE_(%E0%A4%86%E0%A4%9C%E0%A5%8D%E0%A4%9E%E0%A4%BE%E0%A4%B5%E0%A4%B2%E0%A5%80_%E0%A4%AD%E0%A4%BE%E0%A4%B7%E0%A4%BE)" title="जावा (आज्ञावली भाषा) — marathi" lang="mr" hreflang="mr" data-title="जावा (आज्ञावली भाषा)" data-language-autonym="मराठी" data-language-local-name="marathi" class="interlanguage-link-target"><span>मराठी</span></a></li><li class="interlanguage-link interwiki-arz mw-list-item"><a href="https://arz.wikipedia.org/wiki/%D8%AC%D8%A7%D9%81%D8%A7_(%D9%84%D8%BA%D8%A9_%D8%A8%D8%B1%D9%85%D8%AC%D9%87)" title="جافا (لغة برمجه) — egyptinarabia" lang="arz" hreflang="arz" data-title="جافا (لغة برمجه)" data-language-autonym="مصرى" data-language-local-name="egyptinarabia" class="interlanguage-link-target"><span>مصرى</span></a></li><li class="interlanguage-link interwiki-min mw-list-item"><a href="https://min.wikipedia.org/wiki/Java" title="Java — minangkabau" lang="min" hreflang="min" data-title="Java" data-language-autonym="Minangkabau" data-language-local-name="minangkabau" class="interlanguage-link-target"><span>Minangkabau</span></a></li><li class="interlanguage-link interwiki-cdo mw-list-item"><a href="https://cdo.wikipedia.org/wiki/Java" title="Java — Mindong" lang="cdo" hreflang="cdo" data-title="Java" data-language-autonym="閩東語 / Mìng-dĕ̤ng-ngṳ̄" data-language-local-name="Mindong" class="interlanguage-link-target"><span>閩東語 / Mìng-dĕ̤ng-ngṳ̄</span></a></li><li class="interlanguage-link interwiki-mn mw-list-item"><a href="https://mn.wikipedia.org/wiki/Java" title="Java — mongoli" lang="mn" hreflang="mn" data-title="Java" data-language-autonym="Монгол" data-language-local-name="mongoli" class="interlanguage-link-target"><span>Монгол</span></a></li><li class="interlanguage-link interwiki-my mw-list-item"><a href="https://my.wikipedia.org/wiki/%E1%80%82%E1%80%BB%E1%80%AC%E1%80%97%E1%80%AC%E1%80%B8_(%E1%80%95%E1%80%9B%E1%80%AD%E1%80%AF%E1%80%82%E1%80%9B%E1%80%99%E1%80%BA%E1%80%99%E1%80%84%E1%80%BA%E1%80%B8%E1%80%98%E1%80%AC%E1%80%9E%E1%80%AC%E1%80%85%E1%80%80%E1%80%AC%E1%80%B8)" title="ဂျာဗား (ပရိုဂရမ်မင်းဘာသာစကား) — burma" lang="my" hreflang="my" data-title="ဂျာဗား (ပရိုဂရမ်မင်းဘာသာစကား)" data-language-autonym="မြန်မာဘာသာ" data-language-local-name="burma" class="interlanguage-link-target"><span>မြန်မာဘာသာ</span></a></li><li class="interlanguage-link interwiki-fj mw-list-item"><a href="https://fj.wikipedia.org/wiki/Java" title="Java — fidži" lang="fj" hreflang="fj" data-title="Java" data-language-autonym="Na Vosa Vakaviti" data-language-local-name="fidži" class="interlanguage-link-target"><span>Na Vosa Vakaviti</span></a></li><li class="interlanguage-link interwiki-nl mw-list-item"><a href="https://nl.wikipedia.org/wiki/Java_(programmeertaal)" title="Java (programmeertaal) — hollanti" lang="nl" hreflang="nl" data-title="Java (programmeertaal)" data-language-autonym="Nederlands" data-language-local-name="hollanti" class="interlanguage-link-target"><span>Nederlands</span></a></li><li class="interlanguage-link interwiki-ne mw-list-item"><a href="https://ne.wikipedia.org/wiki/%E0%A4%9C%E0%A4%BE%E0%A4%AD%E0%A4%BE" title="जाभा — nepali" lang="ne" hreflang="ne" data-title="जाभा" data-language-autonym="नेपाली" data-language-local-name="nepali" class="interlanguage-link-target"><span>नेपाली</span></a></li><li class="interlanguage-link interwiki-ja mw-list-item"><a href="https://ja.wikipedia.org/wiki/Java" title="Java — japani" lang="ja" hreflang="ja" data-title="Java" data-language-autonym="日本語" data-language-local-name="japani" class="interlanguage-link-target"><span>日本語</span></a></li><li class="interlanguage-link interwiki-no mw-list-item"><a href="https://no.wikipedia.org/wiki/Java_(programmeringsspr%C3%A5k)" title="Java (programmeringsspråk) — norjan bokmål" lang="nb" hreflang="nb" data-title="Java (programmeringsspråk)" data-language-autonym="Norsk bokmål" data-language-local-name="norjan bokmål" class="interlanguage-link-target"><span>Norsk bokmål</span></a></li><li class="interlanguage-link interwiki-nn mw-list-item"><a href="https://nn.wikipedia.org/wiki/Programmeringsspr%C3%A5ket_Java" title="Programmeringsspråket Java — norjan nynorsk" lang="nn" hreflang="nn" data-title="Programmeringsspråket Java" data-language-autonym="Norsk nynorsk" data-language-local-name="norjan nynorsk" class="interlanguage-link-target"><span>Norsk nynorsk</span></a></li><li class="interlanguage-link interwiki-oc mw-list-item"><a href="https://oc.wikipedia.org/wiki/Java_(lengatge)" title="Java (lengatge) — oksitaani" lang="oc" hreflang="oc" data-title="Java (lengatge)" data-language-autonym="Occitan" data-language-local-name="oksitaani" class="interlanguage-link-target"><span>Occitan</span></a></li><li class="interlanguage-link interwiki-or mw-list-item"><a href="https://or.wikipedia.org/wiki/%E0%AC%9C%E0%AC%BE%E0%AC%AD%E0%AC%BE_(%E0%AC%AA%E0%AD%8D%E0%AC%B0%E0%AD%8B%E0%AC%97%E0%AD%8D%E0%AC%B0%E0%AC%BE%E0%AC%AE%E0%AC%BF%E0%AC%82_%E0%AC%AD%E0%AC%BE%E0%AC%B7%E0%AC%BE)" title="ଜାଭା (ପ୍ରୋଗ୍ରାମିଂ ଭାଷା) — orija" lang="or" hreflang="or" data-title="ଜାଭା (ପ୍ରୋଗ୍ରାମିଂ ଭାଷା)" data-language-autonym="ଓଡ଼ିଆ" data-language-local-name="orija" class="interlanguage-link-target"><span>ଓଡ଼ିଆ</span></a></li><li class="interlanguage-link interwiki-uz mw-list-item"><a href="https://uz.wikipedia.org/wiki/Java" title="Java — uzbekki" lang="uz" hreflang="uz" data-title="Java" data-language-autonym="Oʻzbekcha / ўзбекча" data-language-local-name="uzbekki" class="interlanguage-link-target"><span>Oʻzbekcha / ўзбекча</span></a></li><li class="interlanguage-link interwiki-pa mw-list-item"><a href="https://pa.wikipedia.org/wiki/%E0%A8%9C%E0%A8%BE%E0%A8%B5%E0%A8%BE_(%E0%A8%AA%E0%A9%8D%E0%A8%B0%E0%A9%8B%E0%A8%97%E0%A8%B0%E0%A8%BE%E0%A8%AE%E0%A8%BF%E0%A9%B0%E0%A8%97_%E0%A8%AD%E0%A8%BE%E0%A8%B8%E0%A8%BC%E0%A8%BE)" title="ਜਾਵਾ (ਪ੍ਰੋਗਰਾਮਿੰਗ ਭਾਸ਼ਾ) — pandžabi" lang="pa" hreflang="pa" data-title="ਜਾਵਾ (ਪ੍ਰੋਗਰਾਮਿੰਗ ਭਾਸ਼ਾ)" data-language-autonym="ਪੰਜਾਬੀ" data-language-local-name="pandžabi" class="interlanguage-link-target"><span>ਪੰਜਾਬੀ</span></a></li><li class="interlanguage-link interwiki-pnb mw-list-item"><a href="https://pnb.wikipedia.org/wiki/%D8%AC%D8%A7%D9%88%D8%A7_(%D9%BE%D8%B1%D9%88%DA%AF%D8%B1%D8%A7%D9%85%D9%86%DA%AF_%D8%B2%D8%A8%D8%A7%D9%86)" title="جاوا (پروگرامنگ زبان) — Western Punjabi" lang="pnb" hreflang="pnb" data-title="جاوا (پروگرامنگ زبان)" data-language-autonym="پنجابی" data-language-local-name="Western Punjabi" class="interlanguage-link-target"><span>پنجابی</span></a></li><li class="interlanguage-link interwiki-pl mw-list-item"><a href="https://pl.wikipedia.org/wiki/Java" title="Java — puola" lang="pl" hreflang="pl" data-title="Java" data-language-autonym="Polski" data-language-local-name="puola" class="interlanguage-link-target"><span>Polski</span></a></li><li class="interlanguage-link interwiki-pt mw-list-item"><a href="https://pt.wikipedia.org/wiki/Java_(linguagem_de_programa%C3%A7%C3%A3o)" title="Java (linguagem de programação) — portugali" lang="pt" hreflang="pt" data-title="Java (linguagem de programação)" data-language-autonym="Português" data-language-local-name="portugali" class="interlanguage-link-target"><span>Português</span></a></li><li class="interlanguage-link interwiki-kaa mw-list-item"><a href="https://kaa.wikipedia.org/wiki/Java_(programmalast%C4%B1r%C4%B1w_tili)" title="Java (programmalastırıw tili) — karakalpakki" lang="kaa" hreflang="kaa" data-title="Java (programmalastırıw tili)" data-language-autonym="Qaraqalpaqsha" data-language-local-name="karakalpakki" class="interlanguage-link-target"><span>Qaraqalpaqsha</span></a></li><li class="interlanguage-link interwiki-ro mw-list-item"><a href="https://ro.wikipedia.org/wiki/Java_(limbaj_de_programare)" title="Java (limbaj de programare) — romania" lang="ro" hreflang="ro" data-title="Java (limbaj de programare)" data-language-autonym="Română" data-language-local-name="romania" class="interlanguage-link-target"><span>Română</span></a></li><li class="interlanguage-link interwiki-qu mw-list-item"><a href="https://qu.wikipedia.org/wiki/Java_(wakichiy_simi)" title="Java (wakichiy simi) — ketšua" lang="qu" hreflang="qu" data-title="Java (wakichiy simi)" data-language-autonym="Runa Simi" data-language-local-name="ketšua" class="interlanguage-link-target"><span>Runa Simi</span></a></li><li class="interlanguage-link interwiki-ru mw-list-item"><a href="https://ru.wikipedia.org/wiki/Java" title="Java — venäjä" lang="ru" hreflang="ru" data-title="Java" data-language-autonym="Русский" data-language-local-name="venäjä" class="interlanguage-link-target"><span>Русский</span></a></li><li class="interlanguage-link interwiki-sah mw-list-item"><a href="https://sah.wikipedia.org/wiki/Java" title="Java — jakuutti" lang="sah" hreflang="sah" data-title="Java" data-language-autonym="Саха тыла" data-language-local-name="jakuutti" class="interlanguage-link-target"><span>Саха тыла</span></a></li><li class="interlanguage-link interwiki-sa mw-list-item"><a href="https://sa.wikipedia.org/wiki/%E0%A4%9C%E0%A4%BE%E0%A4%B5%E0%A4%BE" title="जावा — sanskrit" lang="sa" hreflang="sa" data-title="जावा" data-language-autonym="संस्कृतम्" data-language-local-name="sanskrit" class="interlanguage-link-target"><span>संस्कृतम्</span></a></li><li class="interlanguage-link interwiki-sq mw-list-item"><a href="https://sq.wikipedia.org/wiki/Java_(gjuh%C3%AB_programimi)" title="Java (gjuhë programimi) — albania" lang="sq" hreflang="sq" data-title="Java (gjuhë programimi)" data-language-autonym="Shqip" data-language-local-name="albania" class="interlanguage-link-target"><span>Shqip</span></a></li><li class="interlanguage-link interwiki-si mw-list-item"><a href="https://si.wikipedia.org/wiki/%E0%B6%A2%E0%B7%8F%E0%B7%80%E0%B7%8F_(%E0%B6%9A%E0%B7%8A%E2%80%8D%E0%B6%BB%E0%B6%B8%E0%B6%BD%E0%B7%9A%E0%B6%9B%E0%B6%B1_%E0%B6%B7%E0%B7%8F%E0%B7%82%E0%B7%8F%E0%B7%80)" title="ජාවා (ක්රමලේඛන භාෂාව) — sinhala" lang="si" hreflang="si" data-title="ජාවා (ක්රමලේඛන භාෂාව)" data-language-autonym="සිංහල" data-language-local-name="sinhala" class="interlanguage-link-target"><span>සිංහල</span></a></li><li class="interlanguage-link interwiki-simple mw-list-item"><a href="https://simple.wikipedia.org/wiki/Java_(programming_language)" title="Java (programming language) — Simple English" lang="en-simple" hreflang="en-simple" data-title="Java (programming language)" data-language-autonym="Simple English" data-language-local-name="Simple English" class="interlanguage-link-target"><span>Simple English</span></a></li><li class="interlanguage-link interwiki-sd mw-list-item"><a href="https://sd.wikipedia.org/wiki/%D8%AC%D8%A7%D9%88%D8%A7_(%D9%BE%D8%B1%D9%88%DA%AF%D8%B1%D8%A7%D9%85%D9%86%DA%AF_%D8%AC%D9%8A_%D9%BB%D9%88%D9%84%D9%8A)" title="جاوا (پروگرامنگ جي ٻولي) — sindhi" lang="sd" hreflang="sd" data-title="جاوا (پروگرامنگ جي ٻولي)" data-language-autonym="سنڌي" data-language-local-name="sindhi" class="interlanguage-link-target"><span>سنڌي</span></a></li><li class="interlanguage-link interwiki-sk mw-list-item"><a href="https://sk.wikipedia.org/wiki/Java_(programovac%C3%AD_jazyk)" title="Java (programovací jazyk) — slovakki" lang="sk" hreflang="sk" data-title="Java (programovací jazyk)" data-language-autonym="Slovenčina" data-language-local-name="slovakki" class="interlanguage-link-target"><span>Slovenčina</span></a></li><li class="interlanguage-link interwiki-sl mw-list-item"><a href="https://sl.wikipedia.org/wiki/Java_(programski_jezik)" title="Java (programski jezik) — sloveeni" lang="sl" hreflang="sl" data-title="Java (programski jezik)" data-language-autonym="Slovenščina" data-language-local-name="sloveeni" class="interlanguage-link-target"><span>Slovenščina</span></a></li><li class="interlanguage-link interwiki-so mw-list-item"><a href="https://so.wikipedia.org/wiki/Java_(luuqada_borograaminta)" title="Java (luuqada borograaminta) — somali" lang="so" hreflang="so" data-title="Java (luuqada borograaminta)" data-language-autonym="Soomaaliga" data-language-local-name="somali" class="interlanguage-link-target"><span>Soomaaliga</span></a></li><li class="interlanguage-link interwiki-ckb mw-list-item"><a href="https://ckb.wikipedia.org/wiki/%D8%AC%D8%A7%DA%A4%D8%A7_(%D8%B2%D9%85%D8%A7%D9%86%DB%8C_%D8%A8%DB%95%D8%B1%D9%86%D8%A7%D9%85%DB%95%D8%B3%D8%A7%D8%B2%DB%8C)" title="جاڤا (زمانی بەرنامەسازی) — soranî" lang="ckb" hreflang="ckb" data-title="جاڤا (زمانی بەرنامەسازی)" data-language-autonym="کوردی" data-language-local-name="soranî" class="interlanguage-link-target"><span>کوردی</span></a></li><li class="interlanguage-link interwiki-sr mw-list-item"><a href="https://sr.wikipedia.org/wiki/Java_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D1%81%D0%BA%D0%B8_%D1%98%D0%B5%D0%B7%D0%B8%D0%BA)" title="Java (програмски језик) — serbia" lang="sr" hreflang="sr" data-title="Java (програмски језик)" data-language-autonym="Српски / srpski" data-language-local-name="serbia" class="interlanguage-link-target"><span>Српски / srpski</span></a></li><li class="interlanguage-link interwiki-sh mw-list-item"><a href="https://sh.wikipedia.org/wiki/Java_(programski_jezik)" title="Java (programski jezik) — serbokroaatti" lang="sh" hreflang="sh" data-title="Java (programski jezik)" data-language-autonym="Srpskohrvatski / српскохрватски" data-language-local-name="serbokroaatti" class="interlanguage-link-target"><span>Srpskohrvatski / српскохрватски</span></a></li><li class="interlanguage-link interwiki-sv mw-list-item"><a href="https://sv.wikipedia.org/wiki/Java_(programspr%C3%A5k)" title="Java (programspråk) — ruotsi" lang="sv" hreflang="sv" data-title="Java (programspråk)" data-language-autonym="Svenska" data-language-local-name="ruotsi" class="interlanguage-link-target"><span>Svenska</span></a></li><li class="interlanguage-link interwiki-tl mw-list-item"><a href="https://tl.wikipedia.org/wiki/Java_(wikang_pamprograma)" title="Java (wikang pamprograma) — tagalog" lang="tl" hreflang="tl" data-title="Java (wikang pamprograma)" data-language-autonym="Tagalog" data-language-local-name="tagalog" class="interlanguage-link-target"><span>Tagalog</span></a></li><li class="interlanguage-link interwiki-ta mw-list-item"><a href="https://ta.wikipedia.org/wiki/%E0%AE%9C%E0%AE%BE%E0%AE%B5%E0%AE%BE_(%E0%AE%A8%E0%AE%BF%E0%AE%B0%E0%AE%B2%E0%AE%BE%E0%AE%95%E0%AF%8D%E0%AE%95_%E0%AE%AE%E0%AF%8A%E0%AE%B4%E0%AE%BF)" title="ஜாவா (நிரலாக்க மொழி) — tamili" lang="ta" hreflang="ta" data-title="ஜாவா (நிரலாக்க மொழி)" data-language-autonym="தமிழ்" data-language-local-name="tamili" class="interlanguage-link-target"><span>தமிழ்</span></a></li><li class="interlanguage-link interwiki-kab mw-list-item"><a href="https://kab.wikipedia.org/wiki/Java_(tutlayt)" title="Java (tutlayt) — kabyyli" lang="kab" hreflang="kab" data-title="Java (tutlayt)" data-language-autonym="Taqbaylit" data-language-local-name="kabyyli" class="interlanguage-link-target"><span>Taqbaylit</span></a></li><li class="interlanguage-link interwiki-tt mw-list-item"><a href="https://tt.wikipedia.org/wiki/Java" title="Java — tataari" lang="tt" hreflang="tt" data-title="Java" data-language-autonym="Татарча / tatarça" data-language-local-name="tataari" class="interlanguage-link-target"><span>Татарча / tatarça</span></a></li><li class="interlanguage-link interwiki-te mw-list-item"><a href="https://te.wikipedia.org/wiki/%E0%B0%9C%E0%B0%BE%E0%B0%B5%E0%B0%BE" title="జావా — telugu" lang="te" hreflang="te" data-title="జావా" data-language-autonym="తెలుగు" data-language-local-name="telugu" class="interlanguage-link-target"><span>తెలుగు</span></a></li><li class="interlanguage-link interwiki-th mw-list-item"><a href="https://th.wikipedia.org/wiki/%E0%B8%A0%E0%B8%B2%E0%B8%A9%E0%B8%B2%E0%B8%88%E0%B8%B2%E0%B8%A7%E0%B8%B2" title="ภาษาจาวา — thai" lang="th" hreflang="th" data-title="ภาษาจาวา" data-language-autonym="ไทย" data-language-local-name="thai" class="interlanguage-link-target"><span>ไทย</span></a></li><li class="interlanguage-link interwiki-vi mw-list-item"><a href="https://vi.wikipedia.org/wiki/Java_(ng%C3%B4n_ng%E1%BB%AF_l%E1%BA%ADp_tr%C3%ACnh)" title="Java (ngôn ngữ lập trình) — vietnam" lang="vi" hreflang="vi" data-title="Java (ngôn ngữ lập trình)" data-language-autonym="Tiếng Việt" data-language-local-name="vietnam" class="interlanguage-link-target"><span>Tiếng Việt</span></a></li><li class="interlanguage-link interwiki-tg mw-list-item"><a href="https://tg.wikipedia.org/wiki/Java" title="Java — tadžikki" lang="tg" hreflang="tg" data-title="Java" data-language-autonym="Тоҷикӣ" data-language-local-name="tadžikki" class="interlanguage-link-target"><span>Тоҷикӣ</span></a></li><li class="interlanguage-link interwiki-tr mw-list-item"><a href="https://tr.wikipedia.org/wiki/Java" title="Java — turkki" lang="tr" hreflang="tr" data-title="Java" data-language-autonym="Türkçe" data-language-local-name="turkki" class="interlanguage-link-target"><span>Türkçe</span></a></li><li class="interlanguage-link interwiki-uk mw-list-item"><a href="https://uk.wikipedia.org/wiki/Java" title="Java — ukraina" lang="uk" hreflang="uk" data-title="Java" data-language-autonym="Українська" data-language-local-name="ukraina" class="interlanguage-link-target"><span>Українська</span></a></li><li class="interlanguage-link interwiki-ur mw-list-item"><a href="https://ur.wikipedia.org/wiki/%D8%AC%D8%A7%D9%88%D8%A7_(%D9%BE%D8%B1%D9%88%DA%AF%D8%B1%D8%A7%D9%85%D9%86%DA%AF_%D8%B2%D8%A8%D8%A7%D9%86)" title="جاوا (پروگرامنگ زبان) — urdu" lang="ur" hreflang="ur" data-title="جاوا (پروگرامنگ زبان)" data-language-autonym="اردو" data-language-local-name="urdu" class="interlanguage-link-target"><span>اردو</span></a></li><li class="interlanguage-link interwiki-vec mw-list-item"><a href="https://vec.wikipedia.org/wiki/Java_(lenguajo_de_programasion)" title="Java (lenguajo de programasion) — venetsia" lang="vec" hreflang="vec" data-title="Java (lenguajo de programasion)" data-language-autonym="Vèneto" data-language-local-name="venetsia" class="interlanguage-link-target"><span>Vèneto</span></a></li><li class="interlanguage-link interwiki-zh-classical mw-list-item"><a href="https://zh-classical.wikipedia.org/wiki/%E7%88%AA%E5%93%87%E7%A8%8B%E5%BC%8F%E8%AA%9E" title="爪哇程式語 — klassinen kiina" lang="lzh" hreflang="lzh" data-title="爪哇程式語" data-language-autonym="文言" data-language-local-name="klassinen kiina" class="interlanguage-link-target"><span>文言</span></a></li><li class="interlanguage-link interwiki-war mw-list-item"><a href="https://war.wikipedia.org/wiki/Java_(linggwahe_hin_pagprograma)" title="Java (linggwahe hin pagprograma) — waray" lang="war" hreflang="war" data-title="Java (linggwahe hin pagprograma)" data-language-autonym="Winaray" data-language-local-name="waray" class="interlanguage-link-target"><span>Winaray</span></a></li><li class="interlanguage-link interwiki-wuu mw-list-item"><a href="https://wuu.wikipedia.org/wiki/Java" title="Java — wu-kiina" lang="wuu" hreflang="wuu" data-title="Java" data-language-autonym="吴语" data-language-local-name="wu-kiina" class="interlanguage-link-target"><span>吴语</span></a></li><li class="interlanguage-link interwiki-zh-yue mw-list-item"><a href="https://zh-yue.wikipedia.org/wiki/Java_(%E7%A8%8B%E5%BC%8F%E8%AA%9E%E8%A8%80)" title="Java (程式語言) — kantoninkiina" lang="yue" hreflang="yue" data-title="Java (程式語言)" data-language-autonym="粵語" data-language-local-name="kantoninkiina" class="interlanguage-link-target"><span>粵語</span></a></li><li class="interlanguage-link interwiki-bat-smg mw-list-item"><a href="https://bat-smg.wikipedia.org/wiki/Java" title="Java — samogiitti" lang="sgs" hreflang="sgs" data-title="Java" data-language-autonym="Žemaitėška" data-language-local-name="samogiitti" class="interlanguage-link-target"><span>Žemaitėška</span></a></li><li class="interlanguage-link interwiki-zh mw-list-item"><a href="https://zh.wikipedia.org/wiki/Java" title="Java — kiina" lang="zh" hreflang="zh" data-title="Java" data-language-autonym="中文" data-language-local-name="kiina" class="interlanguage-link-target"><span>中文</span></a></li> </ul> <div class="after-portlet after-portlet-lang"><span class="wb-langlinks-edit wb-langlinks-link"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q251#sitelinks-wikipedia" title="Muokkaa kieltenvälisiä linkkejä" class="wbc-editpage">Muokkaa linkkejä</a></span></div> </div> </div> </div> </header> <div class="vector-page-toolbar"> <div class="vector-page-toolbar-container"> <div id="left-navigation"> <nav aria-label="Nimiavaruudet"> <div id="p-associated-pages" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-associated-pages" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-nstab-main" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Java" title="Näytä sisältösivu [c]" accesskey="c"><span>Artikkeli</span></a></li><li id="ca-talk" class="vector-tab-noicon mw-list-item"><a href="/wiki/Keskustelu:Java" rel="discussion" title="Keskustele sisällöstä [t]" accesskey="t"><span>Keskustelu</span></a></li> </ul> </div> </div> <div id="vector-variants-dropdown" class="vector-dropdown emptyPortlet" > <input type="checkbox" id="vector-variants-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-variants-dropdown" class="vector-dropdown-checkbox " aria-label="Valitse kieliversio" > <label id="vector-variants-dropdown-label" for="vector-variants-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">suomi</span> </label> <div class="vector-dropdown-content"> <div id="p-variants" class="vector-menu mw-portlet mw-portlet-variants emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> </div> </div> </nav> </div> <div id="right-navigation" class="vector-collapsible"> <nav aria-label="Näkymät"> <div id="p-views" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-views" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Java"><span>Lue</span></a></li><li id="ca-ve-edit" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Java&veaction=edit" title="Muokkaa tätä sivua [v]" accesskey="v"><span>Muokkaa</span></a></li><li id="ca-edit" class="collapsible vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Java&action=edit" title="Muokkaa tämän sivun lähdekoodia [e]" accesskey="e"><span>Muokkaa wikitekstiä</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Java&action=history" title="Sivun aikaisemmat versiot [h]" accesskey="h"><span>Näytä historia</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Sivutyökalut"> <div id="vector-page-tools-dropdown" class="vector-dropdown vector-page-tools-dropdown" > <input type="checkbox" id="vector-page-tools-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-tools-dropdown" class="vector-dropdown-checkbox " aria-label="Työkalut" > <label id="vector-page-tools-dropdown-label" for="vector-page-tools-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">Työkalut</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-tools-unpinned-container" class="vector-unpinned-container"> <div id="vector-page-tools" class="vector-page-tools vector-pinnable-element"> <div class="vector-pinnable-header vector-page-tools-pinnable-header vector-pinnable-header-unpinned" data-feature-name="page-tools-pinned" data-pinnable-element-id="vector-page-tools" data-pinned-container-id="vector-page-tools-pinned-container" data-unpinned-container-id="vector-page-tools-unpinned-container" > <div class="vector-pinnable-header-label">Työkalut</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">siirrä sivupalkkiin</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">piilota</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="Lisää valintoja" > <div class="vector-menu-heading"> Toiminnot </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-more-view" class="selected vector-more-collapsible-item mw-list-item"><a href="/wiki/Java"><span>Lue</span></a></li><li id="ca-more-ve-edit" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Java&veaction=edit" title="Muokkaa tätä sivua [v]" accesskey="v"><span>Muokkaa</span></a></li><li id="ca-more-edit" class="collapsible vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Java&action=edit" title="Muokkaa tämän sivun lähdekoodia [e]" accesskey="e"><span>Muokkaa wikitekstiä</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Java&action=history"><span>Näytä historia</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> Yleinen </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Toiminnot:T%C3%A4nne_viittaavat_sivut/Java" title="Lista sivuista, jotka viittaavat tänne [j]" accesskey="j"><span>Tänne viittaavat sivut</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Toiminnot:Linkitetyt_muutokset/Java" rel="nofollow" title="Viimeisimmät muokkaukset sivuissa, joille viitataan tältä sivulta [k]" accesskey="k"><span>Linkitettyjen sivujen muutokset</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=Java&oldid=23144845" title="Ikilinkki tämän sivun tähän versioon"><span>Ikilinkki</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=Java&action=info" title="Enemmän tietoa tästä sivusta"><span>Sivun tiedot</span></a></li><li id="t-cite" class="mw-list-item"><a href="/w/index.php?title=Toiminnot:Viittaus&page=Java&id=23144845&wpFormIdentifier=titleform" title="Tietoa tämän sivun lainaamisesta"><span>Viitetiedot</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Toiminnot:UrlShortener&url=https%3A%2F%2Ffi.wikipedia.org%2Fwiki%2FJava"><span>Lyhennä URL-osoite</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Toiminnot:QrCode&url=https%3A%2F%2Ffi.wikipedia.org%2Fwiki%2FJava"><span>Lataa QR-koodi</span></a></li> </ul> </div> </div> <div id="p-coll-print_export" class="vector-menu mw-portlet mw-portlet-coll-print_export" > <div class="vector-menu-heading"> Tulosta/vie </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="coll-download-as-rl" class="mw-list-item"><a href="/w/index.php?title=Toiminnot:DownloadAsPdf&page=Java&action=show-download-screen"><span>Lataa PDF-tiedostona</span></a></li><li id="t-print" class="mw-list-item"><a href="/w/index.php?title=Java&printable=yes" title="Tulostettava versio [p]" accesskey="p"><span>Tulostettava versio</span></a></li> </ul> </div> </div> <div id="p-wikibase-otherprojects" class="vector-menu mw-portlet mw-portlet-wikibase-otherprojects" > <div class="vector-menu-heading"> Muissa hankkeissa </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="wb-otherproject-link wb-otherproject-commons mw-list-item"><a href="https://commons.wikimedia.org/wiki/Category:Java_(programming_language)" hreflang="en"><span>Wikimedia Commons</span></a></li><li class="wb-otherproject-link wb-otherproject-wikibooks mw-list-item"><a href="https://fi.wikibooks.org/wiki/Java" hreflang="fi"><span>Wikikirjasto</span></a></li><li id="t-wikibase" class="wb-otherproject-link wb-otherproject-wikibase-dataitem mw-list-item"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q251" title="Linkki yhdistettyyn keskustietovaraston kohteeseen [g]" accesskey="g"><span>Wikidata-kohde</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> </div> </div> </div> <div class="vector-column-end"> <div class="vector-sticky-pinned-container"> <nav class="vector-page-tools-landmark" aria-label="Sivutyökalut"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="Ulkoasu"> <div id="vector-appearance-pinned-container" class="vector-pinned-container"> <div id="vector-appearance" class="vector-appearance vector-pinnable-element"> <div class="vector-pinnable-header vector-appearance-pinnable-header vector-pinnable-header-pinned" data-feature-name="appearance-pinned" data-pinnable-element-id="vector-appearance" data-pinned-container-id="vector-appearance-pinned-container" data-unpinned-container-id="vector-appearance-unpinned-container" > <div class="vector-pinnable-header-label">Ulkoasu</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">siirrä sivupalkkiin</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">piilota</button> </div> </div> </div> </nav> </div> </div> <div id="bodyContent" class="vector-body" aria-labelledby="firstHeading" data-mw-ve-target-container> <div class="vector-body-before-content"> <div class="mw-indicators"> </div> <div id="siteSub" class="noprint">Wikipediasta</div> </div> <div id="contentSub"><div id="mw-content-subtitle"></div></div> <div id="mw-content-text" class="mw-body-content"><div class="mw-content-ltr mw-parser-output" lang="fi" dir="ltr"><div class="noprint article-about-box" style="background-color: var( --background-color-neutral-subtle, #f9f9f9 ); color: var( --color-emphasized, #000000 ); font-size: 95%; padding: 0.2em 0.2em 0.2em 2em; margin-bottom: 1em; border: 1px solid #b6b6b6;"><i>Tämä artikkeli käsittelee ohjelmointikieltä. Muita merkityksiä on <a href="/wiki/Jaava_(t%C3%A4smennyssivu)" class="mw-disambig" title="Jaava (täsmennyssivu)">täsmennyssivulla</a>.</i></div> <table class="infobox" border="0" cellspacing="0" cellpadding="2" style="font-size:92%;border: 1px solid #AAAAAA; text-align:left; line-height:1.2em; border-radius:4px; border-collapse: collapse; width: 22em;"> <tbody><tr><th class="" colspan="2" style="text-align:center; font-size:15px; border-bottom: 1px solid #AAAAAA; background-color: #AABBCC; color: #000000;"><big>Java</big></th> </tr> <tr><td class="" colspan="2" style="text-align: center;"><span typeof="mw:File"><a href="/wiki/Tiedosto:Javan_logo.svg" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/fi/thumb/3/35/Javan_logo.svg/120px-Javan_logo.svg.png" decoding="async" width="100" height="183" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/fi/thumb/3/35/Javan_logo.svg/250px-Javan_logo.svg.png 1.5x" data-file-width="300" data-file-height="550" /></a></span></td> </tr> <tr><td class="" colspan="1" style="vertical-align: top; font-weight:bold;"><a href="/wiki/Ohjelmointiparadigma" title="Ohjelmointiparadigma">Paradigma</a></td> <td class="" colspan="1" style="vertical-align: top;"> <a href="/wiki/Olio-ohjelmointi" title="Olio-ohjelmointi">olio-ohjelmointi</a></td> </tr> <tr><td class="" colspan="1" style="vertical-align: top; font-weight:bold;"><a href="/wiki/Tyyppij%C3%A4rjestelm%C3%A4" title="Tyyppijärjestelmä">Tyypitys</a></td> <td class="" colspan="1" style="vertical-align: top;"> vahva, staattinen</td> </tr> <tr><td class="" colspan="1" style="vertical-align: top; font-weight:bold;">Yleinen suoritusmalli</td> <td class="" colspan="1" style="vertical-align: top;"> tulkattava</td> </tr> <tr><td class="" colspan="1" style="vertical-align: top; font-weight:bold;">Muistinhallinta</td> <td class="" colspan="1" style="vertical-align: top;"> automaattinen</td> </tr> <tr><td class="" colspan="1" style="vertical-align: top; font-weight:bold;">Julkaistu</td> <td class="" colspan="1" style="vertical-align: top;"> <a href="/wiki/1995" title="1995">1995</a></td> </tr> <tr><td class="" colspan="1" style="vertical-align: top; font-weight:bold;">Kehittäjä</td> <td class="" colspan="1" style="vertical-align: top;"> <a href="/wiki/Eclipse_Foundation" class="mw-redirect" title="Eclipse Foundation">Eclipse Foundation</a> (aiemmin <a href="/wiki/Oracle_Corporation" title="Oracle Corporation">Oracle Corporation</a> ja <a href="/wiki/Sun_Microsystems" title="Sun Microsystems">Sun Microsystems</a>)</td> </tr> <tr><td class="" colspan="1" style="vertical-align: top; font-weight:bold;">Vakaa versio</td> <td class="" colspan="1" style="vertical-align: top;"> Java Standard Edition 20<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup> (18. tammikuuta 2022)</td> </tr> <tr><td class="" colspan="1" style="vertical-align: top; font-weight:bold;">Merkittävimmät toteutukset</td> <td class="" colspan="1" style="vertical-align: top;"> Oracle, IBM ja muut</td> </tr> <tr><td class="" colspan="1" style="vertical-align: top; font-weight:bold;">Vaikutteet</td> <td class="" colspan="1" style="vertical-align: top;"> <a href="/wiki/Objective-C" title="Objective-C">Objective-C</a>, <a href="/wiki/C%2B%2B" title="C++">C++</a>, <a href="/wiki/Smalltalk" title="Smalltalk">Smalltalk</a>, <a href="/wiki/Eiffel_(ohjelmointikieli)" title="Eiffel (ohjelmointikieli)">Eiffel</a></td> </tr> <tr><td class="" colspan="1" style="vertical-align: top; font-weight:bold;">Vaikuttanut</td> <td class="" colspan="1" style="vertical-align: top;"> <a href="/wiki/C_sharp" title="C sharp">C#</a>, <a href="/wiki/D_(ohjelmointikieli)" title="D (ohjelmointikieli)">D</a>, <a href="/wiki/J_sharp" title="J sharp">J#</a>, <a href="/wiki/PHP" title="PHP">PHP</a></td> </tr> <tr><td class="" colspan="1" style="vertical-align: top; font-weight:bold;">Käyttöjärjestelmä</td> <td class="" colspan="1" style="vertical-align: top;"> alustariippumaton</td> </tr> <tr><td class="" colspan="1" style="vertical-align: top; font-weight:bold;">Verkkosivu</td> <td class="" colspan="1" style="vertical-align: top;"> <a rel="nofollow" class="external free" href="https://www.oracle.com/java/technologies/">https://www.oracle.com/java/technologies/</a></td> </tr> <tr><td class="" colspan="1" style="vertical-align: top; font-weight:bold;">Uutisryhmä</td> <td class="" colspan="1" style="vertical-align: top;"> comp.lang.java</td> </tr><tr class="infobox_tests" style="display:none"><td><span class="wd_tests"><a class="external text" href="https://tools.wmflabs.org/fiwiki-tools/testit/INFOBOX/OK">Infobox OK</a></span></td></tr> </tbody></table> <p><b>Java</b> on <a href="/wiki/Sun_Microsystems" title="Sun Microsystems">Sun Microsystemsin</a> kehittämä teknologiaperhe ja ohjelmistoalusta, johon kuuluu muun muassa laitteistoriippumaton korkean tason, luokkapohjainen, <a href="/wiki/Olio-ohjelmointi" title="Olio-ohjelmointi">oliopohjainen</a> <a href="/wiki/Ohjelmointikieli" title="Ohjelmointikieli">ohjelmointikieli</a>, joka on suunniteltu siten, että siinä on mahdollisimman vähän toteutusriippuvuutta, sekä ajoaikainen ympäristö <a href="/wiki/Virtuaalikone" title="Virtuaalikone">virtuaalikoneineen</a> ja <a href="/wiki/Kirjasto_(tietotekniikka)" title="Kirjasto (tietotekniikka)">luokkakirjastoineen</a>. Java (ohjelmointikieli) on yleiskäyttöinen ohjelmointikieli, jonka avulla ohjelmoijat voivat kirjoittaa koodia, joka kääntäessä toimii kaikilla Javaa tukevilla alustoilla ilman tarvetta kääntää koodia uudelleen. </p><p>Java-sovellukset on tyypillisesti käännetty <a href="/wiki/Tavukoodi" title="Tavukoodi">tavukoodiin</a>, joka voi toimia missä tahansa <a href="/wiki/Java-virtuaalikone" title="Java-virtuaalikone">Java-virtuaalikoneessa</a> (JVM) taustalla olevasta tietokoneen arkkitehtuurista riippumatta. Javan syntaksi on samanlainen kuin <a href="/wiki/C_(ohjelmointikieli)" title="C (ohjelmointikieli)">C</a>:n ja <a href="/wiki/C%2B%2B" title="C++">C++</a>:n, mutta siinä on vähemmän matalan tason toimintoja kuin kummallakaan. Java-ajonaika tarjoaa dynaamisia ominaisuuksia (kuten reflektointia ja ajonaikaisen koodin muokkausta), joita ei yleensä ole saatavilla perinteisillä käännetyillä kielillä. </p><p>Vuodesta 2019 lähtien Java oli <a href="/wiki/GitHub" title="GitHub">GitHubin</a> mukaan yksi suosituimmista käytössä olevista ohjelmointikielistä, erityisesti <a href="/wiki/Web-sovellus" title="Web-sovellus"> asiakas-palvelin-verkkosovelluksissa</a>, ja kehittäjiä on raportoitu 9 miljoonalla. Alun perin kaupallisesti lisensoitu Java on vuodesta 2007 alkaen ollut <a href="/wiki/Vapaa_ohjelmisto" title="Vapaa ohjelmisto">vapaan</a> <a href="/wiki/GNU_GPL" class="mw-redirect" title="GNU GPL">GNU GPL</a> -lisenssin alainen. Vuonna 2006 arvioitiin, että Java-alusta on käytössä noin 3,8 miljardissa laitteessa jossakin muodossa.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup> </p><p>Javan ollessa yksi suosituimmista ohjelmointikielistä, sen avulla tehty paljon tunnettuja ja menestyneitä sovelluksia. Lisäksi Javaa on käytetty paljon mm. graafisissa käyttöliittymissä, yrityssovelluksissa, tieteessä ja sulautetuissa järjestelmissä, joista viimeisimmästä esimerkiksi SIM-kortit ja Blu-ray soittimet ovat laajassa käytössä.<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> </p> <meta property="mw:PageProp/toc" /> <div class="mw-heading mw-heading2"><h2 id="Nimi">Nimi</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=1" title="Muokkaa osiota Nimi" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=1" title="Muokkaa osion lähdekoodia: Nimi"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Java nimettiin tammikuussa 1995 Yhdysvalloissa <i>Javaksi</i> kutsutun <a href="/wiki/Kahvi" title="Kahvi">kahvilaadun</a> mukaan, jota tuotetaan <a href="/wiki/Jaava" title="Jaava">Jaavalla</a> <a href="/wiki/Indonesia" title="Indonesia">Indonesiassa</a>. Ennen nimenmuutosta kehittäjät olivat käyttäneet uudesta kielestään nimeä <i>Oak</i> ja sitä ennen nimeä <i>Greentalk</i>. Nimeä <i>Oak</i> ei kuitenkaan voinut enää käyttää, koska <a href="/w/index.php?title=Oak_Technologies&action=edit&redlink=1" class="new" title="Oak Technologies (sivua ei ole)">Oak Technologies</a> -yhtiöllä oli siihen oikeudet. Uusi nimi valittiin palaverissa kymmenen ehdotuksen joukosta, joista äänestysvaiheeseen pääsivät myös nimet <i>DNA</i> ja <i>Silk</i>. Nimen <i>Java</i> ehdottajasta on nykyisin erilaisia käsityksiä.<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> </p><p>Ohjelmointikieli <a href="/wiki/JavaScript" title="JavaScript">JavaScript</a> nimettiin myöhemmin Javan mukaan, mutta sitä yhdistää Javaan lähinnä vain syntaksi. </p> <div class="mw-heading mw-heading2"><h2 id="Historia">Historia</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=2" title="Muokkaa osiota Historia" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=2" title="Muokkaa osion lähdekoodia: Historia"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>James Gosling, Mike Sheridan, and Patrick Naughton aloittivat Java-ohjelmointikieliprojektin kesäkuussa vuonna 1991. Java oli alun perin suunniteltu interaktiiviselle televisiolle, mutta se oli liian kehittynyttä sen aikaiselle kaapelitelevisioteollisuudelle. Java sai alkuperäisen nimensä Oak erään Goslingin toimiston ulkopuolella olevan tammipuun mukaan. Myöhemmin projektia kutsuttiin nimellä Green, jonka jälkeen se uudelleennimettiin Javaksi erään indonesialaisen kahvin, Java coffeen, mukaan. Gosling suunnitteli Javan käyttäen C/C++ tyylistä syntaksia, joka olisi jo tunnettu systeemi ja sovellus ohjelmoijille. </p><p>Sun Microsystems julkaisivat ensimmäisen julkisen version nimellä Java 1.0 vuonna 1996. Se lupasi 'write once, run anywhere' (WORA)-toiminnallisuuden, tarjoten maksuttomia ajoaikoja suosituilla alustoilla. Kohtuullisen turvallinen ja sisältäen konfiguroitavan tietoturvan, Java sallii verkko- ja tiedostonkäyttörajoituksia. Pian merkittävät verkkoselaimet sisällyttivät mahdollisuuden ajaa Java-sovelmia nettisivuilla, ja Javasta tuli nopeasti suosittu ohjelmointikieli. Arthur van Hoff uudelleenkirjoitti Java-kielellä Java 1.0 kääntäjän noudattamaan tarkasti Java 1.0:n kielispesifikaatioita. Java 2:n tulon myötä (alun perin julkaistu nimellä J2SE 1.2 joulukuussa vuonna 1998-1999) uudet versiot sisälsivät useita kokoonpanoja, jotka oli rakennettu erityyppisille alustoille. J2EE sisälsi teknologioita ja rajapintoja yrityssovelluksiin, jotka tyypillisesti ajettiin palvelinympäristössä, kun taas J2ME sisälsi optimoituja rajapintoja mobiilisovelluksille. Työpöytäversiolle annettiin uusi nimi J2SE. Vuonna 2006, Sun uudelleennimesi uudet J2-versiot Java EE:ksi, Java ME:ksi ja Java SE:ksi markkinointisyistä. </p><p>Vuonna 1997 Sun Microsystems otti yhteyttä ISO/ICE JTC 1 Standartia hallinnoivaan elimeen ja myöhemmin Ecna internationaaliin formalisoidakseen Javan, mutta lopetti pian prosessin.<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup> Java säilyi standardina, jota ohjataan ja hallitaan Java-yhteisöprosessin kautta. Kerran Sun Microsystems teki suurimman osan sen Java-implemaatioista saatavaksi ilman maksua, vaikka ne olivat heidän omaa ohjelmistoa. Sun Microsystems sai tuloja myymällä lisenssejä erikoistetuille ohjelmistoille, kuten Java Enterprise System. </p><p>Marraskuussa 2006 Sun Microsystems julkaisi suuren osan Java-virtuaalikoneestaan (JVM) vapaana ja avoimena lähdekoodina (FOSS) GPL-2.0 -lisenssin ehtojen mukaisesti. Toukokuussa 2007 Sun Microsystems valmisteli prosessin loppuun ja teki JVM:n ytimen koodin saataville ilmaisena avoimen lähdekoodin jakelun ehtojen mukaisesti lukuun ottamatta pientä osaa koodista, josta Sun Microsystems:illä itsellään ei ollut tekijänoikeutta.<sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup> </p><p>Sun Microsystemsin varapuheenjohtaja Rich Green sanoi, että Sunin ihanteellinen rooli Javan suhteen oli evankelista. Oracle Corporationin hankittua Sun Microsystemsin vuosina 2009–2010 Oracle on kuvannut itseään Java-teknologian ylläpitäjänä, jolla on jatkuva sitoutuminen yhteisön osallistumiseen ja avoimuuteen. Tämä ei estänyt Oraclea nostamasta pian sen jälkeen oikeusjuttua Googlen käyttäessä Javaa Android SDK:ssa (ks. Android-kohta). </p><p>Javan käyttö Android-pohjaisissa ohjelmissa johti oikeudenkäyntiprosessiin Oraclen ja Googlen välillä vuonna 2012. Toukokuussa vuonna 2012 San Franciscolainen tuomaristo huomasi, että jos tekijänoikeudet koskivat myös ohjelmointirajapintoja, niin Google olisi rikkonut Oraclen tekijänoikeuksia käyttämällä Javaa Android-laitteissa. Käräjäoikeuden William Alsup määräsi 31. toukokuuta 2012 ettei ohjelmointirajapintoja voi suojata tekijänoikeuksilla, mutta tämä laki evättiin myöhemmin U.S. Court of Appeals for the Federal Circuitin puolesta toukokuussa 2014. Google todettiin syyttömäksi toukokuun 26, 2016, vetoamalla Java-ohjelmointirajapintojen reiluun käyttöön Androidissa. Oikeudenkäynti kuitenkin avattiin uudelleen maaliskuussa 2018, tällä kertaa San Franciscon tuomioistuimessa. Google haastoi uudet syytökset vuonna 2019 ja oikeudenkäynti totesi Googlen jälleen syyttömäksi huhtikuussa 2021. Oikeus ei muokannut tekijänoikeuslakeja ohjelmointirajapintojen ympärillä tapahtuman seurauksena, vaan sanoi näiden olevan tapauskohtaisia. </p><p>James Gosling erosi Oraclelta 2. huhtikuuta 2010.<sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="Periaatteet">Periaatteet</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=3" title="Muokkaa osiota Periaatteet" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=3" title="Muokkaa osion lähdekoodia: Periaatteet"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Kun Java-kieltä luotiin, siinä oli viisi ensisijaista tavoitetta: </p><p>1. Kielen on oltava yksinkertainen, objekti-pohjainen ja tutun oloinen. </p><p>2. Sen on oltava vahva/tukeva sekä turvallinen. </p><p>3. Sen on oltava arkkitehtuurisesti neutraali ja helposti siirrettävä. </p><p>Yksi Javan tavoitteista oli siirrettävyys, mikä tarkoittaa, että Java-alustalle kirjoitettujen ohjelmien on toimittava samalla tavalla kaikenlaisilla laitteisto- ja käyttöjärjestelmäyhdistelmällä. Tämä saavutetaan kääntämällä Java-kielinen koodi välimuotoon, jota kutsutaan tavukoodiksi, sen sijaan että se käännettäisiin suoraan arkkitehtuurikohtaiseksi konekoodiksi. Javan tavukoodin ohjeet ovat konekoodin kaltaisia, mutta ne suoritetaan virtuaalikoneella, joka on kirjoitettu erityisesti sille isäntälaitteistolle. Loppukäyttäjät käyttävät yleisesti Java Runtime Environment -ohjelmaa, joka on asennettu heidän laitteeseensa itsenäisiä Java-sovelluksia varten tai web-selainta Java-apletteja varten. </p><p>Universaalin tavukoodin käyttö tekee ohjelmien siirrettävyydestä helppoa. Kuitenkin tavukoodin tulkitsemisesta konekoodiksi aiheutuva ylimääräinen suoritusaika tekee tulkittavista ohjelmista lähes aina hitaampia kuin suorat suoritettavat ohjelmat. Itse Java on alustariippumaton ja sopeutuu käyttöalustaan käyttämällä sille tarkoitettua Java Virtual Machine (JVM), joka muuntaa Java-tavukoodin alustan konekielelle. </p><p>4. Sen täytyy suorittaa/toimia korkealla suorituskyvyllä. </p><p>5. Sen on oltava tulkittu, säikeitetty ja dynaaminen. </p><p><b>Java ohjelmoinnin neljä periaatetta</b> </p><p>Java-ohjelmointikielessä on neljä keskeistä periaatetta, jotka tunnetaan nimellä "Java-ohjelmoinnin neljä periaatetta" tai "The Four Pillars of Object-Oriented Programming". Nämä periaatteet ovat: </p> <ol><li>Kapselointi (encapsulation)</li> <li>Periytyminen (inheritance)</li> <li>Polymorfismi (polymorphism)</li> <li>Abstraktio (abstraction)</li></ol> <p>Kapselointi tarkoittaa luokkien käyttämistä ohjelman eri osien eristämiseen toisistaan, mikä helpottaa koodin ylläpidettävyyttä ja selkeyttä. Kapselointi mahdollistaa sen, että ohjelman osat ovat riippumattomia toisistaan, ja muutokset voidaan tehdä vain yhteen luokkaan kerrallaan ilman että tarvitsee huolehtia muista osista. </p><p>Periytyminen on periaate, joka mahdollistaa uusien luokkien luomisen jo olemassa olevien luokkien pohjalta. Tämä säästää aikaa ja vaivaa, sillä jo olemassa olevia toimintoja ei tarvitse kirjoittaa uudelleen uutta luokkaa varten. </p><p>Polymorfirsmi tarkoittaa eri tyyppisten olioiden käyttämistä yhden ja saman nimen alla, mikä vähentää koodin monimutkaisuutta ja tekee sen ylläpidosta helpompaa. Polymorfismi mahdollistaa ohjelman osien vaihtamisen toisiin, kunhan ne toteuttavat saman rajapinnan. </p><p>Abstraktio tarkoittaa oleellisten yksityiskohtien keskittymistä ja epäolennaisten yksityiskohtien poistamista koodista, mikä helpottaa sen ylläpidettävyyttä. Abstraktio mahdollistaa koodin yksinkertaisuuden säilyttämisen ja helpottaa sen ymmärtämistä. </p><p>Nämä neljä periaatetta ovat tärkeitä Java-ohjelmoinnissa, sillä ne tekevät koodista jäsennellympää, ymmärrettävämpää ja ylläpidettävämpää. </p> <div class="mw-heading mw-heading2"><h2 id="Yleistä"><span id="Yleist.C3.A4"></span>Yleistä</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=4" title="Muokkaa osiota Yleistä" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=4" title="Muokkaa osion lähdekoodia: Yleistä"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Java-ohjelmointikielen kehittivät <a href="/wiki/Bill_Joy" title="Bill Joy">Bill Joy</a> ja <a href="/wiki/James_Gosling" title="James Gosling">James Gosling</a> kollegoineen Sun Microsystemsillä 1990-luvun alussa. <a href="/wiki/JDK" class="mw-redirect" title="JDK">JDK</a> 1.0 (Java Development kit) julkaistiin syksyllä 1995. Se soveltui www-sivulle luotavien applettien tekemiseen, mikä nosti Javan nopeasti ohjelmointimaailman kuumimmaksi puheenaiheeksi. Keväällä 1997 julkaistiin JDK 1.1, jossa oli muuttunut erityisesti käyttöliittymän ohjelmointi oliomaisempaan suuntaan. JDK 1.2 julkaistiin loppuvuonna 1998, ja se sisälsi uuden JFC-luokkakirjaston <i>(<a href="/w/index.php?title=Java_Foundation_Classes&action=edit&redlink=1" class="new" title="Java Foundation Classes (sivua ei ole)">Java Foundation Classes</a>)</i>, jossa mukaan tuli mm. <a href="/wiki/Swing_(Java)" title="Swing (Java)">Swing</a> käyttöliittymien luominen ja monipuolisia tietorakenneluokkia. </p><p>Java-kielen 1990-luvun lopulla saavuttaman suuren suosion takana ovat laitteistoriippumattomuuden lisäksi kielen <a href="/wiki/C%2B%2B" title="C++">C++</a>-kieltä läheisesti muistuttava, mutta helpommin omaksuttavaksi suunniteltu <a href="/wiki/Formaali_kielioppi" title="Formaali kielioppi">kielioppi</a>, <a href="/wiki/Olio-ohjelmointi" title="Olio-ohjelmointi">oliopohjaisuus</a> ja virtuaalikoneen mukana tuleva, erittäin kattava <a href="/wiki/Standardikirjasto" title="Standardikirjasto">standardikirjasto</a>. Myös muistinhallintaa on helpotettu ottamalla käyttöön <a href="/wiki/Automaattinen_roskienker%C3%A4ys" title="Automaattinen roskienkeräys">roskienkeräin</a> (engl. <i>garbage collector</i>), joka vapauttaa muistia kun sitä ei enää tarvita. Java kuuluu ohjelmointikieliin, joissa on käytössä ns. <a href="/wiki/Tyyppij%C3%A4rjestelm%C3%A4" title="Tyyppijärjestelmä">vahva tyypitys</a>. Tämä tarkoittaa sitä, että jokaisella <a href="/wiki/Muuttuja_(ohjelmointi)" title="Muuttuja (ohjelmointi)">muuttujalla</a> on tyyppi ja muuttujat voivat saada ainoastaan tyyppinsä mukaisia arvoja. </p><p>Toisin kuin tavanomaisen kielet, Javan lähdekoodia ei käännetä suoraan konekielelle, vaan <a href="/wiki/Tavukoodi" title="Tavukoodi">tavukoodiksi</a>, joka suoritetaan <a href="/wiki/Virtuaalikone" title="Virtuaalikone">virtuaalikoneessa</a>.<sup id="cite_ref-10" class="reference"><a href="#cite_note-10"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup> Koska Java-ohjelmat ajetaan virtuaalikoneessa, ne eivät normaalisti pysty vaikuttamaan suoraan muihin <a href="/wiki/Prosessi_(tietotekniikka)" title="Prosessi (tietotekniikka)">prosesseihin</a>, eivätkä pääse virtuaalikoneelle määrätyn <a href="/wiki/Hiekkalaatikko_(tietotekniikka)" title="Hiekkalaatikko (tietotekniikka)">hiekkalaatikon</a> ulkopuolelle vaan esimerkiksi tiedostoja käsitellessä käskyt kulkevat virtuaalikoneen läpi, joka varmistaa että käsky on turvallisuusasetusten mukainen. Java-ohjelmat ovat mm. näiden rajoitusten vuoksi tavanomaisia konekieliohjelmia turvallisempia, mutta samalla hieman hitaampia. </p><p>Javan standardikirjasto sisältää valmiita toteutuksia useille asioille, kuten graafisen käyttöliittymäkirjaston, rinnakkaisuuden hallinnan, verkko-ominaisuudet ja eräät muut rajapinnat, jotka toisissa kielissä ovat käyttöjärjestelmäriippuvaisia tai kolmansien osapuolten kirjastojen varassa. </p><p>Javaa markkinoitiin alun perin Web-käyttöön, selaimen sisällä ajettavia <a href="/wiki/Java-sovelma" title="Java-sovelma">sovelmia</a> varten. Se löi kuitenkin varsinaisesti läpi palvelinkäytössä, dynaamisia www-sivuja luotaessa (<a href="/w/index.php?title=JavaServer_Faces&action=edit&redlink=1" class="new" title="JavaServer Faces (sivua ei ole)">JSF</a>, <a href="/wiki/JavaServer_Pages" title="JavaServer Pages">JSP</a>, <a href="/w/index.php?title=Servlet&action=edit&redlink=1" class="new" title="Servlet (sivua ei ole)">servlet</a>), raskaissa palvelinsovelluksissa (<a href="/wiki/Java_EE" class="mw-redirect" title="Java EE">Java EE</a>) ja <a href="/wiki/K%C3%A4nnykk%C3%A4" title="Kännykkä">kännyköissä</a> ja <a href="/wiki/Taskutietokone" title="Taskutietokone">taskutietokoneissa</a> (<a href="/wiki/Java_ME" title="Java ME">Java ME</a>). Yleisyytensä ja ilmaisuutensa ansiosta se on myös suosittu opetuskieli. </p><p>Java-alustan käyttöä ei ole rajattu Java-ohjelmointikieleen, vaan mm. <a href="/wiki/Python_(ohjelmointikieli)" title="Python (ohjelmointikieli)">Python</a>-, <a href="/wiki/Ruby" title="Ruby">Ruby</a>- ja <a href="/wiki/Scheme" title="Scheme">Scheme</a>-kielille on olemassa kääntäjä, joka tuottaa Java-tavukoodia. Sun Microsystemsin lisäksi ainakin <a href="/wiki/IBM" title="IBM">IBM</a> ja <a href="/wiki/GNU" title="GNU">GNU</a> ovat kehittäneet omat Java-kääntäjänsä ja IBM, <a href="/wiki/Novell" title="Novell">Novell</a>, <a href="/w/index.php?title=BEA_Systems&action=edit&redlink=1" class="new" title="BEA Systems (sivua ei ole)">BEA Systems</a> ja <a href="/wiki/Apache_Software_Foundation" title="Apache Software Foundation">Apache</a> omat virtuaalikoneensa lukuisten avoimen lähdekoodin toteutusten (kuten Kaffe, SableVM, JamVM, CACAO, Jikes RVM, VMkit) lisäksi. GNU:n kääntäjäympäristöön <a href="/wiki/GCC" title="GCC">GCC</a>:hen kuuluva GCJ osaa kääntää Javaa konekielelle. GNU ryhtyi myös kehittämään korvaavaa, vapaata luokkakirjastoa GNU Classpath -projektissa. </p><p>Sun ilmoitti 13. marraskuuta 2006 julkaisevansa Javan <a href="/wiki/GNU_GPL" class="mw-redirect" title="GNU GPL">GNU GPL</a>-lisenssillä.<sup id="cite_ref-11" class="reference"><a href="#cite_note-11"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup> </p><p>Googlen <a href="/wiki/Android" title="Android">Android</a> on käyttänyt <a href="/w/index.php?title=Apache_Harmony&action=edit&redlink=1" class="new" title="Apache Harmony (sivua ei ole)">Apache Harmony</a> -toteutusta Javan kirjastoille, mutta siirtyi käyttämään <a href="/wiki/OpenJDK" title="OpenJDK">OpenJDK</a>-toteutusta.<sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup> Vuodesta 2019 lähtien <a href="/wiki/Kotlin_(ohjelmointikieli)" title="Kotlin (ohjelmointikieli)">Kotlin</a> on ollut suositeltu ohjelmointikieli Android-sovelluksille Javan sijaan.<sup id="cite_ref-13" class="reference"><a href="#cite_note-13"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading2"><h2 id="Sunin/Oraclen_kehitysympäristö"><span id="Sunin.2FOraclen_kehitysymp.C3.A4rist.C3.B6"></span>Sunin/Oraclen kehitysympäristö</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=5" title="Muokkaa osiota Sunin/Oraclen kehitysympäristö" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=5" title="Muokkaa osion lähdekoodia: Sunin/Oraclen kehitysympäristö"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Javaan kuuluu ohjelmointikieli, josta on julkaistu eri versioita kehitysympäristön (Java Development Kit; JDK) kehittymisen myötä. Kehitysympäristöön kuuluu <a href="/wiki/Ohjelmointikielen_k%C3%A4%C3%A4nt%C3%A4j%C3%A4" title="Ohjelmointikielen kääntäjä">kääntäjä</a> (javac) ja muut kehitystyökalut (jar, javadoc, jdb). Kehitysympäristö sisältää myös täydellisen ajoympäristön (Java Runtime Environment; JRE), joka tarvitaan käännettyjen ohjelmien ajamiseen. Ajoympäristö sisältää virtuaalikoneen (Java Virtual Machine; JVM), joka on JRE:n versiosta 1.2 (joulukuu 1998) lähtien sisältänyt <a href="/wiki/Ajonaikainen_k%C3%A4%C3%A4nt%C3%A4minen" title="Ajonaikainen kääntäminen">ajonaikaisen käännöksen</a> konekielelle (just-in-time compiler; JIT). Ajoympäristöön kuuluvat myös luokkakirjastot, jotka ovat nekin saaneet lisää ominaisuuksia Javan kehittymisen myötä. Java 1.2 brändättiin suurten muutosten vuoksi nimellä Java 2. Java 2 -nimeä ei kuitenkaan käytetty markkinoinnissakaan kovin kauan, sillä jo Java 1.5 brändättiin Java 5:ksi. </p><p>Ajoympäristö on nykyisin jaettu kolmeen osaan. </p> <ul><li><a href="/wiki/Java-alusta,_Standard_Edition" title="Java-alusta, Standard Edition">Java Standard Edition</a> (Java SE) sisältää yleiset ominaisuudet, graafiset käyttöliittymät, tietokanta- (Java Database Connectivity; JDBC) ja perus-XML-rajapinnat.</li> <li>Java Enterprise Edition (Java EE) on tarkoitettu palvelinsovellusten kehittämiseen ja ajamiseen ja sisältää mm. nimeämis- ja hakemistopalvelut (Java Naming and Directory Interface; JNDI), komponenttirajapinnan (Enterprise Java Beans; EJB), <a href="/w/index.php?title=Servlet&action=edit&redlink=1" class="new" title="Servlet (sivua ei ole)">servlet</a>- ja <a href="/wiki/Portlet" title="Portlet">portlet</a>-määrittelyt, JSP (JavaServer Pages) ja muita web-palvelintekniikoita.</li> <li>Java Micro Edition (<a href="/wiki/Java_ME" title="Java ME">Java ME</a>) on tarkoitettu teholtaan rajoittuneiden laitteiden ohjelmointiin, kuten matkapuhelimiin ja digibokseihin (Multimedia Home Platform; DVB-<a href="/wiki/MHP" title="MHP">MHP</a>). J2ME eroaa merkittävästi muista ympäristöistä ja käyttää rajoitetumpaa virtuaalikonetta (K Virtual Machine; KVM) ja jättää toteuttamatta joitain kielen ominaisuuksia (kuten <a href="/wiki/Liukuluku" title="Liukuluku">liukuluvut</a> ja luokkien purkajat). Java ME on edelleen jaettu konfiguraatioihin ja profiileihin laitteiden ominaisuuksien mukaan.</li></ul> <div class="mw-heading mw-heading3"><h3 id="Versioita">Versioita</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=6" title="Muokkaa osiota Versioita" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=6" title="Muokkaa osion lähdekoodia: Versioita"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Javan tärkeimmät julkaisuversiot ja niiden julkaisupäivät: </p> <ul><li><b>JDK <a href="/wiki/Ohjelmiston_julkaisuelinkaari" title="Ohjelmiston julkaisuelinkaari">Beta</a></b> esiteltiin 1995.</li> <li><b>JDK 1.0</b> esiteltiin 23. tammikuuta 1996.</li> <li><b>JDK 1.1</b> esiteltiin 19. helmikuuta 1997.</li> <li><b>J2SE 1.2</b> esiteltiin 8. joulukuuta 1998.</li> <li><b>J2SE 1.3</b> esiteltiin 8. toukokuuta 2000.</li> <li><b>J2SE 1.4</b> esiteltiin 6. helmikuuta 2002.</li> <li><b>J2SE 5.0</b> esiteltiin 30. syyskuuta 2004.</li> <li><b>Java SE 6</b> (koodinimi "Mustang") esiteltiin 11. joulukuuta 2006.</li> <li><b>Java SE 7</b> (koodinimi "Dolphin") esiteltiin 28. heinäkuuta 2011. <a href="/wiki/Viestint%C3%A4virasto" title="Viestintävirasto">Viestintävirasto</a> ilmoitti elokuussa 2012, että Java 7 aiheuttaa Windows-ympäristössä vakavan tietoturva-aukon ja kehottaa poistamaan version.<sup id="cite_ref-14" class="reference"><a href="#cite_note-14"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup> Tietoturva-aukkoon tuli korjaava päivitys 30. elokuuta 2012.<sup id="cite_ref-15" class="reference"><a href="#cite_note-15"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup> (Tuettu heinäkuuhun 2022 asti)</li> <li><b>Java SE 8</b> (koodinimi "Spider") esiteltiin 18. maaliskuuta 2014. (Tuettu joulukuuhun 2030 asti)</li> <li><b>Java SE 9</b> esiteltiin 9. syyskuuta 2017.</li> <li><b>Java SE 10</b> esiteltiin 20. maaliskuuta 2018.</li> <li><b>Java SE 11</b> esiteltiin 25. syyskuuta 2018.<sup id="cite_ref-16" class="reference"><a href="#cite_note-16"><span class="cite-bracket">[</span>16<span class="cite-bracket">]</span></a></sup> (Tuettu syyskuuhun 2026 asti)</li> <li><b>Java SE 12</b> esiteltiin 19. maaliskuuta 2019.<sup id="cite_ref-17" class="reference"><a href="#cite_note-17"><span class="cite-bracket">[</span>17<span class="cite-bracket">]</span></a></sup></li> <li><b>Java SE 13</b> esiteltiin 16. syyskuuta 2019.<sup id="cite_ref-18" class="reference"><a href="#cite_note-18"><span class="cite-bracket">[</span>18<span class="cite-bracket">]</span></a></sup></li> <li><b>Java SE 14</b> esiteltiin 17. maaliskuuta 2020.<sup id="cite_ref-19" class="reference"><a href="#cite_note-19"><span class="cite-bracket">[</span>19<span class="cite-bracket">]</span></a></sup></li> <li><b>Java SE 15</b> esiteltiin 15. syyskuuta 2020.<sup id="cite_ref-20" class="reference"><a href="#cite_note-20"><span class="cite-bracket">[</span>20<span class="cite-bracket">]</span></a></sup></li> <li><b>Java SE 16</b> esiteltiin 16. maaliskuuta 2021.<sup id="cite_ref-21" class="reference"><a href="#cite_note-21"><span class="cite-bracket">[</span>21<span class="cite-bracket">]</span></a></sup></li> <li><b>Java SE 17</b> esiteltiin 14. syyskuuta 2021.<sup id="cite_ref-22" class="reference"><a href="#cite_note-22"><span class="cite-bracket">[</span>22<span class="cite-bracket">]</span></a></sup> (Tuettu syyskuuhun 2029 asti)</li> <li><b>Java SE 18</b> esiteltiin 22. maaliskuuta 2022.<sup id="cite_ref-23" class="reference"><a href="#cite_note-23"><span class="cite-bracket">[</span>23<span class="cite-bracket">]</span></a></sup></li> <li><b>Java SE 19</b> esiteltiin 20. syyskuuta 2022.<sup id="cite_ref-24" class="reference"><a href="#cite_note-24"><span class="cite-bracket">[</span>24<span class="cite-bracket">]</span></a></sup></li> <li><b>Java SE 20</b> esiteltiin 21. maaliskuuta 2023.<sup id="cite_ref-25" class="reference"><a href="#cite_note-25"><span class="cite-bracket">[</span>25<span class="cite-bracket">]</span></a></sup></li> <li><b>Java SE 21</b> julkaistiin 17. lokakuuta 2023.<sup id="cite_ref-26" class="reference"><a href="#cite_note-26"><span class="cite-bracket">[</span>26<span class="cite-bracket">]</span></a></sup></li></ul> <p>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.<sup id="cite_ref-27" class="reference"><a href="#cite_note-27"><span class="cite-bracket">[</span>27<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading2"><h2 id="Kehitysympäristön_asentaminen"><span id="Kehitysymp.C3.A4rist.C3.B6n_asentaminen"></span>Kehitysympäristön asentaminen</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=7" title="Muokkaa osiota Kehitysympäristön asentaminen" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=7" title="Muokkaa osion lähdekoodia: Kehitysympäristön asentaminen"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Java SE Development Kit on yksityiskäyttäjälle ilmainen, jonka voit ladata Oraclen sivuilta, esim. <a rel="nofollow" class="external free" href="https://www.oracle.com/in/java/technologies/downloads/">https://www.oracle.com/in/java/technologies/downloads/</a> . Se tukee useimpia käyttöjärjestelmiä, kuten, Windowsi, linuxia, Mac OSia. </p><p><b>Oracle JDK 20 -sertifioidut järjestelmäkokoonpanot</b> </p><p>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.<sup id="cite_ref-Nimetön-20231105094944_28-0" class="reference"><a href="#cite_note-Nimetön-20231105094944-28"><span class="cite-bracket">[</span>28<span class="cite-bracket">]</span></a></sup> </p><p>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.<sup id="cite_ref-Nimetön-20231105094944_28-1" class="reference"><a href="#cite_note-Nimetön-20231105094944-28"><span class="cite-bracket">[</span>28<span class="cite-bracket">]</span></a></sup> Uudemmat Linuxin eri versiot versiot tukevat X.org-tilaa, mutta Wayland-tilaa ei tueta.<sup id="cite_ref-Nimetön-20231105094944_28-2" class="reference"><a href="#cite_note-Nimetön-20231105094944-28"><span class="cite-bracket">[</span>28<span class="cite-bracket">]</span></a></sup> </p><p>MacOS alustoista tuettuina ovat versiot macOS 11, macOS 12 ja macOS 13<sup id="cite_ref-Nimetön-20231105094944_28-3" class="reference"><a href="#cite_note-Nimetön-20231105094944-28"><span class="cite-bracket">[</span>28<span class="cite-bracket">]</span></a></sup> </p><p>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ää <sup id="cite_ref-29" class="reference"><a href="#cite_note-29"><span class="cite-bracket">[</span>29<span class="cite-bracket">]</span></a></sup>: </p> <ul><li>Oracle VM</li> <li>Docker</li> <li>Microsoft Hyper-V Server</li></ul> <p>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. </p> <div class="mw-heading mw-heading2"><h2 id="Turvallisuusarkkitehtuuri">Turvallisuusarkkitehtuuri</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=8" title="Muokkaa osiota Turvallisuusarkkitehtuuri" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=8" title="Muokkaa osion lähdekoodia: Turvallisuusarkkitehtuuri"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>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<sup id="cite_ref-:0_30-0" class="reference"><a href="#cite_note-:0-30"><span class="cite-bracket">[</span>30<span class="cite-bracket">]</span></a></sup>: </p> <ul><li>Tarjoaa turvallisen ja valmiin Java-alustan, jolla pystyy ajamaan Java-yhteensopivia sovelluksia turvallisesti</li> <li>Tarjoaa Java-ohjelmointikielellä toteutettuja tietoturvatyökaluja ja -palveluita, jotka mahdollistavat laajemman valikoiman turvallisuusherkkiä sovelluksia esimerkiksi yrityksille</li></ul> <div class="mw-heading mw-heading3"><h3 id="Hiekkalaatikkomalli">Hiekkalaatikkomalli</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=9" title="Muokkaa osiota Hiekkalaatikkomalli" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=9" title="Muokkaa osion lähdekoodia: Hiekkalaatikkomalli"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>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 <a href="/wiki/Ohjelmointirajapinta" title="Ohjelmointirajapinta">API</a>-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 (<a href="/wiki/Java_Development_Kit" title="Java Development Kit">JDK</a>) 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 <a href="/wiki/Java-sovelma" title="Java-sovelma">sovelman</a> (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. <sup id="cite_ref-:0_30-1" class="reference"><a href="#cite_note-:0-30"><span class="cite-bracket">[</span>30<span class="cite-bracket">]</span></a></sup> </p> <figure class="mw-default-size mw-halign-none" typeof="mw:File/Thumb"><a href="/wiki/Tiedosto:JDK_1.0_security_Sandbox.png" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/e/e2/JDK_1.0_security_Sandbox.png/250px-JDK_1.0_security_Sandbox.png" decoding="async" width="250" height="104" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/e/e2/JDK_1.0_security_Sandbox.png/375px-JDK_1.0_security_Sandbox.png 1.5x, //upload.wikimedia.org/wikipedia/commons/e/e2/JDK_1.0_security_Sandbox.png 2x" data-file-width="411" data-file-height="171" /></a><figcaption>Alkuperäinen hiekkalaatikkomalli. JDK 1.0 Security Model.</figcaption></figure> <div class="mw-heading mw-heading2"><h2 id="Sovelluskohteet">Sovelluskohteet</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=10" title="Muokkaa osiota Sovelluskohteet" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=10" title="Muokkaa osion lähdekoodia: Sovelluskohteet"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Javan ensimmäinen kohdeympäristö oli web-selaimet, joissa <a href="/wiki/Java-sovelma" title="Java-sovelma">Java-sovelmia</a> (applet) voitiin ajaa turvallisesti. Appletit olivat osa jo ensimmäistä Java-julkaisua 1995. Tekniikan otti omakseen erityisesti <a href="/wiki/Netscape" title="Netscape">Netscape</a> <a href="/wiki/Selainsodat" title="Selainsodat">selainsodissa</a> 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 (<a href="/wiki/.NET" class="mw-redirect" title=".NET">.NET</a> ja <a href="/wiki/C_sharp" title="C sharp">C#</a>). Applettien suosio on jäänyt vähäiseksi ja muut tekniikat, kuten <a href="/wiki/Adobe_Flash" title="Adobe Flash">Flash</a> ovat ottaneet paikan yksinkertaisten selainsovellusten luonnissa. Myöskään Java-pohjaiset <a href="/w/index.php?title=Verkkotietokone&action=edit&redlink=1" class="new" title="Verkkotietokone (sivua ei ole)">verkkotietokoneet</a> (JavaStation, JavaOs), joita useat valmistajat esittelivät, eivät yleistyneet. </p><p>Verkon yli ladattavien sovellusten luontiin Oraclella on <a href="/wiki/Java_Web_Start" title="Java Web Start">Java Web Start</a> -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ä. </p><p>Java Servlet API on dynaamisten websivujen kehittämiseen tarkoitettu rajapinta. Se on osa Java EE -pakettia. Servlet-rajapinnan toteuttaa <i>servlet container</i> (joskus käännetty suomeksi termillä <i>kontti</i>). Container tarjoaa web-palvelimen, jonka toiminnallisuutta voi laajentaa omilla komponenteilla hyödyntäen Javan rajapintoja. Container tarjoaa suoraan joitain palveluja, kuten <a href="/wiki/Istunto" class="mw-redirect" title="Istunto">istunnonhallinnan</a>. JavaServer Pages (<a href="/wiki/JSP" class="mw-redirect" title="JSP">JSP</a>) on Servlet API:a käyttävä tekniikka, joka käyttää yksinkertaista merkkauskieltä <a href="/wiki/HTML" title="HTML">HTML</a>:n seassa hyödyntämään palvelimella olevien komponenttien toiminnallisuutta tai sisältää suoraan Java-koodia. JSP muistuttaa lähinnä <a href="/wiki/Common_Gateway_Interface" title="Common Gateway Interface">CGI</a>- tai <a href="/wiki/PHP" title="PHP">PHP</a>-skriptausta. </p><p>Enterprise JavaBeans (EJB) on Servlet API:n kaltainen tekniikka, mutta on tarkoitettu etupäässä tietokantakäyttöön. EJB-komponentit (pavut) ajetaan sovelluspalvelimessa, joka tukee <a href="/wiki/Hajauttaminen" title="Hajauttaminen">hajauttamista</a>, <a href="/wiki/Transaktio" title="Transaktio">transaktioita</a> ja <a href="/wiki/Rinnakkaisuus" title="Rinnakkaisuus">rinnakkaisuuden</a> 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. </p><p>Javaan on saatavilla <a href="/wiki/JavaFX" title="JavaFX">JavaFX</a>-ohjelmointialusta <sup id="cite_ref-31" class="reference"><a href="#cite_note-31"><span class="cite-bracket">[</span>31<span class="cite-bracket">]</span></a></sup>, jonka ensimmäinen versio julkaistiin vuonna 2008. <sup id="cite_ref-Nimetön-20230526113543_32-0" class="reference"><a href="#cite_note-Nimetön-20230526113543-32"><span class="cite-bracket">[</span>32<span class="cite-bracket">]</span></a></sup> JavaFX:n oli alun perin tarkoitus korvata Swing API kokonaan<sup id="cite_ref-33" class="reference"><a href="#cite_note-33"><span class="cite-bracket">[</span>33<span class="cite-bracket">]</span></a></sup>, mutta myöhemmin aikeesta on luovuttu <sup id="cite_ref-Nimetön-20230526113543_32-1" class="reference"><a href="#cite_note-Nimetön-20230526113543-32"><span class="cite-bracket">[</span>32<span class="cite-bracket">]</span></a></sup>. </p><p><a href="/wiki/Apache_Software_Foundation" title="Apache Software Foundation">Apache-säätiö</a> kehitti Javalle avoimen lähdekoodin työkaluja Jakarta-projektissa. Projektin nimi siirtyi <a href="/wiki/Eclipse_Foundation" class="mw-redirect" title="Eclipse Foundation">Eclipse-säätiön</a> Java-laajennusten paketin nimeksi samassa yhteydessä kun Eclipse otti kehitettäväkseen Apachen J2EE-sovelluspalvelimen. Useat Apachen Java-projektit on eriytetty omiksi ohjelmapaketeikseen, esim. <a href="/w/index.php?title=Apache_Ant&action=edit&redlink=1" class="new" title="Apache Ant (sivua ei ole)">Apache Ant</a>. Apachen yleiset Java-kirjastot tunnetaan nykyisin nimellä <a href="/w/index.php?title=Apache_Commons&action=edit&redlink=1" class="new" title="Apache Commons (sivua ei ole)">Apache Commons</a>. </p> <div class="mw-heading mw-heading2"><h2 id="Ohjelmointiympäristöt"><span id="Ohjelmointiymp.C3.A4rist.C3.B6t"></span>Ohjelmointiympäristöt</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=11" title="Muokkaa osiota Ohjelmointiympäristöt" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=11" title="Muokkaa osion lähdekoodia: Ohjelmointiympäristöt"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Javalle on olemassa monia erilaisia ohjelmointiympäristöjä, jotka tarjoavat erilaisia ominaisuuksia ja työkaluja. Ilmaisia ovat esimerkiksi <a href="/wiki/NetBeans" title="NetBeans">NetBeans</a> ja <a href="/wiki/Eclipse_(IDE)" title="Eclipse (IDE)">Eclipse</a> ja <a href="/w/index.php?title=BlueJ&action=edit&redlink=1" class="new" title="BlueJ (sivua ei ole)">BlueJ</a>. Kaupallisia ovat esimerkiksi <a href="/w/index.php?title=JetBrains&action=edit&redlink=1" class="new" title="JetBrains (sivua ei ole)">JetBrainsin</a> <a href="/w/index.php?title=IntelliJ_IDEA&action=edit&redlink=1" class="new" title="IntelliJ IDEA (sivua ei ole)">IntelliJ IDEA</a>. Googlen <a href="/wiki/Android_Studio" title="Android Studio">Android Studio</a> on virallinen ympäristö <a href="/wiki/Android" title="Android">Android</a>-kehitykseen ja tukee myös muilla kielillä kehittämistä. </p> <div class="mw-heading mw-heading2"><h2 id="Ominaisuudet">Ominaisuudet</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=12" title="Muokkaa osiota Ominaisuudet" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=12" title="Muokkaa osion lähdekoodia: Ominaisuudet"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-heading mw-heading3"><h3 id="Perusominaisuudet">Perusominaisuudet</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=13" title="Muokkaa osiota Perusominaisuudet" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=13" title="Muokkaa osion lähdekoodia: Perusominaisuudet"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Java tukee tyypillisiä <a href="/wiki/Toistorakenne" title="Toistorakenne">toistorakenteita</a> (<code>for</code>, <code>while</code>) ja <a href="/wiki/Ehtolause" title="Ehtolause">ehtolauserakenteita</a> (<code>if</code>, <code>else</code>, <code>switch</code>).<sup id="cite_ref-34" class="reference"><a href="#cite_note-34"><span class="cite-bracket">[</span>34<span class="cite-bracket">]</span></a></sup> </p><p>Javassa osoittimelle voidaan antaa arvoksi <i>null</i> 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, <a href="/wiki/Instanssimuuttuja" title="Instanssimuuttuja">instanssimuuttujia</a> 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. <sup id="cite_ref-35" class="reference"><a href="#cite_note-35"><span class="cite-bracket">[</span>35<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="Olio-ohjelmointi">Olio-ohjelmointi</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=14" title="Muokkaa osiota Olio-ohjelmointi" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=14" title="Muokkaa osion lähdekoodia: Olio-ohjelmointi"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Java tukee <a href="/wiki/Olio-ohjelmointi" title="Olio-ohjelmointi">olio-ohjelmointia</a>. Kielessä voidaan käyttää <a href="/wiki/Luokka_(ohjelmointi)" title="Luokka (ohjelmointi)">luokkia</a>, joiden jäsenenä olevia <a href="/wiki/Aliohjelma" title="Aliohjelma">aliohjelmia</a> kutsutaan metodeiksi.<sup id="cite_ref-36" class="reference"><a href="#cite_note-36"><span class="cite-bracket">[</span>36<span class="cite-bracket">]</span></a></sup> </p><p>Metodien määrittelyssä kerrotaan paluuarvon tyyppi, nimi ja valinnaisia ominaisuuksia (parametrit, näkyvyys ja niin edelleen).<sup id="cite_ref-37" class="reference"><a href="#cite_note-37"><span class="cite-bracket">[</span>37<span class="cite-bracket">]</span></a></sup> Java tukee <a href="/wiki/Poikkeus" title="Poikkeus">poikkeuksia</a>.<sup id="cite_ref-38" class="reference"><a href="#cite_note-38"><span class="cite-bracket">[</span>38<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-39" class="reference"><a href="#cite_note-39"><span class="cite-bracket">[</span>39<span class="cite-bracket">]</span></a></sup> </p><p>Muiden luokkien pääsyä voidaan rajoittaa. Päätasolla näkyvyys voi olla julkinen (<code>public</code>) tai pakettikohtainen. Jäsentasolla näkyvyys voi olla <code>public</code>, <code>private</code> tai <code>protected</code>. Jos näkyvyyttä ei määritellä luokalle se näkyy vain sen paketille.<sup id="cite_ref-40" class="reference"><a href="#cite_note-40"><span class="cite-bracket">[</span>40<span class="cite-bracket">]</span></a></sup> </p><p>Java rakennettiin lähes yksinomaan oliokieleksi, joten Java-kieliset ohjelmat ovat lähes aina oliopohjaisia ohjelmia. Olio-ohjelmointi onkin nykypäivänä yksi ohjelmointi alan tärkeimmistä työkaluista, jonka avulla voidaan luoda tehokkaampia, joustavampia ja helpommin ylläpidettävissä olevia ohjelmistoja. Java onkin usein käytetty ohjelmointikieli oliopohjaisessa ohjelmoinnissa.<sup><i><a href="/wiki/Wikipedia:Merkitse_l%C3%A4hteet" title="Wikipedia:Merkitse lähteet">lähde?</a></i></sup> </p><p>Olio-ohjelmoinnin perusperiaatteisiin kuuluu kapselointi, periytyminen, polymorfismi ja abstraktio. Nämä auttavat ohjelmiston kehittäjiä luomaan modulaarisia ohjelmistoja, joissa eri osat ovat itsenäisiä ja ovat helposti laajennettavissa. Tämän avulla koodia voidaan uudelleenkäyttää ja näin vähentää saman tai samantyylisen koodin toistamista ohjelmistoissa. Olio-ohjelmointi tekee isojen ohjelmien koodista helpommin organisoitavaa. Tämä auttaa ohjelmistojen kehittäjiä työskentelemään tehokkaammin yhdessä ja monimutkaisten ohjelmistojen hallitsemissa. Olio-ohjelmoinnin merkitys tulee tulevaisuudessa vain kasvamaan ohjelmistojen kehittyessä yhä monimutkaisimmiksi.<sup style="font-style:italic;"><a href="/wiki/Ohje:Kerro_kuka_tekee" title="Ohje:Kerro kuka tekee"><span class="noprint" title="Kerro kuka tekee">kenen mukaan?</span></a></sup><sup><i><a href="/wiki/Wikipedia:Merkitse_l%C3%A4hteet" title="Wikipedia:Merkitse lähteet">lähde?</a></i></sup> </p><p>Kapseloinnilla tarkoitetaan tiedon piilottamista. Eli luokan sisäiset yksityiskohdat voidaan piilottaa ulkopuolisilta.<sup><i><a href="/wiki/Wikipedia:Merkitse_l%C3%A4hteet" title="Wikipedia:Merkitse lähteet">lähde?</a></i></sup> </p><p>Periytymisellä tarkoitetaan sitä, että lapsiluokka perii vanhempiensa tiedot ja toiminnallisuudet. Tätä voidaan havainnollistaa esimerkiksi niin, että koira ja kissa ovat kummatkin erilaisia eläimiä, mutta ne molemmat ovat nisäkkäitä. Tällöin he perivät nisäkkään ominaisuudet, mutta niillä on myös omia ominaisuuksia.<sup><i><a href="/wiki/Wikipedia:Merkitse_l%C3%A4hteet" title="Wikipedia:Merkitse lähteet">lähde?</a></i></sup> </p><p>Polymorfismilla tarkoitetaan olioiden kykyä ottaa monta muotoa. Esimerkiksi ihminen voi olla jonkun puoliso, lapsi ja työntekijä samaan aikaan, mutta käyttäytyy eri tavalla näissä tilanteissa.<sup><i><a href="/wiki/Wikipedia:Merkitse_l%C3%A4hteet" title="Wikipedia:Merkitse lähteet">lähde?</a></i></sup> </p><p>Abstraktio tarkoittaa kokonaisuuksien käsittelyä, jossa tarkennetaan tarvittaessa.<sup><i><a href="/wiki/Wikipedia:Merkitse_l%C3%A4hteet" title="Wikipedia:Merkitse lähteet">lähde?</a></i></sup> </p><p>Olio-ohjelmoitaessa pyritään luokilla ja niiden ilmentymillä tyypillisesti mallintamaan jotain todellisen elämän prosessia tai toiminnallisuutta. Olio-ohjelmoinnissa instanssit ovat interaktiivisia ja niiden ominaisuudet, kuten metodit ja muuttujat vastaavat realistista käyttötarkoitusta.<sup id="cite_ref-41" class="reference"><a href="#cite_note-41"><span class="cite-bracket">[</span>41<span class="cite-bracket">]</span></a></sup> Hyvän tyyliohjeen mukaisesti esimerkiksi "Eläin" -luokalla voi olla ainoastaan eri ”eläin” -ilmentymiä, kuten siili tai kissa. Vastaavasti näillä olioilla voi olla vain loogisesti yhteensopivia muuttujia kuten "nimi" tai "ikä", eikä esimerkiksi "teho" tai "polttoainetankin tilavuus". </p><p>Javan ja olio-ohjelmoinnin eri ominaisuudet ja perusperiaatteet kuten näkyvyyden rajoittaminen ja periytyminen oikein ja yhdessä käytettynä ohjaavat jäsentelemään koodia siten, että se mallintaisi todellista maailmaa tai vähintäänkin jotain kiinteää systeemiä. Esimerkiksi eläin olion, kuten "kissa", kyky periä kantaluokaltaan kaikille eläimille tyypillisiä piirteitä kuvastaa hyvin olio-ohjelmoinnin reaalimaailman mallintamisen periaatetta. Laadukas oliopohjainen ohjelma näyttää ulospäin ryhmältä olioita, jotka toimivat keskenään omien tarkoitustensa pohjalta ja kommunikoivat niiden toisilleen tarjoamien rajapintojen avulla. </p><p>Jokaisella oliolla on oma tehtävä ja tarkoituksensa eikä muiden olioiden tarvitse välttämättä tietää mistä piilotetuista metodeista ja muuttujista olio tarkalleen muodostuu. Esimerkiksi "kuljettaja" -olion ei tarkalleen tarvitse tietää miten "auto" -olio toimii. Sille riittää, että se voi käyttää "auto" -olion toiminnallisuuksia, kuten ”käynnistä moottori”, ”aja” tai "käänny". Tämä rajapintojen muodostama abstraktio tekee olio-ohjelmoinnista joustavan ja helposti laajennettavissa olevan ohjelmointikielen. Olioiden muodostamien rajapintojen avulla laajennusten yhteensovittaminen on suhteellisen yksinkertaista, kunhan tunnetaan rajapintojen mahdolliset rajoitteet ja oikeat toiminnallisuudet. </p> <div class="mw-heading mw-heading3"><h3 id="Syntaksi">Syntaksi</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=15" title="Muokkaa osiota Syntaksi" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=15" title="Muokkaa osion lähdekoodia: Syntaksi"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>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. </p><p>Toisin kuin C++, Java ei tue operaattorin ylirasitusta tai monimuotoista periytymistä luokille, mutta toisaalta monimuotoinen periytyminen on tuettu käyttöliittymille. </p><p>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 <a href="/wiki/Javadoc" title="Javadoc">Javadoc</a> 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ä. </p><p><b>Tunnistin</b> </p><p>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. </p><p>Tunnistin voi sisältää: </p><p>-Minkä tahansa Unicode-merkin, joka on kirjain (mukaan lukien numeroa esittävät kirjaimet, kuten roomalaiset numerot) tai numero. </p><p>-Valuuttamerkin (kuten ¥). </p><p>-Yhdistävän välimerkin (kuten _). </p><p>Tunnistin ei voi: </p><p>-Aloittaa numerolla. </p><p>-Olla yhtä kuin varattu avainsana, null-arvo tai boolean-literal. </p><p><b>Muuttujat</b> </p><p>Muuttujat ovat tunnisteita, jotka liittyvät arvoihin. Ne julistetaan kirjoittamalla muuttujan tyyppi ja nimi, ja ne voidaan halutessaan alustaa samassa lausekkeessa antamalla sille arvo. </p><p>int count; //Declaring an uninitialized variable called 'count', of type 'int' count = 35; //Initializing the variable </p><p> int count = 35; //Declaring and initializing the variable at the same time </p><div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="n">count</span><span class="p">;</span><span class="w"> </span><span class="c1">//Declaring an uninitialized variable called 'count', of type 'int'</span> <span class="n">count</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">35</span><span class="p">;</span><span class="w"> </span><span class="c1">//Initializing the variable</span> <span class="kt">int</span><span class="w"> </span><span class="n">count</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">35</span><span class="p">;</span><span class="w"> </span><span class="c1">//Declaring and initializing the variable at the same time</span> </pre></div><p> Useita saman tyyppisiä muuttujia voidaan julistaa ja alustaa yhdessä lausekkeessa käyttäen pilkkua erotinmerkkinä.</p><div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">;</span><span class="w"> </span><span class="c1">//Declaring multiple variables of the same type</span> <span class="kt">int</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">3</span><span class="p">;</span><span class="w"> </span><span class="c1">//Declaring and initializing multiple variables of the same type</span> </pre></div> <p><br /> </p> <div class="mw-heading mw-heading3"><h3 id="Operaattorit">Operaattorit</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=16" title="Muokkaa osiota Operaattorit" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=16" title="Muokkaa osion lähdekoodia: Operaattorit"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Operaattorit Javassa ovat samankaltaisia kuin <a href="/wiki/C%2B%2B" title="C++">C++</a>:ssa. Kuitenkin Javassa ei ole <a href="/wiki/Automaattinen_roskienker%C3%A4ys" title="Automaattinen roskienkeräys">poisto-operaattoria</a> roskien keräysmekanismien vuoksi, eikä <a href="/wiki/Osoitin_(ohjelmointi)" title="Osoitin (ohjelmointi)">osoittimiin</a> 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 (<code>>>></code>), kun taas C: n oikeanpuoleinen siirto-operaattorin merkki riippuu tyypistä. Javassa operaattoreita ei voi <a href="https://en.wikipedia.org/wiki/Operator_overloading" class="extiw" title="en:Operator overloading">ylikuormittaa</a>. </p> <table class="wikitable"> <caption> </caption> <tbody><tr> <th>Etusija </th> <th>Operaattori </th> <th>Kuvaus </th> <th>Liitännäisyys </th></tr> <tr> <td>1 </td> <td><code>()</code><code>[]</code> <p><code>,</code> </p> </td> <td>Metodin kutsu, taulukon täyttö <p>Luokan jäsenten valinta </p> </td> <td rowspan="2">Vasemmalta oikealle </td></tr> <tr> <td>2 </td> <td><code>++</code> <code>--</code> </td> <td>Jälkikäteen lisääminen ja vähentäminen </td></tr> <tr> <td>3 </td> <td><code>++</code> <code>--</code> <p><code>+</code> <code>-</code> </p><p><code>!</code> <code>~</code> </p><p><code>type (val)</code> </p><p><code>new</code> </p> </td> <td>Etukäteen lisääminen ja vähentäminen <p>Yksittäinen plus- ja miinusmerkki </p><p>Looginen EI ja binäärinen EI </p><p>Tyyppimuunnos </p><p>Luokan ilmentymä tai taulukon luominen </p> </td> <td>Oikealta vasemmalle </td></tr> <tr> <td>4 </td> <td><code>*</code> <code>/</code> <code>%</code> </td> <td>Kertolasku, jakolasku ja jakojäännös </td> <td rowspan="10">Vasemmalta oikealle </td></tr> <tr> <td>5 </td> <td><code>+</code> <code>-</code> <p><code>+</code> </p> </td> <td>Yhteen- ja vähennyslasku <p>Merkkijonojen yhdistäminen </p> </td></tr> <tr> <td>6 </td> <td><code><<</code> <code>>></code> <code>>>></code> </td> <td><a href="/wiki/Bittioperaatio" title="Bittioperaatio">Bittioperaatiot</a>: vasen siirto, merkitsevä oikea siirto ja merkitsemätön oikea siirto </td></tr> <tr> <td>7 </td> <td><code><</code> <code><=</code> <p><code>></code> <code>>=</code> </p><p><code>instanceof</code> </p> </td> <td>Suhteellinen "pienempi kuin" ja "pienempi tai yhtä suuri kuin" <p>Suhteellinen "suurempi kuin" ja "suurempi tai yhtä suuri kuin" </p><p>Tyypin vertailu </p> </td></tr> <tr> <td>8 </td> <td><code>==</code> <code>!=</code> </td> <td><a href="/wiki/Vertailuoperaattori" title="Vertailuoperaattori">Vertailuoperaattorit</a>: "yhtä suuri kuin" ja "ei yhtä suuri kuin" </td></tr> <tr> <td>9 </td> <td><code>&</code> </td> <td>Binaarinen ja looginen JA </td></tr> <tr> <td>10 </td> <td><code>^</code> </td> <td>Binaarinen ja looginen XOR (poissulkeva tai) </td></tr> <tr> <td>11 </td> <td><code>|</code> </td> <td>Binaarinen ja looginen TAI (sisällyttävä tai) </td></tr> <tr> <td>12 </td> <td><code>&&</code> </td> <td>Looginen ehdollinen JA </td></tr> <tr> <td>13 </td> <td><code>||</code> </td> <td>Loginen ehdollinen TAI </td></tr> <tr> <td>14 </td> <td><code><i>c</i> ? <i>t</i> : <i>f</i></code> </td> <td><a href="https://en.wikipedia.org/wiki/Ternary_operation" class="extiw" title="en:Ternary operation">Kolminkertainen</a> ehdollinen (katso <a href="https://en.wikipedia.org/wiki/Ternary_conditional_operator" class="extiw" title="en:Ternary conditional operator">?</a>:) </td> <td rowspan="2">Oikealta vasemmalle </td></tr> <tr> <td>15 </td> <td><code>=</code><code>+=</code> <code>-=</code> <p><code>*=</code> <code>/=</code> <code>%=</code> </p><p><code><<=</code> <code>>>=</code> <code>>>>=</code> </p><p><code>&=</code> <code>^=</code> <code>|=</code> </p> </td> <td>Yksinkertainen sijoitus, summan ja erotuksen mukainen sijoitus <p>Tulon, osamäärän ja jakojäännöksen mukainen sijoitus </p><p>Sijoitus binaarisella vasemmalle siirrolla, merkitsevällä oikealle siirrolla ja merkitsemättömällä oikealle siirrolla </p><p>Binaarisen JA, XOR- ja TAI-laskun mukainen sijoitus </p> </td></tr></tbody></table> <div class="mw-heading mw-heading3"><h3 id="Tunnukset">Tunnukset</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=17" title="Muokkaa osiota Tunnukset" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=17" title="Muokkaa osion lähdekoodia: Tunnukset"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>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.<sup id="cite_ref-javaohjelmointi_42-0" class="reference"><a href="#cite_note-javaohjelmointi-42"><span class="cite-bracket">[</span>42<span class="cite-bracket">]</span></a></sup> </p><p>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.<sup id="cite_ref-javaohjelmointi_42-1" class="reference"><a href="#cite_note-javaohjelmointi-42"><span class="cite-bracket">[</span>42<span class="cite-bracket">]</span></a></sup> </p><p>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.<sup id="cite_ref-javaohjelmointi_42-2" class="reference"><a href="#cite_note-javaohjelmointi-42"><span class="cite-bracket">[</span>42<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="Esimerkki">Esimerkki</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=18" title="Muokkaa osiota Esimerkki" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=18" title="Muokkaa osion lähdekoodia: Esimerkki"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Tyypillinen "Hello, World" -esimerkki: </p> <div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">HelloWorld</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="n">String</span><span class="o">[]</span><span class="w"> </span><span class="n">args</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// Tulostetaan teksti "Hello, world"</span> <span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">"Hello, world!"</span><span class="p">);</span> <span class="w"> </span><span class="p">}</span> <span class="p">}</span> </pre></div><p>Java-ohjelmoinnissa kaikki lähdetiedostot tulee nimetä niiden sisältävän julkisen luokan mukaan ja lisäksi siihen on liitettävä jälkiliite .java. Yllä esiintyvässä esimerkkitapauksessa tämä tarkoittaa sitä että tämän <b>public-</b>class ( julkisen luokan ) nimen ollessa HelloWorld, tulee lähdetiedosto tallentaa seuraavalla nimellä (HelloWorld) ja jälkiliitteellä (.java) HelloWorld.java Ensin java-kääntäjän on käännettävä tämä tavukoodiksi ja tuotettava .class päätteinen tiedosto. Esimerkkitapauksessa tätä vastaa HelloWorld.class. Vasta tämän jälkeen tuotos voidaan suorittaa tai käynnistää. </p><p>Java-lähdekooditiedosto voi sisältää vain yhden julkisen luokan, mutta siinä voi olla useita luokkia, joilla on ei-julkisen pääsyn määrittävä muuttuja sekä mitä tahansa määrää julkisia sisäluokkia. Kun lähdekooditiedosto sisältää useita luokkia, yhden niistä (joka on määritelty class-avainsanalla) täytyy olla julkinen (jota edeltää public-avainsana) ja lähdekooditiedosto täytyy nimetä kyseisen julkisen luokan nimellä. </p><p>Luokka, joka ei ole julkinen, voidaan tallentaa mihin tahansa .java-tiedostoon. Kääntäjä generoi luokkatiedoston jokaiselle lähdekoodissa määritellylle luokalle. Luokkatiedoston nimi on luokan nimi, johon on lisätty .class-pääte. </p><p>Metodi nimi <code>main</code> ei ole avainsana Java-ohjelmointikielessä, vaan ns. 'pääohjelmametodi'. Java-ohjelma käynnistetään käynnistämällä luokka, jossa <code>main</code>- metodi on. Tätä metodia voidaan käyttää missä tahansa luokassa, joka on osana ohjelmaa. <code>Main</code>- metodin sisältävällä luokalla voi olla mikä vain nimi, mutta yleensä näitä luokkia kutsutaan vain <code>Main</code> nimellä. </p><p>Avainsanojen merkitystä esitellään alla seuraavasti: </p><p> Avainsana public kertoo, että metodin voi kutsua muista luokista, tai että luokkaa voi käyttää myös luokkahierarkian ulkopuolella olevat luokat. Luokkahierarkia liittyy siihen kansioon, jossa .java-tiedosto sijaitsee, ja tätä kutsutaan pääsyä määrittäväksi muuttujaksi. Muita pääsyä määrittäviä muuttujia ovat private (metodi, johon pääsee vain samassa luokassa) ja protected (joka sallii käyttää koodia samasta paketista). Jos koodi yrittää käyttää yksityisiä tai suojattuja metodeja, <a href="/wiki/Java_virtual_machine" class="mw-redirect" title="Java virtual machine">JVM</a> antaa SecurityExceptionin. Esimerkki julkisesta ja ei-julkisesta metodista julkisessa luokassa:</p><div class="mw-highlight mw-highlight-lang-java mw-content-ltr mw-highlight-lines" dir="ltr"><pre><span></span><span class="linenos" data-line="1"></span><span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">MainClass</span><span class="w"> </span><span class="p">{</span> <span class="linenos" data-line="2"></span><span class="w"> </span> <span class="linenos" data-line="3"></span><span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">publicMethod</span><span class="p">()</span><span class="w"> </span><span class="p">{</span> <span class="linenos" data-line="4"></span><span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">"Tämä on julkinen metodi"</span><span class="p">);</span> <span class="linenos" data-line="5"></span><span class="w"> </span><span class="p">}</span> <span class="linenos" data-line="6"></span><span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">nonPublicMethod</span><span class="p">()</span><span class="w"> </span><span class="p">{</span> <span class="linenos" data-line="7"></span><span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">"Tämä on ei-julkinen metodi"</span><span class="p">);</span> <span class="linenos" data-line="8"></span><span class="w"> </span><span class="p">}</span> <span class="linenos" data-line="9"></span><span class="p">}</span> </pre></div><p>Avainsana static metodin edessä tarkoittaa, että kyseessä on staattinen metodi, joka on assosioitu vain luokkaan eikä mihinkään tiettyyn luokan instanssiin. Vain staattisia metodeja voi kutsua ilman viittausta olioon. Staattiset metodit eivät voi käyttää luokan jäseniä, jotka eivät ole staattisia. Metodit, joita ei ole määritelty staattisiksi vaativat tietyn luokan esiintymän toimiakseen. </p><p>Avainsana Void osoittaa, että päämenetelmä ei palauta käyttäjälle mitään arvoa. Mikäli Java-ohjelman on tarkoitus poistua ohjelmasta virhekoodilla, sen täytyy kutsua nimenomaisesti metodia System.exit(). </p> <div class="mw-heading mw-heading3"><h3 id="Avainsanat">Avainsanat</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=19" title="Muokkaa osiota Avainsanat" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=19" title="Muokkaa osion lähdekoodia: Avainsanat"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>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. </p> <div class="mw-heading mw-heading3"><h3 id="Generics">Generics</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=20" title="Muokkaa osiota Generics" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=20" title="Muokkaa osion lähdekoodia: Generics"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Javassa on <a href="/wiki/Geneerinen_ohjelmointi" title="Geneerinen ohjelmointi">geneerisen ohjelmoinnin</a> tuki sen <a href="/wiki/Tyyppij%C3%A4rjestelm%C3%A4" title="Tyyppijärjestelmä">tyyppijärjestelmässä</a>.<sup id="cite_ref-43" class="reference"><a href="#cite_note-43"><span class="cite-bracket">[</span>43<span class="cite-bracket">]</span></a></sup> Generics on lisätty JDK versiossa 5.<sup id="cite_ref-44" class="reference"><a href="#cite_note-44"><span class="cite-bracket">[</span>44<span class="cite-bracket">]</span></a></sup> </p><p>Esimerkiksi ArrayList on listarakenne, joka tukee geneeristä ohjelmointia.<sup id="cite_ref-45" class="reference"><a href="#cite_note-45"><span class="cite-bracket">[</span>45<span class="cite-bracket">]</span></a></sup> </p><p>ArrayList on dynaaminen lista, joka toimii huomattavasti tehokkaammin kuin perinteiset taulukot. </p><p>Esimerkki ArrayListin käytöstä: </p> <div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kn">import</span><span class="w"> </span><span class="nn">java.util.ArrayList</span><span class="p">;</span> <span class="p">...</span> <span class="c1">// ArrayList, joka hyväksyy String-tyypin</span> <span class="n">ArrayList</span><span class="o"><</span><span class="n">String</span><span class="o">></span><span class="w"> </span><span class="n">hedelmaSalaatti</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">ArrayList</span><span class="o"><></span><span class="p">();</span> <span class="n">hedelmaSalaatti</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="s">"Omena"</span><span class="p">);</span> <span class="n">hedelmaSalaatti</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="s">"Mango"</span><span class="p">);</span> <span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">hedelma</span><span class="p">:</span><span class="w"> </span><span class="n">hedelmaSalaatti</span><span class="p">)</span> <span class="p">{</span> <span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">"- "</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">hedelma</span><span class="p">);</span> <span class="p">}</span> </pre></div> <p>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. </p><p>Tässä esimerkissä ArrayListin käyttö toimii seuraavalla tavalla: </p><p>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). </p><p>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ä. </p><p>Vastaavasti sitä käyttää myös muilla tietotyypeillä: </p> <div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="c1">// ArrayList, joka hyväksyy int-tyypin</span> <span class="n">ArrayList</span><span class="o"><</span><span class="n">Integer</span><span class="o">></span><span class="w"> </span><span class="n">hedelmaSalaatti</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">ArrayList</span><span class="o"><></span><span class="p">();</span> <span class="n">hedelmaSalaatti</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span> <span class="n">hedelmaSalaatti</span><span class="p">.</span><span class="na">add</span><span class="p">(</span><span class="mi">2</span><span class="p">);</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="Kommentit">Kommentit</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=21" title="Muokkaa osiota Kommentit" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=21" title="Muokkaa osion lähdekoodia: Kommentit"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>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. </p><p>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. </p><p>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. </p><p>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ä. </p><p>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. </p> <div class="mw-heading mw-heading3"><h3 id="Periytyminen">Periytyminen</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=22" title="Muokkaa osiota Periytyminen" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=22" title="Muokkaa osion lähdekoodia: Periytyminen"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Periytyminen (inheritance) on yksi Javan eli olio-ohjelmoinnin perusperiaatteita. Sen avulla voidaan vähentää turhan koodin toistamista. Siinä luokat voivat periä ominaisuusia ylemmiltä luokilta. Tällaista luokkaa, joka perii ylemmän luokan ominaisuuksia, kutsutaan lapsiluokaksi. Vastaavasti luokkaa, jonka ominaisuuksia peritään, kutsutaan lapsiluokan kantajaksi. Lapsiluokan kantaluokassa voidaan määritellä muuttujia ja metodeja, joita lapsiluokka perii ja voi käyttää. Ehtona tälle on kuitenkin se, että lapsiluokan kantaluokassa niiden näkyvyysmääre on määritelty suojattuna eli kyseessä on protected. </p><p>Kantaluokan toteutus metodille perityy lapsiluokalle Javassa. Lapsiluokalle on kuitenkin mahdollista kirjoittaa oma toteutuksensa metodille vanhan tilalle. Korvaavan metodin tulisi silti täyttää sama palvelu kuin alkuperäisen eri toteutuksella samaan rajapintaan. Lapsiluokan ilmentymää kutsuessa tulee kutsua kantaluokan rakentajaa. Javassa lapsiluokka kutsuu kantaluokan oletusrakentajaa automaattisesti. Java käyttää avainsanaa super oletuksen muuttamiseen. Oletuksen muuttamiseksi on kantaluokassa määriteltävä parametritön rakentaja lapsiluokan käyttöön. <code>super</code> -avainsanalla päästään käsiksi lapsiluokasta kantaluokan rakentajiin. </p><p>Rajapintaluokkaa käytetään myös jaetun toiminnallisuuden eristämiseen. Luokan tehtävänä on määrittää rajapinta, jota ohjelmiston luokat voivat ilmoittaa käyttävänsä. Rajapintaluokka sisältää vain staattisia ja julkisisa vakiotietokenttiä, ilman mahdollisuutta käyttää itseään kantaluokkana periytymisessä. Mikä tahansa ohjelmisto voi tämän sijasta ilmoittaa toteuttavansa rajapinnan. Määrittely tehdään vaihtamalla normaalin luokan class -avainsana avainsanaksi interface. Luokasta ei voi luoda ilmentymiä eikä määritellä rakentajaa. Ainoat hyväksytyt tietokentät ovat luokkamuuttujavakioita. Rajapintaluokan kaikki metodit ovat abstrakteja metodeja. Metodien tulee myös olla julkisia. Mikäli näkyvyysmääreitä <code>public</code>, <code>static</code> tai <code>final</code> ei olla sisällytetty metodeiden määrittelyyn, ne lisätään määritelmään automaattisesti. </p><p>Ajatellaan periytymistä seuraavan esimerkin avulla. Kaikille moottoriajoneuvoille (lapsiluokan kantaluokka) yhteisiä muuttujia voisi olla valmistaja, polttoaine sekä moottorin kapasiteetti. Vastaavasti yhteisiä metodeja kaikille moottoriajoneuvoille voisi olla moottorin sammutus sekä käynnistys. Moottoriajoneuvojen lapsiluokkia voisi olla auto, lentokone ja vene, jotka perivät siis yllä olevat muuttujat sekä metodit itselleen. Näiden lisäksi jokaisella lapsiluokalla voi olla omia muuttujia sekä metodeja. Auton muuttuja voisi olla väri, metodi voisi olla vaihda vaihdetta. Lentokoneen muuttaja voisi olla siipiväli, metodi voisi olla nosta/laske lentokorkeutta. Veneen muuttuja voisi olla veneen pituus, metodi voisi olla ruorin kääntäminen oikealle ja vasemmalle. Jotta homma ei olisi liian yksinkertaista, voi auto toimia lapsiluokan kantaluokkana erilaisille autotyypeille. Esimerkiksi avo-, lava-, henkilö- ja kuorma-auto perivät kaikki auton sekä moottoriajonevon suojatut muuttujat ja metodit. Avoautolla voisi vielä omana muuttujana olla malli sekä metodina voisi olla katon nostaminen auki kuumana kesäpäivänä. </p> <div class="mw-heading mw-heading3"><h3 id="Abstraktit_luokat_ja_metodit">Abstraktit luokat ja metodit</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=23" title="Muokkaa osiota Abstraktit luokat ja metodit" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=23" title="Muokkaa osion lähdekoodia: Abstraktit luokat ja metodit"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>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.<sup id="cite_ref-46" class="reference"><a href="#cite_note-46"><span class="cite-bracket">[</span>46<span class="cite-bracket">]</span></a></sup> </p><p>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 <code>abstract</code> <code>class</code> -avainsanan eteen. Ei-abstraktia abstraktin luokan lapsiluokkaa kutsutaan konkreettiseksi luokaksi. </p><p><br /> </p><p> Abstraktin luokan määritys tapahtuu <code>abstract</code> -avainsanalla.</p><div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">public</span><span class="w"> </span><span class="kd">abstract</span><span class="w"> </span><span class="kd">class</span> <span class="nc">className</span><span class="w"> </span><span class="p">{}</span> </pre></div><p>Jos abstraktista luokasta yritetään luoda uusi olio, Java palauttaa virheviestin. Virheen voi saada kiinni ajon aikana <code>InstantiationError</code> luokan avulla jos ja vain jos luokan määritys on yhteensopimattomasti muuttunut.<sup id="cite_ref-47" class="reference"><a href="#cite_note-47"><span class="cite-bracket">[</span>47<span class="cite-bracket">]</span></a></sup> 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 <code>abstract</code> -avainsanalla.</p><div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">public</span><span class="w"> </span><span class="kd">abstract</span><span class="w"> </span><span class="kd">class</span> <span class="nc">className</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="kd">abstract</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">method</span><span class="p">();</span> <span class="p">}</span> </pre></div><p>Abstraktin luokan lapsiluokat voivat käyttää abstrakteja metodeja implementoimalla tai kumoamalla (Override) abstraktin metodin, joka periytynyt pääluokasta.</p><div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">public</span><span class="w"> </span><span class="kd">abstract</span><span class="w"> </span><span class="kd">class</span> <span class="nc">subClassName</span><span class="w"> </span><span class="kd">extends</span><span class="w"> </span><span class="n">className</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="nd">@Override</span> <span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">method</span><span class="p">();</span> <span class="p">}</span> </pre></div><p>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.<sup id="cite_ref-48" class="reference"><a href="#cite_note-48"><span class="cite-bracket">[</span>48<span class="cite-bracket">]</span></a></sup> Abstrakteissa luokissa ja metodeissa voidaan käyttää avainsanaa <code>static</code> </p><div class="mw-heading mw-heading3"><h3 id="Tiedostonkäsittely_Javassa"><span id="Tiedostonk.C3.A4sittely_Javassa"></span>Tiedostonkäsittely Javassa</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=24" title="Muokkaa osiota Tiedostonkäsittely Javassa" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=24" title="Muokkaa osion lähdekoodia: Tiedostonkäsittely Javassa"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div><p> Javassa tiedostoon kirjoittaminen ja sieltä lukeminen on melko yksinkertaista. Java tarjoaa näitä toimintoja varten käyttäjälleen useita eri kirjastoja ja metodeja, joita Java-ohjelmoijat pääsevät vapaasti käyttämään. FileWriter on yksi java.io kirjaston tarjoama luokka, jota voi hyödyntää tiedoston kirjoittamiseen tai lukemiseen. Tämän jälkeen voidaan käyttää write-metodia tekstin kirjoittamiseen. Esimerkiksi jos halutaan luoda ja kirjoittaa tekstiä tiedostoon "tiedosto.txt", tapahtuu se seuraavanlaisesti.</p><div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="k">try</span><span class="w"> </span><span class="p">(</span><span class="n">FileWriter</span><span class="w"> </span><span class="n">kirjoittaja</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">FileWriter</span><span class="p">(</span><span class="s">"tiedosto.txt"</span><span class="p">))</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">kirjoittaja</span><span class="p">.</span><span class="na">write</span><span class="p">(</span><span class="s">"Kirjoitetaan tekstiä tiedostoon."</span><span class="p">);</span> <span class="p">}</span><span class="w"> </span><span class="k">catch</span><span class="w"> </span><span class="p">(</span><span class="n">IOException</span><span class="w"> </span><span class="n">e</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// Poikkeukset tähän</span> <span class="p">}</span> </pre></div><p>Java pakottaa käyttäjänsä lisäämään poikkeuksenkäsittelyn, jota esimerkiksi Pythonissa ei tarvitse tehdä. Tällä varmistetaan se, että tiedostojen puuttumiset, käyttöoikeusongelmat sekä muut odottomattomat ongelmat otetaan huomioon. Kuten yllä olevasta koodista huomaa, tapahtuu tiedostoon kirjoittaminen try-lausekkeen sisällä. </p><p><br /> </p><p> Olion lisääminen tiedostoon tapahtuu Javassa hieman erilailla, kuin esimerkiksi tavallisen tekstin kanssa toimiessa. Tämä johtuu siitä, että oliot usein sisältävät tietoa, joka ei yksinkertaisesti ole kirjoitettavissa tekstinä, vaan se on tallennettava binäärimuodossa. Javassa ohjelmoija joutuu käyttämään ObjectOutputStream - toimintoa, jos haluaa lisätä sen tiedostoon ja vastaavasti sen voi lukea sieltä ObjectInputStream-luokkien avulla. Tässä on yksinkertainen esimerkki siitä, miten olion tallentaminen tiedostoon tapahtuu. </p><div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="n">Henkilo</span><span class="w"> </span><span class="n">henkilo</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Henkilo</span><span class="p">(</span><span class="s">"Matti Meikäläinen"</span><span class="p">,</span><span class="w"> </span><span class="mi">30</span><span class="p">);</span> <span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="p">(</span><span class="n">ObjectOutputStream</span><span class="w"> </span><span class="n">objectOutputStream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">ObjectOutputStream</span><span class="p">(</span><span class="k">new</span><span class="w"> </span><span class="n">FileOutputStream</span><span class="p">(</span><span class="s">"tiedosto.txt"</span><span class="p">)))</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">objectOutputStream</span><span class="p">.</span><span class="na">writeObject</span><span class="p">(</span><span class="n">henkilo</span><span class="p">);</span> <span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">catch</span><span class="w"> </span><span class="p">(</span><span class="n">IOException</span><span class="w"> </span><span class="n">e</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="c1">// Poikkeukset tähän</span> <span class="w"> </span><span class="p">}</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="Muistinhallinta">Muistinhallinta</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=25" title="Muokkaa osiota Muistinhallinta" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=25" title="Muokkaa osion lähdekoodia: Muistinhallinta"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Javan muistinhallinta on automaattista. Java käyttää <a href="/wiki/Automaattinen_roskienker%C3%A4ys" title="Automaattinen roskienkeräys">automaattista roskienkeräintä</a> (eng. <i>automatic garbage collector</i>) muistinhallintaan. Sen tarkoitus on hallita <a href="/wiki/Olio_(ohjelmointi)" title="Olio (ohjelmointi)">objektin</a> muistinkäyttöä sen <a href="/w/index.php?title=Objektin_k%C3%A4ytt%C3%B6ik%C3%A4&action=edit&redlink=1" class="new" title="Objektin käyttöikä (sivua ei ole)">käyttöiän</a> aikana. </p><p>Tämä poikkeaa esimerkiksi C- ja C++-kielten käytännöistä, joissa ohjelman muistinhallinta on manuaalista ja siten ohjelmoijan vastuulla. Manuaalisen muistinhallinnan ohjelmointikielissä on mahdollista saada aikaan muistivuotoa, eli tilanteen, jossa ohjelma varaa muistia toimintojaan varten, mutta ei vapauta sitä tarpeen ja ohjelman päättyessä. </p><p>Javan roskienkerääjän tarkoitus on ehkäistä muistivuotoa. Vaikka roskienkeräys ei eliminoi muistivuotoja täysin, se vähentää niitä merkittävästi, kuin myös niiden ehkäisemiseen kuluvia resursseja ohjelmistokehittäjiltä.<sup id="cite_ref-:1_49-0" class="reference"><a href="#cite_note-:1-49"><span class="cite-bracket">[</span>49<span class="cite-bracket">]</span></a></sup> </p><p>Roskienkerääjä ajaa jaksollisesti taustalla "roskienkeräyksen" (eng. <i>garbage collection</i>), joka pyrkii tunnistamaan muistissa olevat "kuolleet" objektit, joihin ei tulla enää viittaamaan ohjelmassa, vapauttamaan näiden objektien viemä tila muistista ja uudelleenorganisoida "elävät" objektit muistinkäytön ja tulevien roskienkeräysten optimoimiseksi.<sup id="cite_ref-:1_49-1" class="reference"><a href="#cite_note-:1-49"><span class="cite-bracket">[</span>49<span class="cite-bracket">]</span></a></sup> </p><p>Roskienkerääjätyyppejä on useita erilaisia toteutuksia. Käytettävä roskienkerääjä riippuu käytettävissä olevista laitteiston resursseista sekä suorituskykyvaatimuksista. Roskienkerääjätyypit Javassa<sup id="cite_ref-50" class="reference"><a href="#cite_note-50"><span class="cite-bracket">[</span>50<span class="cite-bracket">]</span></a></sup>: </p> <ul><li><b>Serial Garbage Collector</b> - Suorittaa kaiken toiminnan yhdellä <a href="/wiki/S%C3%A4ie_(tietotekniikka)" class="mw-redirect" title="Säie (tietotekniikka)">säikeellä</a>. Omaa suuremmat taukoajat, mutta käyttää vähän resursseja. Sopii parhaiten yhden prosessorin systeemeihin.</li> <li><b>Parallel Garbage Collector</b> - Samankaltainen Serial Garbage Collectorin kanssa, mutta käyttää useita säikeitä.</li> <li><b>Concurrent Mark Sweep (CMS) Garbage Collector</b> (Hylätty JDK 9:ssä, poistettu JDK 14:ssä) - Vähentää roskienkeräyksen taukoaikoja suorittamalla toimintojaan sovelluksen toimiessa.</li> <li><b>Garbage First (G1) Garbage Collector</b> (Oletuksena JDK:n versiosta 9) - Parannus CMS GC:stä, syrjäyttää tämän. G1 sopii parhaiten usean prosessorin laitteisiin suurella muistikapasiteetilla.</li> <li><b>ZGC</b> (Kokeellinen JDK 11:ssä, tuotanto JDK 15:ssä) - Erittäin matalan viiveen roskankeräärä, skaalattavissa usean teratavun "<a href="/wiki/Keko_(tietorakenne)" title="Keko (tietorakenne)">keon</a>" (eng. <i>heap</i>) sovelluksiin. ZGC:n sisäinen toteutus ja käyttäytyminen poikkeavat merkittävästi muista roskankerääjistä.</li></ul> <div class="mw-heading mw-heading3"><h3 id="Tyyppimuunnokset">Tyyppimuunnokset</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=26" title="Muokkaa osiota Tyyppimuunnokset" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=26" title="Muokkaa osion lähdekoodia: Tyyppimuunnokset"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Java on staattisesti tyypitetty kieli. Välillä saattaa tulla eteen tilanne, jossa on tarve tehdä tyyppimuunnos. Tyyppimuunnoksella tarkoitetaan prosessia, jossa muutetaan muuttujan tai arvon tietotyyppi toiseksi tietotyypiksi. Tyyppimuunnos voi tapahtua automaattisesti tai manuaalisesti. </p><p>Jos tyyppimuunnoksessa tietotyypit ovat yhteensopivia, ja tavoiteltu tietotyyppi on laajempi kuin alkuperäinen tietotyyppi, tekee Java tyyppimuunnoksen automaattisesti. Esimerkiksi ”int”-tyypin muuttuja  voidaan muuttaa ”long”-tyyppiseksi muuttujaksi, sillä ”long”-tietotyypissä on tarvittava määrä muistia ”int”-tyypin muuttujan säilymiseen. Lisäksi Java muuttaa automaattisesti kokonaislukuarvon ”int” liukulukuarvoksi ”float”, kun laskee näiden kahden jakolaskun. </p><p>Jos tyyppimuunnoksessa ei voida taata täydellistä datan säilymistä, ei automaattista tyyppimuunnosta voida tehdä. Kun tyyppimuunnos ei tapahdu automaattisesti, voi tyyppimuunnoksen tehdä manuaalisesti käyttämällä tyyppimuunnosoperaattoria. Operaation nimi on pakotettu tyyppimuunnos. Esimerkiksi, jos haluat muuttaa muuttujan, jonka tietotyyppi on ”float” tietotyypiksi ”int”, voisit käyttää tyyppimuunnosoperaattoria seuraavalla tavalla: (int) float-muuttuja. Haluttu tietotyyppimuuttuja siis sijoitetaan sulkeisiin, jonka jälkeen kirjoitetaan alkuperäinen, muutettava muuttuja. Java pyrkii tekemään tyyppimuunnoksen, vaikkei se olisi kyseisessä tilanteessa mahdollista. Tällainen tilanne voi aiheuttaa ongelmia myöhemmässä vaiheessa, viimeistään ohjelman ajovaiheessa. </p><p>Tyyppimuunnos auttaa käsittelemään erilaisia tietotyyppejä ja tehostaa ohjelman suorituskykyä. Tyyppimuunnosta on kuitenkin käytettävä tarkkaavaisuutta vaatien, sillä sen väärinkäyttö voi johtaa virheisiin. Tyyppimuunnoksen yhteydessä esiintyviä yleisimpiä virheitä ovat tyyppimuunnoksen tyyppien yhteensopimattomuus sekä muunnoksen aiheuttamat tietojen menetys tai vääristyminen. Tyyppimuunnoksen käytön tarpeellisuutta onkin tarpeen harkita tapauskohtaisesti. </p> <div class="mw-heading mw-heading3"><h3 id="Suorituskyky">Suorituskyky</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=27" title="Muokkaa osiota Suorituskyky" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=27" title="Muokkaa osion lähdekoodia: Suorituskyky"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Javan ohjelmointikieli nähdään laajalti suorituskyvyltään hitaampana kuin muut nopeammat kielet, kuten C ja C++. Ongelma johtuu perustavanlaatuisesta erosta kielien rakenteessa: C ja C++ suorittavat ohjelman suoraan tietokoneen prosessorilta. Java taas avaa virtuaalikoneen (Java virtual machine, JVM) ohjelmaa varten, johtaen merkittävään suorituskyvyn menetykseen. </p><p>Java kehittää JVM:n suorituskykyä ja optimointia jatkuvasti uusissa versioissa. Vuonna 1997 Java alkoi käyttämään ajonaikaista kääntöä (Just-in-Time compilation, JIT), joka toi merkittävän parannuksen JVM:n suorituskyvyssä. </p><p>Java-ohjelman suorituskyky on siis olennaisesti sidottu paitsi itse ohjelman optimointiin myös käytössä olevaan Javan versioon. Uudemmat versiot Javan virtuaalikoneesta käyttävät tietokoneen prosessointikykyä tehokkaammiin ja ohjelman suorittaminen voi nopeutua merkittävästi vanhemmista versioista. Tämän takia Java-ohjelman suorituskykyä testattaessa on olennaista raportoida käytössä olevan JVM:n versio, myyjä, käyttöjärjestelmä sekä laitearkkitehtuuri. </p> <div class="mw-heading mw-heading3"><h3 id="Virheidenkäsittely"><span id="Virheidenk.C3.A4sittely"></span>Virheidenkäsittely</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=28" title="Muokkaa osiota Virheidenkäsittely" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=28" title="Muokkaa osion lähdekoodia: Virheidenkäsittely"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Java ohjelmointi kielenä tarjoaa laajan virhekontrolli mekanismin. Yksi päätavoista, jolla tämä saavutetaan on poikkeuksen käsittely systeemi (exception). Kun virhe tapahtuu ohjelman aikana, Java voi implementoida poikkeuksen, jossa objekti kuvastaa virhettä. Tämä systeemi mahdollistaa ohjelman käsittelemään virheet jäsennellysti eikä niin, että ohjelma kaatuisi tai tekisi hankalaksi ohjelman ajamista. </p><p>Javassa, poikkeukset käsitellään käyttäen <i>try-catch-finally</i>-block systeemiä. Try-lause sisältää koodia, joka saattaa poikkeuksen ja Catch-lause sisältää koodin, joka käsittelee poikkeuksen. Finally-lause on näiden jälkeinen toimenpide, joka tekee resurssien putsauksen, kun aiemmat lauseet ovat ajettu. </p><p>Java tarjoaa myös mekanismin, jossa <i>throw</i> ja <i>catch</i> menetelmät toteutetaan eri tavalla, jossa ohjelmoija määrittelee niiden toimenpiteet. Tämä antaa ohjelmoijille hyvän mahdollisuuden tehdä joustavaa virheiden käsittelyä Javan-ohjelmointi kielen normaalien poikkeuskäsittelyn toimenpiteiden lisäksi. </p><p>Javan ohjelmointikielellä on myös toinen tapa käsitellä virheitä ja se perustuu <i>type-safe</i> mekanismiin. Javan ohjelmointkieli on vahvasti ”näppäilty” kieli mikä tarkoittaa sitä, että muuttujien tyyppi on oltava täysin ilmoitettu siinä ajassa, kun sitä määritellään. Tämä helpottaa virheissä kuten tyyppien yhteensopimattomuudessa sekä <i>null</i>-osoittimien poikkeuksissa. </p><p>Yleisesti Java-ohjelmointikielen virheidenkäsittely mekaniikat ovat luotettavia ja näiden avulla pystytään ohjelmoimaan vakaata ja helposti käsiteltävää koodia ohjelmistoihin. </p> <div class="mw-heading mw-heading3"><h3 id="Javan_tarjoamia_kirjastoja">Javan tarjoamia kirjastoja</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=29" title="Muokkaa osiota Javan tarjoamia kirjastoja" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=29" title="Muokkaa osion lähdekoodia: Javan tarjoamia kirjastoja"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Java tarjoaa laajan skaalan erilaisia kirjastoja helpottamaan ohjelmoijien työtä. Kirjastoista yleisin ja käytetyin on Javan standardikirjasto (eng. <i>Java Standard Library</i>) joka pitää sisällään useita tärkeitä kirjastoja, kuten esimerkiksi java.lang, jo aiemmin mainittu java.util ja java.math. Javan kirjastot saadaan dynaamisesti käyttöön ajon aikana sisällyttämällä kirjastot koodin alkuun komennolla "import" ja kutsumalla kirjastojen sisältämiä komentoja osana koodia. Näin Javassa saadaan käyttöön hyvin laaja skaala komentoja vain parilla lisäsanalla. </p> <div class="mw-heading mw-heading4"><h4 id="Esimerkkikirjastoja">Esimerkkikirjastoja</h4><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=30" title="Muokkaa osiota Esimerkkikirjastoja" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=30" title="Muokkaa osion lähdekoodia: Esimerkkikirjastoja"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><b>Javan standardikirjasto</b> (eng. Java Standard Library) - Javan standardikirjasto on alun perin kehitetty tukemaan Javan sovelluskehitystä. Kirjasto on Oraclen ja sen yhteistyökumppaneiden luoma. Kirjasto sisältää monenlaisia ominaisuuksia, esimerkiksi: <ul><li>IO/NIO - ( Package java.io/java.nio ) Kirjasto määrittää ne puskurit, jotka sisältävät dataa sekä antaa yleiskatsauksen muista NIO paketeista.  </li> <li>Verkostoituminen - ( Package java.net)  </li> <li>Heijastuminen</li> <li>Samanaikaisuus</li> <li>Geneerisyys</li> <li>Skriptaus/kääntäjä</li> <li>Toiminnallinen ohjelmointi</li> <li>Java-kokoelmakehys – Sisältää erilaisia rajapintoja, jotka määrittelevät erilaisia kokoelmia ja luokkia, jotka toteuttavat niitä. Java-kokoelmakehys toimii samalla tavalla kuin kirjastot.  </li> <li>Turvallisuus</li> <li>Kirjastot, joiden avulla käyttäjä pystyy kommunikoimaan ulkoisten järjestelmien kanssa</li></ul></li></ul> <ul><li><b>java.util</b> - Tarjoaa esimerkiksi Arraylist:n jonka avulla voidaan lisätä esimerkiksi string ja int muotoista tekstiä helposti listaan .add-komennon avulla, Scanner:n jonka avulla voidaan esimerkiksi kysyä ajonaikana käytettäviä tietoja käyttäjältä, Date:n jonka avulla voidaan helposti käsitellä aikaa ja päivämääriä, sekä LinkedList:n joka tarjoaa mahdollisuuden luoda linkitetyn listan sekä GregorianCalendar:n eli kalenterin.</li> <li><b>java.math</b> - Tarjoaa paljon erilaisia laskemisessa tarvittavia funktioita, kuten Math.abs(), jolla saadaan halutun numeron itseisarvo, Math.round(), jolla saadaan pyöritettyä luku, sekä Math.log(), jolla voidaan laskea halutun luvun luonnollinen logaritmi.</li> <li><b>java.time</b> - Tarjoaa esimerkiksi hyödyllisen luokan LocalDate, jolla saadaan käyttöön paikallinen päivämäärä sekä LocalTime, jolla saadaan koodin käyttöön paikallinen aika. Mikäli haluaa molemmat, kannattaa käyttää java.time:n tarjoamaa LocalDateTime:ä, jolla saadaan molemmat käyttöön. Kaikki mainituista sisältää myös mahdolliset talvi- ja kesäajat.</li> <li><b>java.text</b> - Tarjoaa muun muassa DecimalFormat:n, jolla voidaan määrittää näytetäänkö käyttäjälle desimaalierottimena oletusarvona olevaa pistettä vai pilkkua sekä SimpleDateFormat:n jonka avulla voidaan määrittää, minkälaisessa muodossa käyttäjälle näytettävät päivämäärät näytetään.</li> <li><b>java.lang</b> - sisältää perusluokkia ja rajapintoja, jotka ovat olennaisia ohjelmointikielen suunnittelussa.</li> <li><b>java.applet</b> - Sisältää luokat, joita tarvitaan ohjelman luomiseen sekä luokat, joita ohjelma käyttää kommunikoidakseen kontekstinsa kanssa.  </li> <li><b>java.awt.font</b> - Sisältää luokkia ja rajapintoja, jotka tarjoavat erilaisia fontteja.</li> <li><b>java.awt</b> - Sisältää luokkia käyttöliittymän luomiseen sekä grafiikan ja kuvien tekemiseen.</li> <li><b>java.awt.datatransfer</b> - Sisältää luokkia ja rajapintoja, jotka mahdollistavat tietojen siirtämisen sovellusten sisällä ja niiden välillä.</li> <li><b>java.awt.geom</b> - Sisältää luokkia kaksiulotteisten geometristen objektien toimintojen määrittämiseen ja suorittamiseen.</li> <li><b>java.awt.image</b> - Sisältää luokkia kuvien luomiseen ja muokkaamiseen.</li> <li><b>java.time.format</b> - Sisältää luokkia päivämäärien ja aikojen jäsentämiseen ja tulostamiseen.</li> <li><b>java.util.zip</b> - Sisältää luokkia ZIP- ja GZIP-tiedostomuotojen lukemiseen ja kirjoittamiseen.</li> <li><b>java.swing text</b> - Sisältää luokkia ja rajapintoja, jotka käsittelevät muokattavia ja ei-muokattavia tekstikompontentteja.  </li> <li><b>Integraatiokirjastot,</b> jotka mahdollistavat sovelluksen kehittäjän kommunikoimaan ulkoisten järjestelmien kanssa: <ul><li><a href="/wiki/Java_Database_Connectivity" title="Java Database Connectivity"><b>Java Database Connectivity</b></a> <b>(JDBC)</b> API, jonka avulla kehittäjä saa yhteyden tietokantntaa</li> <li><b><a href="https://en.wikipedia.org/wiki/Java_Naming_and_Directory_Interface" class="extiw" title="en:Java Naming and Directory Interface">Java Naming and Directory Interface</a> (JNDI)</b> API, jolla kehittäjä voi hakea sekä etsiä tietoa ja resursseja olioina nimen avulla</li> <li><b><a href="https://en.wikipedia.org/wiki/Java_remote_method_invocation" class="extiw" title="en:Java remote method invocation">RMI</a></b> ja <b><a href="https://en.wikipedia.org/wiki/Common_Object_Request_Broker_Architecture" class="extiw" title="en:Common Object Request Broker Architecture">CORBA</a></b> hajautettuun sovelluskehitykseen</li> <li><b><a href="https://en.wikipedia.org/wiki/Java_Management_Extensions" class="extiw" title="en:Java Management Extensions">JMX</a></b> sovelluksien hallitsemiseen ja valvontaan</li></ul></li></ul> <ul><li><b>Käyttöliittymäkirjastot:</b> <ul><li><b><a href="/wiki/Abstract_Window_Toolkit" title="Abstract Window Toolkit">Abstract Window Toolkit (AWT),</a></b> joka tarjoaa GUI komponentteja. Kirjasto tarjoaa myös työkaluja asetella kyseisiä komponentteja sekä käsitellä kyseisiin komponentteihin liittyviä tapahtumia</li> <li><b><a href="/wiki/Swing_(Java)" title="Swing (Java)">Swing</a></b> kirjastot, jotka ovat rakennettu AWT:n päälle, mutta tarjoavat ei-natiiveja toteutuksia AWT pienoisohjelmasta</li> <li>Ohjelmointirajapintoja äänen tallentamiseen, prosessointiin sekä toistoon</li> <li><b><a href="/wiki/JavaFX" title="JavaFX">JavaFX</a></b>, joka tarjoaa alustan työpöytäsovellusten sekä monipuolisten verkkosovellusten luomiseen</li></ul></li></ul> <ul><li><b><a href="https://en.wikipedia.org/wiki/Java_Web_Start" class="extiw" title="en:Java Web Start">Java Web Start</a></b>, joka mahdollistaa Java ohjelmien jakamisen tehokkaasti loppukäyttäjille Internetissä</li> <li>Kirjastoja ohjelmien lisensointiin ja dokumentoimiseen</li> <li>Lisäosia, jotka mahdollistavat sovelmien ajamisen selaimessa</li> <li>Ohjelmistoalusta riippuvainen toteutus Javan virtuaalikoneesta, jonka avulla Java-kirjastojen ja kolmannen osapuolen sovellusten tavukoodit suoritetaan</li></ul> <ul><li><b>Kirjastoja data-analytiikkaan, koneoppimiseen ja tekoälyyn:</b> <ul><li><b>Deeplearnin4j – DL4J</b> kirjasto koneoppimiseen ja tekoälyyn, jolla on laaja tuki syväoppimisalgoritmeille.</li> <li><b>Java Statistical Analysis Tool – JSAT</b> kirjasto tilastolliseen laskentaan ja koneoppimiseen</li> <li><b>Java Machine Learning Library – Java-ML</b> kirjasto koneoppimiseen ja tiedonlouhintaan. Kirjaston tarjoamia algoritmeja ovat mm. datan klusterointi, klassifiointi sekä datan suodatus algoritmit.</li></ul></li></ul> <div class="mw-heading mw-heading3"><h3 id="Ulkoiset_Java_kirjastot">Ulkoiset Java kirjastot</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=31" title="Muokkaa osiota Ulkoiset Java kirjastot" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=31" title="Muokkaa osion lähdekoodia: Ulkoiset Java kirjastot"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Java tarjoaa myös mahdollisuuden käyttää ulkoisia kirjastoja. Kirjastot on luotu helpottamaan sovellusten kehitystä tarjoamalla erilaisia työkaluja ja valmiiksi kirjoitettua koodia. Niitä voidaan lisätä omaan ohjelmaan sen toiminnallisuuden laajentamiseksi tai koodin ongelmakohtien ratkaisemiseksi. Kirjastojen tarkoitus on mahdollistaa ohjelmoijan keskittyminen sovelluksen rakenteeseen matalatasoisen toteutuksen sijasta. </p><p>Esimerkkikirjastoja: </p> <ul><li>Spring<sup id="cite_ref-51" class="reference"><a href="#cite_note-51"><span class="cite-bracket">[</span>51<span class="cite-bracket">]</span></a></sup> on kevyt mutta tehokas Java-sovelluskehityskehys, jota käytetään yleisesti JEE (Java Enterprise Edition) -sovelluksissa. Se tarjoaa erilaisia moduuleja, kuten Spring Security, Spring MVC, Spring Batch, Spring ORM, Spring Boot ja Spring Cloud. Lisäksi Spring tukee Dependency Injection -integraatiota, mikä mahdollistaa riippuvuuksien ratkaisemisen joustavasti. Spring pystyy myös ratkaisemaan riippuvuudet, sillä se tukee Dependency Injection -integraatiota.</li></ul> <ul><li>Hibernate<sup id="cite_ref-52" class="reference"><a href="#cite_note-52"><span class="cite-bracket">[</span>52<span class="cite-bracket">]</span></a></sup> helpottaa tietokantaan pääsyä ja hallintaa sekä tarjoaa ominaisuuksia, kuten SQL-kyselyjen käsittelyä, välimuistitusta ja suorituskyvyn optimointia. Hibernate mahdollistaa myös oletusarvoista SQL-tyyppien ohittamista, Java Enumien mappamisen sarakkeisiin sekä yhden ominaisuuden mappamisen useaan sarakkeeseen.</li></ul> <ul><li>Grails<sup id="cite_ref-53" class="reference"><a href="#cite_note-53"><span class="cite-bracket">[</span>53<span class="cite-bracket">]</span></a></sup> tarjoaa yhtenäisen kehitysympäristön, joka hyödyntää olemassa olevia Java-teknologioita, kuten Hibernatea ja Springiä, yhden käyttöliittymän alla. Grails tarjoaa myös dokumentaatiota tärkeimmistä osista, kuten pysyvyyskehyksestä, GSP-templaattikielen käytöstä ja dynaamisista tag-kirjastoista. Lisäksi Grails tarjoaa esimerkkisovelluksia, kehysarkkitehtuurin laajennettavuuden sekä tuen Ajaxille.</li></ul> <ul><li>Play<sup id="cite_ref-54" class="reference"><a href="#cite_note-54"><span class="cite-bracket">[</span>54<span class="cite-bracket">]</span></a></sup> on nykyaikainen ja kevyt web-kehys, joka keskittyy kehittäjien tuottavuuteen ja tehokkuuteen. Se tukee RESTful-arkkitehtuuria, sisältää yksikkötestauksen tukemisen JUnitin ja Seleniumin avulla, tarjoaa monia sisäänrakennettuja elementtejä ja tukee asynkronista I/O:ta.</li></ul> <div class="mw-heading mw-heading2"><h2 id="Erot_muihin_kieliin">Erot muihin kieliin</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=32" title="Muokkaa osiota Erot muihin kieliin" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=32" title="Muokkaa osion lähdekoodia: Erot muihin kieliin"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Ohjelmointikieliä on paljon ja monet niistä jakavatkin samanlaisia ominaisuuksia. <a href="/wiki/C_(ohjelmointikieli)" title="C (ohjelmointikieli)">C</a>-kieli on rakenteellista ja proseduraalista, kun taas sen jälkeläinen <a href="/wiki/C%2B%2B" title="C++">C++</a> tarjoaa laajemman valikoiman ominaisuuksia ja kielen toiminnallisuus pohjautuu huomattavasti enemmän oliopohjaiseen ohjelmointiin kuten Java. JavaScriptiä taas kuvaillaan enemmän C:n kaltaisena. </p><p>Java-ohjelmointi pohjautuu hyvin vahvasti useiden eri luokkien, metodien, olioiden ja niille määritettyjen funktioiden suorittamiseen. Filosofiassaan kieli noudattaa <a href="/w/index.php?title=SOLID&action=edit&redlink=1" class="new" title="SOLID (sivua ei ole)">SOLID</a>-periaatetta. </p> <div class="mw-heading mw-heading3"><h3 id="Java_ja_JavaScript">Java ja JavaScript</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=33" title="Muokkaa osiota Java ja JavaScript" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=33" title="Muokkaa osion lähdekoodia: Java ja JavaScript"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Vaikka kielet Java ja JavaScript jakavatkin osittain saman nimen, ovat ne hyvin erilaisia ohjelmointikieliä toimivuudeltaan ja ajatusmaailmaltaan. Java kääntyy Java-bittikoodiksi, jonka takia Javaa suoritetaan useimmiten <a href="/wiki/Java-virtuaalikone" title="Java-virtuaalikone">JVM</a> (Java Virtual Machine) sisällä, kun taas JavaScript suoritetaan selaimen puolella. Muuttamalla koodin Java-biteiksi, Javan oma virtuaalikone mahdollistaa paremman turvallisuuden perustasolla ilman ylimääräistä koodia. JavaScriptiä käytetäänkin usein front end-suunnittelussa ja Javaa back end-suunnittelussa.<sup id="cite_ref-55" class="reference"><a href="#cite_note-55"><span class="cite-bracket">[</span>55<span class="cite-bracket">]</span></a></sup> </p><p>Java on kieli, joka tarkistaa static-tietotyyppejä ja JavaScript dynaamisia. Javan kirjoitus voi olla hieman työläämpää, koska siinä voi joutua kirjoittamaan enemmän ja pitämään huolta suunnittelun ohella, että tietotyyppi on määritelty oikein. JavaScript on kielenä nopeampi. Sen scripti tarkastetaan sillä hetkellä, kun sitä suoritetaan. JavaScriptin koodia on helpompi ymmärtää, sillä se kirjoitetaan yksinkertaisena tekstinä. Sitä ei ole käännetty kuten Javassa tehdään. </p><p>JavaScriptiä käytetään pääosin nettiselainten suunnitteluun ja toteutukseen ja sen päätehtävä on tehdä sivuista vuorovaikutteisempia kuin perinteisesti koodatut yksinkertaiset sivut. </p><p>Javan suunnittelu ja kirjoitus vaatii <a href="/wiki/Java_Development_Kit" title="Java Development Kit">JDK</a>:n (Java Development Kit), joten sitä voidaan mieltää hieman edistyksellisempänä ohjelmointikielenä. </p> <div class="mw-heading mw-heading2"><h2 id="Uuden_luokan_tekeminen_ja_käyttäminen._Luokan_rakentaja_ja_metodien_yksinkertaista_käyttöä."><span id="Uuden_luokan_tekeminen_ja_k.C3.A4ytt.C3.A4minen._Luokan_rakentaja_ja_metodien_yksinkertaista_k.C3.A4ytt.C3.B6.C3.A4."></span>Uuden luokan tekeminen ja käyttäminen. Luokan rakentaja ja metodien yksinkertaista käyttöä.</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=34" title="Muokkaa osiota Uuden luokan tekeminen ja käyttäminen. Luokan rakentaja ja metodien yksinkertaista käyttöä." class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=34" title="Muokkaa osion lähdekoodia: Uuden luokan tekeminen ja käyttäminen. Luokan rakentaja ja metodien yksinkertaista käyttöä."><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Luokka, eli olio. Tarkoitus on saada koodi selkeämmin hallittavaan pakettiin, että koodi olisi helpommin muokattavissa ja luettavissa. </p><p>Ohessa lyhyt esimerkki kahteen tiedostoon rakennetusta ohjelmasta, missä käytetään uutta luokkaa, rakentajaa ja sen metodeita. </p> <div class="mw-heading mw-heading3"><h3 id="Pää_tiedosto"><span id="P.C3.A4.C3.A4_tiedosto"></span>Pää tiedosto</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=35" title="Muokkaa osiota Pää tiedosto" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=35" title="Muokkaa osion lähdekoodia: Pää tiedosto"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Esimerkki. </p> <div class="mw-highlight mw-highlight-lang-java mw-content-ltr mw-highlight-lines" dir="ltr"><pre><span></span><span class="linenos" data-line="1"></span><span class="kn">package</span><span class="w"> </span><span class="nn">com.example</span><span class="p">;</span> <span class="linenos" data-line="2"></span> <span class="linenos" data-line="3"></span><span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">App</span><span class="w"> </span> <span class="linenos" data-line="4"></span><span class="p">{</span> <span class="linenos" data-line="5"></span><span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="w"> </span><span class="n">String</span><span class="o">[]</span><span class="w"> </span><span class="n">args</span><span class="w"> </span><span class="p">){</span> <span class="linenos" data-line="6"></span><span class="w"> </span><span class="n">Animal</span><span class="w"> </span><span class="n">siili1</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Animal</span><span class="p">();</span><span class="w"> </span><span class="c1">// Luodaan siili1 niminen olio. Rakentajaa käytetään ilman parametrejä,</span> <span class="linenos" data-line="7"></span><span class="w"> </span><span class="c1">// jolloin eläin saa vakio parametrit.</span> <span class="linenos" data-line="8"></span><span class="w"> </span><span class="n">Animal</span><span class="w"> </span><span class="n">siili2</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Animal</span><span class="p">(</span><span class="s">"Pekka"</span><span class="p">,</span><span class="mi">9</span><span class="p">);</span><span class="w"> </span><span class="c1">//Luodaan siili2 niminen olio ja käytetään paramerillistä rakentajaa.</span> <span class="linenos" data-line="9"></span><span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">"Siilin1 nimi: "</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">siili1</span><span class="p">.</span><span class="na">getName</span><span class="p">());</span><span class="c1">//Tulostetaan siili1 nimi</span> <span class="linenos" data-line="10"></span><span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">"Siilin2 ikä: "</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">siili2</span><span class="p">.</span><span class="na">getAge</span><span class="p">());</span><span class="w"> </span><span class="c1">//Tulostetaan siili2 ikä</span> <span class="linenos" data-line="11"></span><span class="w"> </span><span class="n">siili1</span><span class="p">.</span><span class="na">setName</span><span class="p">(</span><span class="s">"Maija"</span><span class="p">);</span><span class="w"> </span><span class="c1">//Siilin nimeä voidaan myös vaihtaa lennosta. </span> <span class="linenos" data-line="12"></span><span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="n">siili1</span><span class="p">.</span><span class="na">getName</span><span class="p">());</span> <span class="linenos" data-line="13"></span><span class="w"> </span><span class="n">siili1</span><span class="p">.</span><span class="na">printAnimalSpecs</span><span class="p">();</span><span class="w"> </span><span class="c1">//Tulostetaan siilin1 tiedot käyttäen metodia.</span> <span class="linenos" data-line="14"></span><span class="w"> </span><span class="n">siili2</span><span class="p">.</span><span class="na">printAnimalSpecs</span><span class="p">();</span><span class="w"> </span><span class="c1">//Tulostetaan siilin2 tiedot käyttäen metodia.</span> <span class="linenos" data-line="15"></span><span class="w"> </span><span class="p">}</span> <span class="linenos" data-line="16"></span><span class="p">}</span> </pre></div> <p>Olioita voidaan luoda tarpeen mukaan. </p> <div class="mw-heading mw-heading3"><h3 id="Luokkatiedosto._Luokan_ja_metodien_tekeminen">Luokkatiedosto. Luokan ja metodien tekeminen</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=36" title="Muokkaa osiota Luokkatiedosto. Luokan ja metodien tekeminen" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=36" title="Muokkaa osion lähdekoodia: Luokkatiedosto. Luokan ja metodien tekeminen"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Esimerkki. </p> <div class="mw-highlight mw-highlight-lang-java mw-content-ltr mw-highlight-lines" dir="ltr"><pre><span></span><span class="linenos" data-line="1"></span><span class="kn">package</span><span class="w"> </span><span class="nn">com.example</span><span class="p">;</span> <span class="linenos" data-line="2"></span> <span class="linenos" data-line="3"></span><span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">Animal</span><span class="w"> </span><span class="p">{</span> <span class="linenos" data-line="4"></span><span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="s">"Heikki"</span><span class="p">;</span><span class="w"> </span><span class="c1">//Asetettu String tyyppinen nimimuuttuja "Heikki"</span> <span class="linenos" data-line="5"></span><span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">age</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">15</span><span class="p">;</span><span class="w"> </span><span class="c1">//Asetettu int tyyppinen ikämuuttuja 15.</span> <span class="linenos" data-line="6"></span> <span class="linenos" data-line="7"></span><span class="w"> </span><span class="c1">//Voidaan tehdä useampi rakentaja, kunhan sisään tulevat parametrit eroavat toisistaan.</span> <span class="linenos" data-line="8"></span><span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="nf">Animal</span><span class="p">(){</span><span class="w"> </span><span class="c1">//Rakentaja ilman parametrejä. Nimeksi jää tässätapauksessa nimi "Heikki" ja ikä 15, ellei niitä erikseen muuteta</span> <span class="linenos" data-line="9"></span><span class="w"> </span><span class="p">}</span> <span class="linenos" data-line="10"></span><span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="nf">Animal</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">name</span><span class="p">,</span><span class="kt">int</span><span class="w"> </span><span class="n">ika</span><span class="p">){</span><span class="w"> </span><span class="c1">//Rakentaja parametreillä.</span> <span class="linenos" data-line="11"></span><span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">name</span><span class="p">;</span><span class="w"> </span><span class="c1">//Sanaa this.name kertoo kääntäjälle, että käytetään tämän luokan muuttujaa name.</span> <span class="linenos" data-line="12"></span><span class="w"> </span><span class="n">age</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">ika</span><span class="p">;</span><span class="w"> </span><span class="c1">//Sama voidaan tehdä myös, jos sisään tulevan parametrin nimeä muutetaan erinimiseksi.</span> <span class="linenos" data-line="13"></span><span class="w"> </span><span class="p">}</span> <span class="linenos" data-line="14"></span><span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="nf">getName</span><span class="p">(){</span><span class="w"> </span><span class="c1">//saadaan haettua Animal olion nimi.</span> <span class="linenos" data-line="15"></span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">name</span><span class="p">;</span> <span class="linenos" data-line="16"></span><span class="w"> </span><span class="p">}</span> <span class="linenos" data-line="17"></span><span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">setName</span><span class="p">(</span><span class="n">String</span><span class="w"> </span><span class="n">name</span><span class="p">){</span><span class="w"> </span><span class="c1">//voidaan asettaa Animal olion nimi.</span> <span class="linenos" data-line="18"></span><span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">name</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">name</span><span class="p">;</span> <span class="linenos" data-line="19"></span><span class="w"> </span><span class="k">return</span><span class="p">;</span> <span class="linenos" data-line="20"></span><span class="w"> </span><span class="p">}</span> <span class="linenos" data-line="21"></span><span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">getAge</span><span class="p">(){</span><span class="w"> </span><span class="c1">//Voidaan hakea Animal olion ikä.</span> <span class="linenos" data-line="22"></span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">age</span><span class="p">;</span> <span class="linenos" data-line="23"></span><span class="w"> </span><span class="p">}</span> <span class="linenos" data-line="24"></span><span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">setAge</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">age</span><span class="p">){</span><span class="w"> </span><span class="c1">//Voidaan asettaaa Animal olion ikä.</span> <span class="linenos" data-line="25"></span><span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="na">age</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">age</span><span class="p">;</span> <span class="linenos" data-line="26"></span><span class="w"> </span><span class="k">return</span><span class="p">;</span> <span class="linenos" data-line="27"></span><span class="w"> </span><span class="p">}</span> <span class="linenos" data-line="28"></span><span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">printAnimalSpecs</span><span class="p">(){</span><span class="c1">//Tulostetaan siilin tiedot.</span> <span class="linenos" data-line="29"></span><span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">println</span><span class="p">(</span><span class="s">"Nimi: "</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">name</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="s">" ikä: "</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">age</span><span class="p">);</span> <span class="linenos" data-line="30"></span><span class="w"> </span><span class="p">}</span> <span class="linenos" data-line="31"></span><span class="p">}</span> </pre></div> <p>Tuloste:<br />Siilin1 nimi: Heikki<br />Siilin2 ikä: 9<br />Maija<br />Nimi: Maija ikä: 15<br />Nimi: Pekka ikä: 9<br /><br />Metodeita tehdään sen mukaan, että mitä tietoja halutaan saada luokasta ulos, tai luokkaan sisään. </p> <div class="mw-heading mw-heading3"><h3 id="Singleton">Singleton</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=37" title="Muokkaa osiota Singleton" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=37" title="Muokkaa osion lähdekoodia: Singleton"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Singleton on Javassa käytetty suunnittelumalli, jonka avulla voidaan varmistaa, että singelton-luokassa on vain yksi olio (luokan ilmentymä) kerrallaan. Avaintekijöinä singleton-luokan luomisessa toimii yksityinen luokkamuuttuja, yksityinen rakentaja ja julkinen metodi siihen käsiksi pääsemiseen. Luokan rakentaja määritellään yksityiseksi, jotta uusien olioiden luominen luokan ulkopuolella voidaan estää, ja yksityisellä luokkamuuttujalla (määrittelyllä <i>private static</i>) päästään käsiksi luotuun olioon. Julkisella luokkametodilla (määrittelyllä <i>public static</i>) luodaan pääsy yksityiseksi määriteltyyn olioon. Nimenomaan tämän julkisen luokkametodin sisällä on toiminnallisuus, jolla useampien olioiden luominen luokan ulkopuolella voidaan estää. </p><p> Yksinkertainen esimerkki singleton-luokan luomisesta voi olla esimerkiksi seuraavanlainen:</p><div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">singletonExample</span><span class="p">{</span> <span class="w"> </span> <span class="w"> </span><span class="c1">//yksityinen luokkamuuttuja, jonka arvoksi määritellään aluksi "null"</span> <span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="n">Storage</span><span class="w"> </span><span class="n">storage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kc">null</span><span class="p">;</span> <span class="w"> </span> <span class="w"> </span><span class="c1">//yksityinen rakentaja</span> <span class="w"> </span><span class="kd">private</span><span class="w"> </span><span class="nf">Storage</span><span class="p">(){</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span> <span class="w"> </span><span class="c1">//Luokkametodi, joka tarkistaa onko luokkamuuttuja Storage jo tehty.</span> <span class="w"> </span><span class="c1">//Jos Storagen arvo on edelleen "null" eli sitä ei ole vielä luotu, luodaan</span> <span class="w"> </span><span class="c1">//se tässä metodissa ja palautetaan se. Jos Storage on jo olemassa, </span> <span class="w"> </span><span class="c1">//palauttaa metodi kyseisen valmiiksi olemassa olevan Storagen.</span> <span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="n">Storage</span><span class="w"> </span><span class="nf">getInstance</span><span class="p">(){</span> <span class="w"> </span><span class="k">if</span><span class="p">(</span><span class="n">storage</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="kc">null</span><span class="p">){</span> <span class="w"> </span><span class="n">storage</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Storage</span><span class="p">();</span> <span class="w"> </span><span class="p">}</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">storage</span><span class="p">;</span> <span class="w"> </span><span class="p">}</span> <span class="p">}</span> </pre></div><p>Singleton-luokan ongelmana on kuitenkin esimerkiksi sen globaalia muuttujaa muistuttava luonne. Kaikilla luokilla on pääsy muuttujaan julkisen instanssin vuoksi, mutta luokkien välisiä riippuvuuksia on vaikea määrittää, koska singelton-luokan yksityisellä rakentajalla ei ole niitä. Luokilla kuitenkin on riippuvuus, jos toinen luokka käyttää toisen instanssia. </p><p>Singleton-luokkaa käytetään usein tietokantoja käsittelevissä ohjelmissa. Käytännön näkökulmasta singelton luokka toimii niin, että koko applikaatio, ohjelma tms. käyttää vain yhtä ja samaa tietokannan ilmentymää sen kaikissa toiminnoissa. Tämä ehkäisee virheiden ja poikkeusten esiintymistä, koska aina luotaessa uusi ilmentymä nämä ovat mahdollisia. Lisäksi saman ilmentymän käyttäminen nopeuttaa tiedonhakua ja sen palauttamista tietokannasta.<br /> </p> <div class="mw-heading mw-heading2"><h2 id="Säikeet"><span id="S.C3.A4ikeet"></span>Säikeet</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=38" title="Muokkaa osiota Säikeet" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=38" title="Muokkaa osion lähdekoodia: Säikeet"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Javassa voi käynnistää käyttöjärjestelmän tukemana tavallista ohjelmaprosessia kevyempiä säikeitä. Säikeen käyttämät resurssit kuuluvat säikeen käynnistävälle prosessille. Yksittäinen prosessi voi käynnistää yhden tai suuren määrän säikeitä yhdessä tai useammassa suoritinytimessä käyttöjärjestelmä- ja resurssirajoitteiden puitteissa. Säie on yksi ohjelman suoritusketjuista, joka voi toimia samanaikaisesti muiden säikeiden kanssa. Säikeiden käyttö sallii moniajo-ohjelmoinnin, joka voi parantaa ohjelman suorituskykyä. Javan Thread -luokkaa käytetään säikeiden luomiseen. Kullakin säikeellä on oma suorituskaista, joka voi toimia samanaikaisesti muiden säikeiden kanssa. </p><p>Esimerkki. </p><p>Oheinen koodiesimerkki luo 5 säiettä ja jokainen niistä tulostaa aloitus- ja lopetusaikansa. Säikeet tallentavat aloitusajan, odottavat satunnaisen ajan ja tallentavat lopetusaikansa. Ohjelma käyttää Thread-luokan sleep -metodia odottamiseen. Taulukkoon tallennetut säikeet käynnistetään for-silmukan avulla. Säikeet käynnistetään samanaikaisesti, mutta niiden suoritusjärjestys ei ole ennalta määrätty. Lopuksi odotetaan, että kaikki säikeet ovat suorittaneet loppuun ennen kuin ohjelma päättyy. Tämä tehdään Thread-luokan join-metodilla, joka pysäyttää nykyisen säikeen suorituksen, kunnes liittyvä säie on suorittanut loppuun. Ilman join-metodia ohjelma saattaisi lopettaa liian aikaisin, kun jotkut säikeet vielä suorittavat. </p> <div class="mw-highlight mw-highlight-lang-java mw-content-ltr mw-highlight-lines" dir="ltr"><pre><span></span><span class="linenos" data-line="1"></span><span class="kn">import</span><span class="w"> </span><span class="nn">java.util.Date</span><span class="p">;</span> <span class="linenos" data-line="2"></span><span class="kn">import</span><span class="w"> </span><span class="nn">java.text.SimpleDateFormat</span><span class="p">;</span> <span class="linenos" data-line="3"></span> <span class="linenos" data-line="4"></span><span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">Saietesti</span><span class="w"> </span><span class="p">{</span> <span class="linenos" data-line="5"></span><span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">main</span><span class="p">(</span><span class="n">String</span><span class="o">[]</span><span class="w"> </span><span class="n">args</span><span class="p">)</span><span class="w"> </span><span class="kd">throws</span><span class="w"> </span><span class="n">InterruptedException</span><span class="w"> </span><span class="p">{</span> <span class="linenos" data-line="6"></span><span class="w"> </span><span class="n">Thread</span><span class="o">[]</span><span class="w"> </span><span class="n">saikeet</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Thread</span><span class="o">[</span><span class="mi">5</span><span class="o">]</span><span class="p">;</span><span class="w"> </span><span class="c1">// luodaan taulukko säikeitä varten</span> <span class="linenos" data-line="7"></span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">saikeet</span><span class="p">.</span><span class="na">length</span><span class="p">;</span><span class="w"> </span><span class="n">i</span><span class="o">++</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="linenos" data-line="8"></span><span class="w"> </span><span class="kd">final</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span><span class="w"> </span><span class="c1">// säikeiden numerointi</span> <span class="linenos" data-line="9"></span><span class="w"> </span><span class="n">saikeet</span><span class="o">[</span><span class="n">i</span><span class="o">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">Thread</span><span class="p">(()</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="c1">// luodaan uusi säie</span> <span class="linenos" data-line="10"></span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">aloitettu</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">SimpleDateFormat</span><span class="p">(</span><span class="s">"HH:mm:ss.SSS"</span><span class="p">).</span><span class="na">format</span><span class="p">(</span><span class="k">new</span><span class="w"> </span><span class="n">Date</span><span class="p">());</span><span class="w"> </span><span class="c1">// tallennetaan aloitusaika</span> <span class="linenos" data-line="11"></span><span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">printf</span><span class="p">(</span><span class="s">"Säie %d aloitettu: %s\n"</span><span class="p">,</span><span class="w"> </span><span class="n">j</span><span class="p">,</span><span class="w"> </span><span class="n">aloitettu</span><span class="p">);</span><span class="w"> </span><span class="c1">// tulostetaan aloitusaika</span> <span class="linenos" data-line="12"></span><span class="w"> </span><span class="k">try</span><span class="w"> </span><span class="p">{</span> <span class="linenos" data-line="13"></span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">odota</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="p">)</span><span class="w"> </span><span class="p">(</span><span class="n">Math</span><span class="p">.</span><span class="na">random</span><span class="p">()</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="mi">9000</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1000</span><span class="p">);</span><span class="w"> </span><span class="c1">// arvotaan odotusaika väliltä 1-10 sekuntia</span> <span class="linenos" data-line="14"></span><span class="w"> </span><span class="n">Thread</span><span class="p">.</span><span class="na">sleep</span><span class="p">(</span><span class="n">odota</span><span class="p">);</span><span class="w"> </span><span class="c1">// nukutetaanaan säiettä odotusajan verran</span> <span class="linenos" data-line="15"></span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">catch</span><span class="w"> </span><span class="p">(</span><span class="n">InterruptedException</span><span class="w"> </span><span class="n">e</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="linenos" data-line="16"></span><span class="w"> </span><span class="n">e</span><span class="p">.</span><span class="na">printStackTrace</span><span class="p">();</span> <span class="linenos" data-line="17"></span><span class="w"> </span><span class="p">}</span> <span class="linenos" data-line="18"></span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">lopetettu</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">new</span><span class="w"> </span><span class="n">SimpleDateFormat</span><span class="p">(</span><span class="s">"HH:mm:ss.SSS"</span><span class="p">).</span><span class="na">format</span><span class="p">(</span><span class="k">new</span><span class="w"> </span><span class="n">Date</span><span class="p">());</span><span class="w"> </span><span class="c1">// tallennetaan lopetusaika</span> <span class="linenos" data-line="19"></span><span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="na">out</span><span class="p">.</span><span class="na">printf</span><span class="p">(</span><span class="s">"Säie %d lopetettu: %s\n"</span><span class="p">,</span><span class="w"> </span><span class="n">j</span><span class="p">,</span><span class="w"> </span><span class="n">lopetettu</span><span class="p">);</span><span class="w"> </span><span class="c1">// tulostetaan lopetusaika</span> <span class="linenos" data-line="20"></span><span class="w"> </span><span class="p">});</span> <span class="linenos" data-line="21"></span><span class="w"> </span><span class="n">saikeet</span><span class="o">[</span><span class="n">i</span><span class="o">]</span><span class="p">.</span><span class="na">start</span><span class="p">();</span><span class="w"> </span><span class="c1">// käynnistetään säie</span> <span class="linenos" data-line="22"></span><span class="w"> </span><span class="p">}</span> <span class="linenos" data-line="23"></span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">Thread</span><span class="w"> </span><span class="n">saie</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">saikeet</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> <span class="linenos" data-line="24"></span><span class="w"> </span><span class="n">saie</span><span class="p">.</span><span class="na">join</span><span class="p">();</span><span class="w"> </span><span class="c1">// odotetaan, että kaikki säikeet ovat suorittaneet loppuun ennen kuin ohjelma päättyy</span> <span class="linenos" data-line="25"></span><span class="w"> </span><span class="p">}</span> <span class="linenos" data-line="26"></span><span class="w"> </span><span class="p">}</span> <span class="linenos" data-line="27"></span><span class="p">}</span> </pre></div> <div class="mw-highlight mw-highlight-lang-bat mw-content-ltr mw-highlight-lines" dir="ltr"><pre><span></span><span class="linenos" data-line="1"></span><span class="p">></span> java Saietesti <span class="linenos" data-line="2"></span>Säie 4 aloitettu: 20:38:42.394 <span class="linenos" data-line="3"></span>Säie 5 aloitettu: 20:38:42.397 <span class="linenos" data-line="4"></span>Säie 2 aloitettu: 20:38:42.397 <span class="linenos" data-line="5"></span>Säie 3 aloitettu: 20:38:42.397 <span class="linenos" data-line="6"></span>Säie 1 aloitettu: 20:38:42.405 <span class="linenos" data-line="7"></span>Säie 1 lopetettu: 20:38:43.808 <span class="linenos" data-line="8"></span>Säie 5 lopetettu: 20:38:47.258 <span class="linenos" data-line="9"></span>Säie 2 lopetettu: 20:38:49.158 <span class="linenos" data-line="10"></span>Säie 4 lopetettu: 20:38:49.985 <span class="linenos" data-line="11"></span>Säie 3 lopetettu: 20:38:52.153 </pre></div> <div class="mw-heading mw-heading2"><h2 id="Javan_käyttö_Java-alustan_ulkopuolella"><span id="Javan_k.C3.A4ytt.C3.B6_Java-alustan_ulkopuolella"></span>Javan käyttö Java-alustan ulkopuolella</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=39" title="Muokkaa osiota Javan käyttö Java-alustan ulkopuolella" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=39" title="Muokkaa osion lähdekoodia: Javan käyttö Java-alustan ulkopuolella"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-heading mw-heading3"><h3 id="Android">Android</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=40" title="Muokkaa osiota Android" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=40" title="Muokkaa osion lähdekoodia: Android"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Android OS on suurelta määrin kirjoitettu C ohjelmointikielellä, mutta Android SDK (Androidin ohjelmistokehityspaketti) käyttää kuitenkin Java kieltä sovellusten kehityksen perustana, mutta ei kuitenkaan käytä Javan omia standardeja (GUI, SE, ME) tai muita vakiintuneita Java standardeja. Samalla Android SDK:n tukema tavukoodi ei ole yhteensopiva Javan tavukoodin kanssa sekä Android SDK toimii vain omalla virtuaalikoneellaan, joka on suunniteltu älypuhelimille ja tableteille.<sup id="cite_ref-56" class="reference"><a href="#cite_note-56"><span class="cite-bracket">[</span>56<span class="cite-bracket">]</span></a></sup> Android Studio IDE (Integrated Deveplopment Environment) on Android sovellusten virallinen ohjelmointiympäristö, mutta muitakin ohjelmointiympäristöjä voidaan käyttää vapaasti Android sovelluksien kehittämiseen.<sup id="cite_ref-57" class="reference"><a href="#cite_note-57"><span class="cite-bracket">[</span>57<span class="cite-bracket">]</span></a></sup> Android Studiossa kehittäjä voi luoda emulaattoreita Android OS:ää käyttävistä puhelimista ja testata omia Java-sovelluksiaan näiden emulaattoreiden avulla. </p><p>Koko Android OS:n ominaisuusvalikoima on käytettävissä Java ohjelmointikielellä kirjoitettujen ohjelmointirajapintojen (API) kautta käyttäjille. Näitä rajapintoja voidaan pitää Android sovelluksien ns. rakennuspalikoina, joilla voidaan rakentaa sovellusten käyttöliittymä ja ohjata sen toimintoja. Kyseisiä rajapintoja ovat seuraavat:<sup id="cite_ref-58" class="reference"><a href="#cite_note-58"><span class="cite-bracket">[</span>58<span class="cite-bracket">]</span></a></sup> </p> <ul><li><b>Tarkastelu järjestelmä</b> (View System), jolla rakennetaan Android sovelluksen käyttöliittymä, käyttäen erilaisia vekottimia (Widgets), kuten esim. nappuloita, listoja, laatikoita ja tekstikenttiä sekä palkkeja.</li> <li><b>Tehtävienhallitsija</b> (Resource Manager), jolla voidaan päästä käsiksi paikallisiin teksteihin, grafiikoihin tai asetteluihin.</li> <li><b>Huomautustenhallitsija</b> (Notification Manager) mahdollistaa sovellusten esitellä mukautettuja huomautuksia käyttäjille.</li> <li><b>Toiminnallisuudenhallitsija</b> (Activity Manager), jolla voidaan hallita sovellusten elinkaarta sekä mahdollistaa navigoinnin sovelluksen eri tehtävien välillä.</li> <li><b>Sisällön tarjoaja</b> (Content Provider) mahdollistaa sovellusten datan jakamisen muiden sovellusten välillä, kuten esim. yhteistietojen välittämisen toisesta sovelluksesta toiseen.</li></ul> <p><b>Erimielisyys</b> </p><p>Oraclen ja Googlen välillä käytiin oikeudellista kiistaa Javan API:en (sovellusliittymien) ja lähdekoodin tekijänoikeuksista. </p><p>Oracle vaati vahingonkorvauksia Googlelta, joka puolestaan perusteli API:en käytön olleen kohtuuden rajoissa. Kaksi piirituomioistuinta päätti asiasta Googlen eduksi mutta vetoomustuomioistuin kumosi molemmat päätökset. Asiaa käytiin läpi vuodesta 2012 vuoden 2021 kevääseen asti, jolloin lopullisessa ratkaisussa korkein oikeus päätti API:en käytön olleen Googlen osalta kohtuullista. Vaikka se kumosi aiemman päätöksen, lopullinen ratkaisu jätti huomioimatta API:en suojaamisen tekijänoikeuksilla. </p><p>Tapaus toimi kiinnostavana esimerkkinä muille alalla toimijoille, sillä monissa tietokoneohjelmissa ja ohjelmistoissa (erityisesti avoimen lähteen) on vastaavasti hyödynnetty API:ja muista tuotteista esimerkiksi ohjelmien yhteensopivuuden helpottamiseksi.<sup id="cite_ref-59" class="reference"><a href="#cite_note-59"><span class="cite-bracket">[</span>59<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading2"><h2 id="Kritiikki">Kritiikki</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=41" title="Muokkaa osiota Kritiikki" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=41" title="Muokkaa osion lähdekoodia: Kritiikki"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Javan kritiikki koskee sen geneerisen ohjelmoinnin toteutusta<sup id="cite_ref-60" class="reference"><a href="#cite_note-60"><span class="cite-bracket">[</span>60<span class="cite-bracket">]</span></a></sup>, nopeutta<sup id="cite_ref-61" class="reference"><a href="#cite_note-61"><span class="cite-bracket">[</span>61<span class="cite-bracket">]</span></a></sup>, etumerkittömien <a href="/wiki/Kokonaisluku_(tietotekniikka)" title="Kokonaisluku (tietotekniikka)">kokonaislukujen</a> käsittelyä<sup id="cite_ref-62" class="reference"><a href="#cite_note-62"><span class="cite-bracket">[</span>62<span class="cite-bracket">]</span></a></sup>, <a href="/wiki/Liukuluku" title="Liukuluku">liukulukuaritmetiikkaa</a><sup id="cite_ref-63" class="reference"><a href="#cite_note-63"><span class="cite-bracket">[</span>63<span class="cite-bracket">]</span></a></sup> sekä <a href="/wiki/Tietoturva" title="Tietoturva">tietoturvahaavoittuvuuksia</a> Java-virtuaalikoneen toteutuksissa (HotSpot).<sup id="cite_ref-64" class="reference"><a href="#cite_note-64"><span class="cite-bracket">[</span>64<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="Etumerkittömät_kokonaisluvut"><span id="Etumerkitt.C3.B6m.C3.A4t_kokonaisluvut"></span>Etumerkittömät kokonaisluvut</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=42" title="Muokkaa osiota Etumerkittömät kokonaisluvut" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=42" title="Muokkaa osion lähdekoodia: Etumerkittömät kokonaisluvut"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Javassa ei ole luontaisia etumerkittömiä kokonaislukuja. C-kieliset ohjelmat tuottavat yleensä etumerkitöntä dataa, ja tämän tyyppisen datan puute estää suoran tiedon vaihdon Java-kielisten ja C-kielisten ohjelmien välillä. Suuria etumerkittömiä lukuja numeeristen käsittely kenttien numeroina, kuten kryptografiassa, mikä hankaloittaa Javan käyttämistä tällaisissa tehtävissä. Vaikka tämän ongelman kiertäminen on mahdollista käyttäen muunnoskoodia ja suurempia tietotyyppejä, se tekee etumerkittömän datan käsittelystä kömpelöä Javalla.<sup id="cite_ref-65" class="reference"><a href="#cite_note-65"><span class="cite-bracket">[</span>65<span class="cite-bracket">]</span></a></sup> Vaikka 32-bittiseen etumerkillä varustettuun kokonaislukuun on mahdollista tallentaa 16-bittinen etumerkitön kokonaisluku ilman häviöitä, ja 64-bittiseen etumerkillä varustettuun kokonaislukuun voi puolestaan tallentaa 32-bittisen etumerkittömän kokonaisluvun, ei ole kuitenkaan olemassa 64-bittisestä suurempaa tyyppiä etumerkittömän kokonaisluvun tallentamiseen. Kaikissa edellä mainituissa tapauksissa käytetyn muistin määrä voisi kaksinkertaistua, ja kaikki kahden komplementin ylivuotoon turvautuva logiikka pitäisi uudelleen kirjoittaa. Abstrakteissa tapauksissa funktio kutsut olisivat välttämättömiä monissa operaatioissa, jotka ovat monissa muissa kielissä luontaisia. Vaihtoehtoisesti on mahdollista käyttää Javan etumerkillä varustettuja kokonaislukuja jäljittelemään samankokoisia etumerkittömiä kokonaislukuja, mutta tämä vaatii yksityiskohtaista tuntemusta bittikohtaisista operaatioista.<sup id="cite_ref-66" class="reference"><a href="#cite_note-66"><span class="cite-bracket">[</span>66<span class="cite-bracket">]</span></a></sup> JDK 8 tarjosi jonkinlaista tukea etumerkittömille kokonaisluvuille, mutta ei etumerkittömille tavuille eikä myöskään tukea Java kielestä.<sup id="cite_ref-67" class="reference"><a href="#cite_note-67"><span class="cite-bracket">[</span>67<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="Yhdistetyt_arvotyypit">Yhdistetyt arvotyypit</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=43" title="Muokkaa osiota Yhdistetyt arvotyypit" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=43" title="Muokkaa osion lähdekoodia: Yhdistetyt arvotyypit"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Javassa ei ole yhdistettyjä arvotyyppejä, kuten C:n structeja, joissa on tietopaketteja, joita käsitellään suoraan viittauksien sijaan epäsuorasti. Arvotyypit voivat joskus olla nopeampia ja pienempiä kuin luokat viittauksilla.<sup id="cite_ref-:2_68-0" class="reference"><a href="#cite_note-:2-68"><span class="cite-bracket">[</span>68<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-69" class="reference"><a href="#cite_note-69"><span class="cite-bracket">[</span>69<span class="cite-bracket">]</span></a></sup> Esimerkiksi Javan HashMap on toteutettu taulukkona viittauksina HashMap.Entry-olioihin,[16] jotka sisältävät vuorostaan viittauksia avain- ja arvo-olioihin. Tiedon hakeminen vaatii tehotonta kaksoishakemista. Jos Entry olisi arvotyyppi, taulukko voisi tallentaa avain-arvo-parit suoraan, mikä poistaisi ensimmäisen välitystason, lisäisi viittauspaikallisuutta ja vähentäisi muistin käyttöä. Lisäksi, jos Java tukisi geneerisiä primitiivisiä tyyppejä, avaimet ja arvot voitaisiin tallentaa suoraan taulukkoon, poistamalla molemmat välitystasot. </p> <div class="mw-heading mw-heading3"><h3 id="Perusmuuttujien_ja_taulukoiden_integrointi">Perusmuuttujien ja taulukoiden integrointi</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=44" title="Muokkaa osiota Perusmuuttujien ja taulukoiden integrointi" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=44" title="Muokkaa osion lähdekoodia: Perusmuuttujien ja taulukoiden integrointi"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Taulukot ja perusmuuttujat ovat jossain määrin erityisiä ja niitä on käsiteltävä eri tavoin kuin luokkia. Tätä on arvosteltu<sup id="cite_ref-70" class="reference"><a href="#cite_note-70"><span class="cite-bracket">[</span>70<span class="cite-bracket">]</span></a></sup>, koska se edellyttää monia funktiovariaatioita yleiskäyttöisten kirjastojen luomisessa. </p> <div class="mw-heading mw-heading3"><h3 id="Serialisaatio">Serialisaatio</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=45" title="Muokkaa osiota Serialisaatio" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=45" title="Muokkaa osion lähdekoodia: Serialisaatio"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Javassa on mekanismi objektin serialisoimiseen, jossa objekti voidaan esittää tavujonona, joka sisältää sen tietokentät yhdessä tietonsa ja kenttiensä tyyppitiedon kanssa. Kun objekti on sarjallistettu, sitä voidaan myöhemmin desarjallistaa; eli sen tyyppitiedot ja tietonsa esittävät tavut voidaan käyttää objektin luomiseen muistissa. <sup id="cite_ref-71" class="reference"><a href="#cite_note-71"><span class="cite-bracket">[</span>71<span class="cite-bracket">]</span></a></sup>Tämä aiheuttaa erittäin vakavia teoreettisia ja todellisia turvallisuusriskejä.<sup id="cite_ref-72" class="reference"><a href="#cite_note-72"><span class="cite-bracket">[</span>72<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-73" class="reference"><a href="#cite_note-73"><span class="cite-bracket">[</span>73<span class="cite-bracket">]</span></a></sup> </p><p>Serialisointi prosessi on siitä hyödyllinen, että se on kokonaisuudessaan JVM riippumaton. Tarkoittaen sitä, että objekti voidaan deserialisoida täysin toisella laitteella tai alustalla, kuin se on serialisoitu. </p><p><br /> Luokat ObjectInputStream ja ObjectOutputStream ovat korkeantason virtoja, jotka sisältävät metodit serialisoinnille sekä deserialisoinnille. </p><p><br /> Java serialisointi voidaan saavuttaa käyttämällä java.io.Serializable rajapintaa. Objektia serialisoidessa tulee luokan määrittelyssä implementoida tämä rajapinta, joka mahdollistaa tarvittavan tarkistuksen onko objekti serialisoitava. Kun objekti on serialisoitava, se voidaan kirjoittaa ObjectOutputStreamiin, joka konvertoi tämän objektin bittivirraksi. </p><p><br /> </p><p>Java deserialisointi voidaan saavuttaa lukemalla bitit bittivirrasta ja antamalla bitit ObjectInputStreamille. ObjectInputStream voi konvertoida tämän jälkeen bitit takaisin objektin muotoon ja palauttaa sen takaisin käytettäväksi halutussa muodossa. </p><p><br /> Yksi tärkeä tieto Javan serialisoinnista on se, että siihen liittyy aina turvallisuusriskinsä, jos sen kanssa ei ole varovainen. Serialisoidut objektit voivat sisältää herkkää informaatiota ja jos serialisoitu data päätyy vääriin käsiin, voidaan dataa käyttää esimerkiksi systeemisi hyväksikäyttöön. Tämän seikan takia on hyvä idea käyttää datan salausta (encryption) sekä muita turvallisuuskeinoja työskennellessä serialisoinnin kanssa. </p> <div class="mw-heading mw-heading3"><h3 id="Suuret_taulukot">Suuret taulukot</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=46" title="Muokkaa osiota Suuret taulukot" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=46" title="Muokkaa osion lähdekoodia: Suuret taulukot"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Javaa on kritisoitu siitä, ettei se tue taulukoita, joiden koko on 2<sup>31</sup> (noin 2,1 miljardia) alkiota tai enemmän.<sup id="cite_ref-74" class="reference"><a href="#cite_note-74"><span class="cite-bracket">[</span>74<span class="cite-bracket">]</span></a></sup> Tämä rajoittaa Javaa ohjelmointikielenä; <i>the Java Language Specification</i>, kohdassa 10.4 sanotaan seuraavaa: </p><p><br />                             Taulukot on indeksoitava konaisluvuilla… Jos yrittää käyttää taulukon arvoa, jonka indeksi on pitkä kokonaisluku, seurauksena on käännösaika-virhe.<sup id="cite_ref-75" class="reference"><a href="#cite_note-75"><span class="cite-bracket">[</span>75<span class="cite-bracket">]</span></a></sup> </p><p><br /> Suurten taulukoiden tukeminen vaatisi myös muutoksia Javan virtuaalikoneeseen (JVM).<sup id="cite_ref-76" class="reference"><a href="#cite_note-76"><span class="cite-bracket">[</span>76<span class="cite-bracket">]</span></a></sup> Rajoitus ilmenee osa-alueilla, kuten kokoelmien koon rajoittuminen kahteen miljardiin alkioon<sup id="cite_ref-77" class="reference"><a href="#cite_note-77"><span class="cite-bracket">[</span>77<span class="cite-bracket">]</span></a></sup> ja kyvyttömyys muistikartoittaa jatkuvia tiedostolohkoja, joiden koko on suurempi kuin 2 GB (gigatavua).<sup id="cite_ref-78" class="reference"><a href="#cite_note-78"><span class="cite-bracket">[</span>78<span class="cite-bracket">]</span></a></sup> Javassa ei myöskään ole moniulotteisia taulukoita (vierekkäin varatut yksittäiset muistilohkot, joihin pääsee yhdellä epäsuunnalla), mikä rajoittaa tieteellisen ja teknisen tietojenkäsittelyn suorituskykyä.<sup id="cite_ref-:2_68-1" class="reference"><a href="#cite_note-:2-68"><span class="cite-bracket">[</span>68<span class="cite-bracket">]</span></a></sup> </p><p>Javassa ei ole tehokasta tapaa alustaa taulukoita. Kun taulukko määritetään, Javan virtuaalikone (JVM) kääntää sen tavukoodeiksi ohjeilla, jotka asettavat sen elementit yksitellen ajon aikana. Koska Javan metodit eivät voi olla suurempia kuin 64 KB (kilotavua), jopa vaatimattoman kokoiset taulukot, joiden arvot on asetettu suoraan koodissa, antavat virhe ilmoituksen ”Error: code too large” (Virhe: koodi liian isoa) käännettäessä.<sup id="cite_ref-79" class="reference"><a href="#cite_note-79"><span class="cite-bracket">[</span>79<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="Hitaus">Hitaus</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=47" title="Muokkaa osiota Hitaus" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=47" title="Muokkaa osion lähdekoodia: Hitaus"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Koska jokainen koodi on tulkittava konekoodiksi, Java on hitaampi muihin kieliin, kuten esimerkiksi C:hen ja C++:aan. Java on huomattavasti hitaampi kuin kielet, jotka tuottavat käännöskoodia suoraan koneelle, sekä se käyttää paljon muistia. </p><p>Javaa on kritisoitu sen nopeudesta sovellusten käynnistyksessä. Javalla tehdyt sovellukset voivat käynnistyä hitaammin kuin muilla ohjelmointikielillä tuotettuihin sovelluksiin, mikä voi tuottaa ongelmia tietynlaisissa sovelluksissa. Javan hitaus sovellusten käynnistämisessä johtuu siitä, että Java-sovellusten on käynnistyessään ladattava suuri määrä luokkia ja kirjastoja, mikä voi johtaa viiveisiin. </p><p>Toinen kritiikin kohde Javan nopeuteen liittyen koskee tapaa, jolla Java käsittelee muistin varausta. Vaikka Javan automaattisesta muistin hallinnasta voi olla hyötyä koodaajalle, se voi myös johtaa suorituskyky ongelmiin. Javan käyttämä roskakori voi viedä merkittävän määrän prosessorin resursseista, minkä seurauksena sovellus voi hidastua. Javan muistin varaus voi johtaa myös muistin sirpaloitumiseen, millä on suora vaikutus suorituskykyyn. </p><p>Java-ohjelmien sisäiset ominaisuudet ei vaikuta kielen ajonaikaiseen suorituskykyyn yhtä paljon kuin kääntäjän tai virtuaalikoneen laatu. Käännetyn ohjelman ajaminen esimerkiksi virtuaalikoneen avulla on natiivia suoritusta hitaampaa. Virtuaalikoneet voivat tarjota esimerkiksi alustariippumattomuuden ja yksinkertaistetun kehityksen, mutta samalla laskea suorituskykyä. </p> <div class="mw-heading mw-heading3"><h3 id="Turvallisuus">Turvallisuus</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=48" title="Muokkaa osiota Turvallisuus" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=48" title="Muokkaa osion lähdekoodia: Turvallisuus"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Java-ohjelmistoja jää myös paljon päivittämättä pelkän tietoisuuden puutteen takia. Yleisin syy tälle on se, ettei käyttäjä yksinkertaisesti ole vain tietoinen uusista ja parantavista päivityksistä, tai toiselta kantilta käyttäjä ei ole tietoinen siitä, kuinka päivitykset tulisi tehdä.<sup id="cite_ref-:3_80-0" class="reference"><a href="#cite_note-:3-80"><span class="cite-bracket">[</span>80<span class="cite-bracket">]</span></a></sup> </p><p>Javan turvallisuutta on kritisoitu paljon. Oraclen toimintaa liittyen siihen, kuinka he informoivat löytyvistä turvallisuusbugeista, on erityisesti nostettu esille. On tullut ilmi, ettei Oraclen puolesta kaikista näistä ei ole laajalti informoitu käyttäjiä. Esimerkiksi kun julkaistiin korjaukset monille vioille Java 7:ssä, poisti se Java 6:n käyttäjien koneista ja erityisesti tämä vaikutti yrityksien sovelluksiin. Oracle oli alun perin vakuuttanut, ettei tämä vaikuttaisi niihin ja ne olisivat turvassa päivityksiltä. Tämä kuitenkin oli vakava turvallisuusriski, sillä Java 6 on laajalti käytössä yrityksien sovelluksissa.<sup id="cite_ref-:3_80-1" class="reference"><a href="#cite_note-:3-80"><span class="cite-bracket">[</span>80<span class="cite-bracket">]</span></a></sup> </p><p>Java-koodiympäristö antaa mahdollisuuden hyödyntää <a href="/wiki/Hiekkalaatikko_(tietotekniikka)" title="Hiekkalaatikko (tietotekniikka)">hiekkalaatikko</a> testausta, ja ajaa ohjelmia, joiden koodi ei ole korkealaatuista. Käyttäjä voi siis ajaa ympäristössä koodeja, ja ohjelmia, epäluotettavia tavukoodiohjelmia. Tämä voi antaa haittaohjelmille mahdollisuuden hyödyntää näiden ohjelmien tietoturvaongelmia ja päästä käsiksi esimerkiksi tiedostojärjestelmiin, päästä yhdistämään yksityisiin verkkoihin tai jopa alkaa suorittaa mielivaltaisia komentoja.<sup id="cite_ref-:3_80-2" class="reference"><a href="#cite_note-:3-80"><span class="cite-bracket">[</span>80<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading2"><h2 id="Katso_myös"><span id="Katso_my.C3.B6s"></span>Katso myös</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=49" title="Muokkaa osiota Katso myös" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=49" title="Muokkaa osion lähdekoodia: Katso myös"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><a href="/wiki/C_sharp" title="C sharp">C#</a></li> <li><a href="/wiki/C%2B%2B" title="C++">C++</a></li></ul> <div class="mw-heading mw-heading3"><h3 id="Javan_vertailu_muihin_ohjelmointikieliin">Javan vertailu muihin ohjelmointikieliin</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=50" title="Muokkaa osiota Javan vertailu muihin ohjelmointikieliin" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=50" title="Muokkaa osion lähdekoodia: Javan vertailu muihin ohjelmointikieliin"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><a href="/wiki/Java-_ja_C%2B%2B-ohjelmointikielten_vertailu" title="Java- ja C++-ohjelmointikielten vertailu">Java- ja C++-ohjelmointikielten vertailu</a></li></ul> <div class="mw-heading mw-heading2"><h2 id="Lähteet"><span id="L.C3.A4hteet"></span>Lähteet</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=51" title="Muokkaa osiota Lähteet" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=51" title="Muokkaa osion lähdekoodia: Lähteet"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><span class="kirjaviite" title="Kirjaviite">Horstmann, Cay S. & Cornell, Cary: <i>Inside Java 2</i>, s. 1–730.  Suomentanut Veli-Pekka Ketola. Helsinki:  Edita, IT Press, 2000.  <a href="/wiki/Toiminnot:Kirjal%C3%A4hteet/951-826-024-9" title="Toiminnot:Kirjalähteet/951-826-024-9">ISBN 951-826-024-9</a> </span></li> <li><span class="kirjaviite" title="Kirjaviite">Meyers, Nathan: <i>Java Programming on Linux</i>, s. 1–907.  Waite Group Press, 2000.  <a href="/wiki/Toiminnot:Kirjal%C3%A4hteet/1-57169-166-9" title="Toiminnot:Kirjalähteet/1-57169-166-9">ISBN 1-57169-166-9</a> </span></li> <li><span class="kirjaviite" title="Kirjaviite">Hiuttu, Petri & Niemi, Juha: <i>Opeta itsellesi Java ohjelmointi</i>, s. 1–508.  Espoo:  Suomen ATK-kustannus, 1996.  <a href="/wiki/Toiminnot:Kirjal%C3%A4hteet/951-762-468-9" title="Toiminnot:Kirjalähteet/951-762-468-9">ISBN 951-762-468-9</a> </span></li> <li><span class="kirjaviite" title="Kirjaviite">Peltomäki, Juha & Silander, Simo: <i>Java 2</i>.  Jyväskylä:  Docendo, 2003.  <a href="/wiki/Toiminnot:Kirjal%C3%A4hteet/951-846-708-0" title="Toiminnot:Kirjalähteet/951-846-708-0">ISBN 951-846-708-0</a> </span></li> <li><span class="kirjaviite" title="Kirjaviite">Peltomäki, Juha & Malmirae, Pekka: <i>Java</i>, s. 1–551.  Jyväskylä:  Teknolit, 2000.  <a href="/wiki/Toiminnot:Kirjal%C3%A4hteet/951-846-038-8" title="Toiminnot:Kirjalähteet/951-846-038-8">ISBN 951-846-038-8</a> </span></li> <li class="mw-empty-elt"></li></ul> <div class="mw-heading mw-heading3"><h3 id="Viitteet">Viitteet</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=52" title="Muokkaa osiota Viitteet" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=52" title="Muokkaa osion lähdekoodia: Viitteet"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <style data-mw-deduplicate="TemplateStyles:r23091323">.mw-parser-output div.viitteet-malline ol.references{list-style-type:inherit}.mw-parser-output .viitteet-sarakkeet li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output ol.references>li:target{background-color:var(--background-color-interactive,#DEF)}.mw-parser-output sup.reference:target{background-color:var(--background-color-interactive,#DEF)}.mw-parser-output span[rel="mw:referencedBy"]{counter-reset:mw-ref-linkback 0}.mw-parser-output span[rel="mw:referencedBy"]>a::before{font-style:italic;content:counter(mw-ref-linkback,lower-alpha)}body.action-info .mw-parser-output :target{background-color:var(--background-color-interactive,#DEF)}</style><div class="viitteet-malline viitteet-sarakkeet" style="-moz-column-count:; -webkit-column-count:; column-count:; -moz-column-width: 35em; -webkit-column-width: 35em; column-width: 35em; list-style-type:decimal;"><ol class="references"> <li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite">Oracle Corporation: <a rel="nofollow" class="external text" href="https://www.oracle.com/java/technologies/javase/20-0-2-relnotes.html">Java™ SE Development Kit 20 Release Notes</a> 18.1.2022. oracle.com. Viitattu 14.2.2022. <span style="font-size: 0.95em; position: relative;">(englanniksi)</span></span></span> </li> <li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="http://www.gcn.com/online/vol1_no1/42570-1.html">Sun opens Java</a> <i>GCN.com</i>. 13. marraskuuta 2006. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20070930154640/http://www.gcn.com/online/vol1_no1/42570-1.html">Arkistoitu</a> 30.9.2007. Viitattu 7.7.2010.</span></span> </li> <li id="cite_note-3"><span class="mw-cite-backlink"><a href="#cite_ref-3">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://www.softwaretestinghelp.com/real-world-applications-of-java/">Real World Applications of jJava</a> softwaretestinghelp.com</span> </li> <li id="cite_note-4"><span class="mw-cite-backlink"><a href="#cite_ref-4">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external autonumber" href="https://medium.com/javarevisited/8-best-popular-projects-on-java-e1a663ab3cc1">[1]</a> 8 Best Popular Projects on Java] Medium.com</span> </li> <li id="cite_note-5"><span class="mw-cite-backlink"><a href="#cite_ref-5">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external autonumber" href="https://blogs.oracle.com/javamagazine/post/the-top-25-greatest-java-apps-ever-written">[2]</a></span> </li> <li id="cite_note-6"><span class="mw-cite-backlink"><a href="#cite_ref-6">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite">Kieron Murphy: <a rel="nofollow" class="external text" href="https://www.javaworld.com/article/2077265/core-java/so-why-did-they-decide-to-call-it-java-.html">So why did they decide to call it Java?</a> <i>JavaWorld</i>. 4.10.1996. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20190315171946/http://www.javaworld.com/article/2077265/so-why-did-they-decide-to-call-it-java-.html">Arkistoitu</a> 15.3.2019. Viitattu 8.11.2018.</span></span> </li> <li id="cite_note-7"><span class="mw-cite-backlink"><a href="#cite_ref-7">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite">Richard Castagna: <a rel="nofollow" class="external text" href="https://www.zdnet.com/news/what-is-ecma-and-why-microsoft-cares/298821">What is ECMA--and why Microsoft cares</a> <i>www.zdnet.com</i>. 14.12.2001. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20140506215226/http://www.zdnet.com/news/what-is-ecma-and-why-microsoft-cares/298821">Arkistoitu</a> 6.5.2014. Viitattu 6.4.2023. <span style="font-size: 0.95em; position: relative;">(englanniksi)</span></span></span> </li> <li id="cite_note-8"><span class="mw-cite-backlink"><a href="#cite_ref-8">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="http://grnlight.net/index.php/programming-articles/115-javaone-sun-the-bulk-of-java-is-open-sourced">JAVAONE : Sun: The bulk of Java is open sourced</a> <i>grnlight.net</i>. 26.5.2014. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20140527220942/http://grnlight.net/index.php/programming-articles/115-javaone-sun-the-bulk-of-java-is-open-sourced">Arkistoitu</a> 27.5.2014. Viitattu 6.4.2023. <span style="font-size: 0.95em; position: relative;">(englanniksi)</span></span></span> </li> <li id="cite_note-9"><span class="mw-cite-backlink"><a href="#cite_ref-9">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="http://nighthacks.com/roller/jag/entry/time_to_move_on">On a New Road</a> <i>nighthacks.com</i>. 9.4.2010. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20101105031239/http://nighthacks.com/roller/jag/entry/time_to_move_on">Arkistoitu</a> 5.11.2010. Viitattu 6.4.2023. <span style="font-size: 0.95em; position: relative;">(englanniksi)</span></span></span> </li> <li id="cite_note-10"><span class="mw-cite-backlink"><a href="#cite_ref-10">↑</a></span> <span class="reference-text"><span class="kirjaviite" title="Kirjaviite">Jorma Kyppö & Mika Vesterholm: <i>Java-ohjelmointi</i>, s. 24.  Talentum, 2010.  <a href="/wiki/Toiminnot:Kirjal%C3%A4hteet/978-952-14-1356-8" title="Toiminnot:Kirjalähteet/978-952-14-1356-8">ISBN 978-952-14-1356-8</a> </span></span> </li> <li id="cite_note-11"><span class="mw-cite-backlink"><a href="#cite_ref-11">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.sun.com/2006-1113/feature/story.jsp">Story</a> Sun.com</span> </li> <li id="cite_note-12"><span class="mw-cite-backlink"><a href="#cite_ref-12">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite">Ron Amadeo: <a rel="nofollow" class="external text" href="https://arstechnica.com/tech-policy/2016/01/android-n-switches-to-openjdk-google-tells-oracle-it-is-protected-by-the-gpl/">Android N switches to OpenJDK, Google tells Oracle it is protected by the GPL</a> <i>arstechnica.com</i>. 6.1.2016. Viitattu 28.1.2023. <span style="font-size: 0.95em; position: relative;">(englanniksi)</span></span></span> </li> <li id="cite_note-13"><span class="mw-cite-backlink"><a href="#cite_ref-13">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite">Frederic Lardinois: <a rel="nofollow" class="external text" href="https://techcrunch.com/2019/05/07/kotlin-is-now-googles-preferred-language-for-android-app-development/">Kotlin is now Google’s preferred language for Android app development</a> <i>techcrunch.com</i>. 7.5.2019. Viitattu 19.2.2020. <span style="font-size: 0.95em; position: relative;">(englanniksi)</span></span></span> </li> <li id="cite_note-14"><span class="mw-cite-backlink"><a href="#cite_ref-14">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://yle.fi/a/3-6273467">Viestintävirasto suosittaa Java-ohjelmiston poistoa tietokoneelta</a> Yle uutiset 28.8.2012]</span> </li> <li id="cite_note-15"><span class="mw-cite-backlink"><a href="#cite_ref-15">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.3t.fi/artikkeli/uutiset/teknologia/javan_turvaongelmaan_tuli_korjaus">Javan turvaongelmaan tuli korjaus</a> 3t.fi (<a rel="nofollow" class="external text" href="https://web.archive.org/web/20120901093043/http://www.3t.fi/artikkeli/uutiset/teknologia/javan_turvaongelmaan_tuli_korjaus">Arkistoitu</a> – Internet Archive)</span> </li> <li id="cite_note-16"><span class="mw-cite-backlink"><a href="#cite_ref-16">↑</a></span> <span class="reference-text"> <a rel="nofollow" class="external text" href="https://blogs.oracle.com/java-platform-group/introducing-java-se-11">Introducing Java SE 11</a> 25.9.2018, viitattu 18.8.2019 <span style="font-size: 0.95em; position: relative;">(englanniksi)</span> </span> </li> <li id="cite_note-17"><span class="mw-cite-backlink"><a href="#cite_ref-17">↑</a></span> <span class="reference-text"> <a rel="nofollow" class="external text" href="https://www.oracle.com/corporate/pressrelease/latest-java-release-031919.html">Oracle Makes Developers More Productive with Latest Java Release</a> 19.3.2019, viitattu 18.8.2019 <span style="font-size: 0.95em; position: relative;">(englanniksi)</span> </span> </li> <li id="cite_note-18"><span class="mw-cite-backlink"><a href="#cite_ref-18">↑</a></span> <span class="reference-text"> <span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="https://www.oracle.com/corporate/pressrelease/oow19-new-java-release-091619.html">Oracle Keeps Driving Developer Productivity with New Java Release</a> Oracle.com. Viitattu 5.10.2019. <span style="font-size: 0.95em; position: relative;">(englanniksi)</span></span> </span> </li> <li id="cite_note-19"><span class="mw-cite-backlink"><a href="#cite_ref-19">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="https://www.oracle.com/corporate/pressrelease/oracle-announces-java14-031720.html">Oracle Announces Java 14</a> 17.3.2020. Oracle.com. Viitattu 26.4.2020. <span style="font-size: 0.95em; position: relative;">(englanniksi)</span></span> </span> </li> <li id="cite_note-20"><span class="mw-cite-backlink"><a href="#cite_ref-20">↑</a></span> <span class="reference-text"> <a rel="nofollow" class="external text" href="https://openjdk.org/projects/jdk/15/">openjdk.org</a> 15.9.2020, viitattu 21.2.2023 <span style="font-size: 0.95em; position: relative;">(englanniksi)</span> </span> </li> <li id="cite_note-21"><span class="mw-cite-backlink"><a href="#cite_ref-21">↑</a></span> <span class="reference-text"> <a rel="nofollow" class="external text" href="https://openjdk.org/projects/jdk/16/">openjdk.org</a> 16.3.2021, viitattu 21.2.2023 <span style="font-size: 0.95em; position: relative;">(englanniksi)</span> </span> </li> <li id="cite_note-22"><span class="mw-cite-backlink"><a href="#cite_ref-22">↑</a></span> <span class="reference-text"> <a rel="nofollow" class="external text" href="https://openjdk.org/projects/jdk/17/">openjdk.org</a> 13.9.2021, viitattu 21.2.2023 <span style="font-size: 0.95em; position: relative;">(englanniksi)</span> </span> </li> <li id="cite_note-23"><span class="mw-cite-backlink"><a href="#cite_ref-23">↑</a></span> <span class="reference-text"> <a rel="nofollow" class="external text" href="https://openjdk.org/projects/jdk/18/">openjdk.org</a> 22.3.2022, viitattu 21.2.2023 <span style="font-size: 0.95em; position: relative;">(englanniksi)</span> </span> </li> <li id="cite_note-24"><span class="mw-cite-backlink"><a href="#cite_ref-24">↑</a></span> <span class="reference-text"> <a rel="nofollow" class="external text" href="https://openjdk.org/projects/jdk/17/">openjdk.org</a> 20.9.2022, viitattu 21.2.2023 <span style="font-size: 0.95em; position: relative;">(englanniksi)</span> </span> </li> <li id="cite_note-25"><span class="mw-cite-backlink"><a href="#cite_ref-25">↑</a></span> <span class="reference-text"> <a rel="nofollow" class="external autonumber" href="https://blogs.oracle.com/java/post/the-arrival-of-java-20">[3]</a> oracle.com/ 24.1.2023, viitattu 21.2.2023 <span style="font-size: 0.95em; position: relative;">(englanniksi)</span> </span> </li> <li id="cite_note-26"><span class="mw-cite-backlink"><a href="#cite_ref-26">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external autonumber" href="https://www.oracle.com/java/technologies/javase/21-0-1-relnotes.html">[4]</a> oracle.com/ oracle.com</span> </li> <li id="cite_note-27"><span class="mw-cite-backlink"><a href="#cite_ref-27">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://www.oracle.com/java/technologies/java-se-support-roadmap.html">Java Support Roadmap</a> oracle.com</span> </li> <li id="cite_note-Nimetön-20231105094944-28"><span class="mw-cite-backlink">↑ <a href="#cite_ref-Nimetön-20231105094944_28-0"><sup><i>a</i></sup></a> <a href="#cite_ref-Nimetön-20231105094944_28-1"><sup><i>b</i></sup></a> <a href="#cite_ref-Nimetön-20231105094944_28-2"><sup><i>c</i></sup></a> <a href="#cite_ref-Nimetön-20231105094944_28-3"><sup><i>d</i></sup></a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="https://www.oracle.com/java/technologies/javase/products-doc-jdk20certconfig.html">Oracle JDK 20 Certified System Configurations</a> oracle.com. Viitattu 31.7.2023.</span></span> </li> <li id="cite_note-29"><span class="mw-cite-backlink"><a href="#cite_ref-29">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="https://www.oracle.com/java/technologies/javase/products-doc-jdk20certconfig.html">Oracle JDK 20 Certified System Configurations Virtualization</a> oracle.com. Viitattu 31.7.2023.</span></span> </li> <li id="cite_note-:0-30"><span class="mw-cite-backlink">↑ <a href="#cite_ref-:0_30-0"><sup><i>a</i></sup></a> <a href="#cite_ref-:0_30-1"><sup><i>b</i></sup></a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="https://docs.oracle.com/javase/7/docs/technotes/guides/security/spec/security-spec.doc1.html">Oracle Java SE Documentation</a> oracle.com. Viitattu 27.2.2023.</span></span> </li> <li id="cite_note-31"><span class="mw-cite-backlink"><a href="#cite_ref-31">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="https://www.javatpoint.com/javafx-tutorial">JavaFX Tutorial - javatpoint</a> <i>www.javatpoint.com</i>. Viitattu 18.6.2022. <span style="font-size: 0.95em;">(englanniksi)</span></span></span> </li> <li id="cite_note-Nimetön-20230526113543-32"><span class="mw-cite-backlink">↑ <a href="#cite_ref-Nimetön-20230526113543_32-0"><sup><i>a</i></sup></a> <a href="#cite_ref-Nimetön-20230526113543_32-1"><sup><i>b</i></sup></a></span> <span class="reference-text"><span class="lehtiviite" title="Lehtiviite">JavaFX. <i>Wikipedia</i>, 5.10.2022.  <a class="external text" href="https://en.wikipedia.org/w/index.php?title=JavaFX&oldid=1114283412">Artikkelin verkkoversio</a>. <span style="font-size: 0.95em;">(englanniksi)</span></span></span> </li> <li id="cite_note-33"><span class="mw-cite-backlink"><a href="#cite_ref-33">↑</a></span> <span class="reference-text"><span class="kirjaviite" title="Kirjaviite">Lowe, Doug: <i>JavaFX for Dummies</i>, s. 10.  Hoboken, New Jersey : John Wiley & Sons, Inc., 2015. </span></span> </li> <li id="cite_note-34"><span class="mw-cite-backlink"><a href="#cite_ref-34">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="https://docs.oracle.com/javase/tutorial/java/nutsandbolts/flow.html">Control Flow Statements</a> oracle.com. Viitattu 10.3.2023. <span style="font-size: 0.95em; position: relative;">(englanniksi)</span></span></span> </li> <li id="cite_note-35"><span class="mw-cite-backlink"><a href="#cite_ref-35">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="https://logit.io/">The Concept Of Null In Java</a> <i>Logit.io</i>. Viitattu 31.3.2023. <span style="font-size: 0.95em;">(englanniksi)</span></span></span> </li> <li id="cite_note-36"><span class="mw-cite-backlink"><a href="#cite_ref-36">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="https://docs.oracle.com/javase/tutorial/java/javaOO/classdecl.html">Declaring Classes</a> oracle.com. Viitattu 10.3.2023. <span style="font-size: 0.95em; position: relative;">(englanniksi)</span></span></span> </li> <li id="cite_note-37"><span class="mw-cite-backlink"><a href="#cite_ref-37">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="https://docs.oracle.com/javase/tutorial/java/javaOO/methods.html">Defining Methods</a> oracle.com. Viitattu 10.3.2023. <span style="font-size: 0.95em; position: relative;">(englanniksi)</span></span></span> </li> <li id="cite_note-38"><span class="mw-cite-backlink"><a href="#cite_ref-38">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="https://docs.oracle.com/javase/tutorial/essential/exceptions/index.html">Lesson: Exceptions</a> oracle.com.</span></span> </li> <li id="cite_note-39"><span class="mw-cite-backlink"><a href="#cite_ref-39">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="https://docs.oracle.com/javase/tutorial/essential/exceptions/declaring.html">Specifying the Exceptions Thrown by a Method</a> oracle.com. Viitattu 11.3.2023. <span style="font-size: 0.95em; position: relative;">(englanniksi)</span></span></span> </li> <li id="cite_note-40"><span class="mw-cite-backlink"><a href="#cite_ref-40">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html">Controlling Access to Members of a Class</a> <i>docs.oracle.com</i>. Viitattu 10.3.2023. <span style="font-size: 0.95em; position: relative;">(englanniksi)</span></span></span> </li> <li id="cite_note-41"><span class="mw-cite-backlink"><a href="#cite_ref-41">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="https://rdcu.be/dg90l">The Invention of the Object: Object Orientation and the Philosofical Development of Programming Languages</a> oracle.com. Viitattu 18.7.2023. <span style="font-size: 0.95em; position: relative;">(englanniksi)</span></span></span> </li> <li id="cite_note-javaohjelmointi-42"><span class="mw-cite-backlink">↑ <a href="#cite_ref-javaohjelmointi_42-0"><sup><i>a</i></sup></a> <a href="#cite_ref-javaohjelmointi_42-1"><sup><i>b</i></sup></a> <a href="#cite_ref-javaohjelmointi_42-2"><sup><i>c</i></sup></a></span> <span class="reference-text"><span class="kirjaviite" title="Kirjaviite">Mika Vesterholm & Jorma Kyppö: <i>Java-ohjelmointi</i>, s. 80-81.  Alma Talent Oy, 2018.  <a href="/wiki/Toiminnot:Kirjal%C3%A4hteet/978-952-14-3556-0" title="Toiminnot:Kirjalähteet/978-952-14-3556-0">ISBN 978-952-14-3556-0</a> </span></span> </li> <li id="cite_note-43"><span class="mw-cite-backlink"><a href="#cite_ref-43">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="https://docs.oracle.com/javase/tutorial/java/generics/types.html">Generic Types</a> <i>docs.oracle.com</i>. Viitattu 10.3.2023. <span style="font-size: 0.95em; position: relative;">(englanniksi)</span></span></span> </li> <li id="cite_note-44"><span class="mw-cite-backlink"><a href="#cite_ref-44">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="https://docs.oracle.com/javase/1.5.0/docs/guide/language/index.html">Java Programming Language</a> <i>docs.oracle.com</i>. Viitattu 10.3.2023. <span style="font-size: 0.95em; position: relative;">(englanniksi)</span></span></span> </li> <li id="cite_note-45"><span class="mw-cite-backlink"><a href="#cite_ref-45">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html">Class ArrayList</a> <i>docs.oracle.com</i>. Viitattu 7.3.2023. <span style="font-size: 0.95em; position: relative;">(englanniksi)</span></span></span> </li> <li id="cite_note-46"><span class="mw-cite-backlink"><a href="#cite_ref-46">↑</a></span> <span class="reference-text"> <span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="https://docs.oracle.com/javase/tutorial/java/IandI/abstract.html">Abstract Methods and Classes (The Java™ Tutorials > Learning the Java Language > Interfaces and Inheritance)</a> <i>docs.oracle.com</i>. Viitattu 31.3.2023.</span></span> </li> <li id="cite_note-47"><span class="mw-cite-backlink"><a href="#cite_ref-47">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="https://docs.oracle.com/javase/10/docs/api/java/lang/InstantiationError.html">InstantiationError (Java SE 10 & JDK 10 )</a> <i>docs.oracle.com</i>. Viitattu 31.3.2023.</span></span> </li> <li id="cite_note-48"><span class="mw-cite-backlink"><a href="#cite_ref-48">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="https://docs.oracle.com/javase/tutorial/java/IandI/abstract.html">Abstract Methods and Classes (The Java™ Tutorials > Learning the Java Language > Interfaces and Inheritance)</a> <i>docs.oracle.com</i>. Viitattu 31.3.2023.</span></span> </li> <li id="cite_note-:1-49"><span class="mw-cite-backlink">↑ <a href="#cite_ref-:1_49-0"><sup><i>a</i></sup></a> <a href="#cite_ref-:1_49-1"><sup><i>b</i></sup></a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="https://dev.java/learn/jvm/tool/garbage-collection/intro/#memory-management-in-java">Introduction to Garbage Collection - Dev.java</a> <i>Dev.java: The Destination for Java Developers</i>. 14.9.2021. Viitattu 14.3.2023. <span style="font-size: 0.95em;">(englanniksi)</span></span></span> </li> <li id="cite_note-50"><span class="mw-cite-backlink"><a href="#cite_ref-50">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="https://dev.java/learn/jvm/tool/garbage-collection/java-specifics/">Garbage Collection in Java - Dev.java</a> <i>Dev.java: The Destination for Java Developers</i>. 12.9.2021. Viitattu 14.3.2023. <span style="font-size: 0.95em;">(englanniksi)</span></span></span> </li> <li id="cite_note-51"><span class="mw-cite-backlink"><a href="#cite_ref-51">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external autonumber" href="https://www.javatpoint.com/what-is-framework-in-java">[5]</a></span> </li> <li id="cite_note-52"><span class="mw-cite-backlink"><a href="#cite_ref-52">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external autonumber" href="https://hibernate.org/">[6]</a></span> </li> <li id="cite_note-53"><span class="mw-cite-backlink"><a href="#cite_ref-53">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external autonumber" href="https://grails.org/">[7]</a></span> </li> <li id="cite_note-54"><span class="mw-cite-backlink"><a href="#cite_ref-54">↑</a></span> <span class="reference-text"><a rel="nofollow" class="external autonumber" href="https://www.playframework.com/">[8]</a></span> </li> <li id="cite_note-55"><span class="mw-cite-backlink"><a href="#cite_ref-55">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="https://scand.com/company/blog/java-vs-javascript/">Java vs JavaScript - What is the difference between? | SCAND Blog</a> <i>SCAND</i>. Viitattu 29.7.2023. <span style="font-size: 0.95em;">(englanniksi)</span></span></span> </li> <li id="cite_note-56"><span class="mw-cite-backlink"><a href="#cite_ref-56">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a class="external text" href="https://en.wikipedia.org/wiki/Java_(programming_language)">Use outside the Java platform</a> <i>en.wikipedia.org</i>. Viitattu 20.3.2023. <span style="font-size: 0.95em; position: relative;">(englanniksi)</span></span></span> </li> <li id="cite_note-57"><span class="mw-cite-backlink"><a href="#cite_ref-57">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a class="external text" href="https://en.wikipedia.org/wiki/Android_SDK">Android SDK</a> <i>en.wikipedia.org</i>. Viitattu 20.3.2023. <span style="font-size: 0.95em; position: relative;">(englanniksi)</span></span></span> </li> <li id="cite_note-58"><span class="mw-cite-backlink"><a href="#cite_ref-58">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="https://developer.android.com/guide/platform">Java API Framework</a> <i>developer.android.com</i>. Viitattu 20.3.2023. <span style="font-size: 0.95em; position: relative;">(englanniksi)</span></span></span> </li> <li id="cite_note-59"><span class="mw-cite-backlink"><a href="#cite_ref-59">↑</a></span> <span class="reference-text"><span class="lehtiviite" title="Lehtiviite">Google LLC v. Oracle America, Inc. <i>Wikipedia</i>, 23.3.2023.  <a class="external text" href="https://en.wikipedia.org/w/index.php?title=Google_LLC_v._Oracle_America,_Inc.&oldid=1146264979">Artikkelin verkkoversio</a>. <span style="font-size: 0.95em;">(englanniksi)</span></span></span> </li> <li id="cite_note-60"><span class="mw-cite-backlink"><a href="#cite_ref-60">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite">Ken Arnold: Generics Considered Harmful 27.6.2005. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20071010002142/http://weblogs.java.net/blog/arnold/archive/2005/06/generics_consid_1.html">Arkistoitu</a> Viitattu 10.3.2023. <span style="font-size: 0.95em; position: relative;">(englanniksi)</span></span></span> </li> <li id="cite_note-61"><span class="mw-cite-backlink"><a href="#cite_ref-61">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite">Dejan Jelovic: Why Java Will Always Be Slower than C++ <a rel="nofollow" class="external text" href="https://web.archive.org/web/20080211111923/http://www.jelovic.com/articles/why_java_is_slow.htm">Arkistoitu</a> Viitattu 10.3.2023. <span style="font-size: 0.95em; position: relative;">(englanniksi)</span></span></span> </li> <li id="cite_note-62"><span class="mw-cite-backlink"><a href="#cite_ref-62">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite">Sean R. Owens: Java and unsigned int, unsigned short, unsigned byte, unsigned long, etc. (Or rather, the lack thereof) <a rel="nofollow" class="external text" href="https://web.archive.org/web/20090220171410/http://darksleep.com/player/JavaAndUnsignedTypes.html">Arkistoitu</a> Viitattu 10.3.2023. <span style="font-size: 0.95em; position: relative;">(englanniksi)</span></span></span> </li> <li id="cite_note-63"><span class="mw-cite-backlink"><a href="#cite_ref-63">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite">W. Kahan & Joseph D. Darcy: How Java's Floating-Point Hurts Everyone Everywhere <small>(PDF)</small> (ACM 1998 Workshop on Java (Stanford)) 1.3.1998. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20120905004527/http://www.cs.berkeley.edu/~wkahan/JAVAhurt.pdf">Arkistoitu</a> Viitattu 10.3.2023. <span style="font-size: 0.95em; position: relative;">(englanniksi)</span></span></span> </li> <li id="cite_note-64"><span class="mw-cite-backlink"><a href="#cite_ref-64">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite">Have you checked the Java? 18.10.2010. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20120921140402/http://blogs.technet.com/b/mmpc/archive/2010/10/18/have-you-checked-the-java.aspx">Arkistoitu</a> Viitattu 10.3.2023. <span style="font-size: 0.95em; position: relative;">(englanniksi)</span></span></span> </li> <li id="cite_note-65"><span class="mw-cite-backlink"><a href="#cite_ref-65">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="https://bugs.java.com/bugdatabase/">Bug Database</a> <i>bugs.java.com</i>. Viitattu 29.3.2023.</span></span> </li> <li id="cite_note-66"><span class="mw-cite-backlink"><a href="#cite_ref-66">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="http://www.darksleep.com/player/JavaAndUnsignedTypes.html">Java and unsigned int, unsigned short, unsigned byte, unsigned long, etc. (Or rather, the lack thereof)</a> <i>www.darksleep.com</i>. Viitattu 29.3.2023.</span></span> </li> <li id="cite_note-67"><span class="mw-cite-backlink"><a href="#cite_ref-67">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite">Darcy Joseph D.: <a rel="nofollow" class="external text" href="https://blogs.oracle.com/darcy/entry/unsigned_api">Unsigned Integer Arithmetic API now in JDK 8</a> <i>Oracle Weblog</i>.</span></span> </li> <li id="cite_note-:2-68"><span class="mw-cite-backlink">↑ <a href="#cite_ref-:2_68-0"><sup><i>a</i></sup></a> <a href="#cite_ref-:2_68-1"><sup><i>b</i></sup></a></span> <span class="reference-text"><span class="lehtiviite" title="Lehtiviite">Moreira, J.E.; S. P. Midkiff; M. Gupta; P. V. Artigas; M. Snir; R. D. Lawrence: "Java programming for high-performance numerical computing". <i>IBM Systems Journal.</i>, 2000. </span></span> </li> <li id="cite_note-69"><span class="mw-cite-backlink"><a href="#cite_ref-69">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="https://benhutchison.wordpress.com/2008/06/15/the-jvm-needs-value-types/">My Digital Neuron</a> <i>benhutchison.wordpress.com</i>.</span></span> </li> <li id="cite_note-70"><span class="mw-cite-backlink"><a href="#cite_ref-70">↑</a></span> <span class="reference-text"><i>Sherman R. Alpert (IBM) (1998). "Primitive Types Considered Harmful". Java Report, November, 1998 (Volume 3, Number 11).</i> </span> </li> <li id="cite_note-71"><span class="mw-cite-backlink"><a href="#cite_ref-71">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="https://www.geeksforgeeks.org/serialization-in-java/">Serialization and Deserialization in Java with Example</a> <i>GeeksforGeeks</i>. 13.1.2016. Viitattu 23.3.2023. <span style="font-size: 0.95em;">(englanniksi)</span></span></span> </li> <li id="cite_note-72"><span class="mw-cite-backlink"><a href="#cite_ref-72">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="https://dzone.com/articles/serialization-must-die">Serialization Must Die - DZone</a> <i>dzone.com</i>. Viitattu 23.3.2023. <span style="font-size: 0.95em;">(englanniksi)</span></span></span> </li> <li id="cite_note-73"><span class="mw-cite-backlink"><a href="#cite_ref-73">↑</a></span> <span class="reference-text">1.<i>Bloch, Joshua (2018). Effective Java. Addison-Wesley. pp. 339–345. <a href="/wiki/Toiminnot:Kirjal%C3%A4hteet/978-0-13-468599-1" title="Toiminnot:Kirjalähteet/978-0-13-468599-1">ISBN 978-0-13-468599-1</a></i></span> </li> <li id="cite_note-74"><span class="mw-cite-backlink"><a href="#cite_ref-74">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="http://programmers.stackexchange.com/questions/108699/why-does-javas-collection-size-return-an-int">Why does Java's Collection.size() return an int? - Programmers</a> <i>web.archive.org</i>. 26.3.2013. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20130326011311/http://programmers.stackexchange.com/questions/108699/why-does-javas-collection-size-return-an-int">Arkistoitu</a> 26.3.2013. Viitattu 29.3.2023.</span></span> </li> <li id="cite_note-75"><span class="mw-cite-backlink"><a href="#cite_ref-75">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite">James Gosling; Bill Joy; Guy Steele; Gilad Bracha: <a rel="nofollow" class="external text" href="https://docs.oracle.com/javase/specs/">Java SE Specifications</a> <i>docs.oracle.com</i>. Viitattu 29.3.2023.</span></span> </li> <li id="cite_note-76"><span class="mw-cite-backlink"><a href="#cite_ref-76">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite">Lowden James: <a rel="nofollow" class="external text" href="https://mail.openjdk.org/pipermail/coin-dev/2009-March/000869.html">Proposal: Large arrays (take two)</a> <i>mail.openjdk.org</i>. Tue Mar 24 12:02:22 PDT 2009. Viitattu 29.3.2023.</span></span> </li> <li id="cite_note-77"><span class="mw-cite-backlink"><a href="#cite_ref-77">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="https://docs.oracle.com/javase/7/docs/api/java/util/Collection.html">Collection (Java Platform SE 7 )</a> <i>docs.oracle.com</i>. Viitattu 29.3.2023.</span></span> </li> <li id="cite_note-78"><span class="mw-cite-backlink"><a href="#cite_ref-78">↑</a></span> <span class="reference-text"><span class="verkkoviite" title="Verkkoviite"><a rel="nofollow" class="external text" href="https://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html">ByteBuffer (Java Platform SE 7 )</a> <i>docs.oracle.com</i>. Viitattu 29.3.2023.</span></span> </li> <li id="cite_note-79"><span class="mw-cite-backlink"><a href="#cite_ref-79">↑</a></span> <span class="reference-text">David Flanagan. <i>Java in a Nutshell</i>. p. 77.</span> </li> <li id="cite_note-:3-80"><span class="mw-cite-backlink">↑ <a href="#cite_ref-:3_80-0"><sup><i>a</i></sup></a> <a href="#cite_ref-:3_80-1"><sup><i>b</i></sup></a> <a href="#cite_ref-:3_80-2"><sup><i>c</i></sup></a></span> <span class="reference-text"><span class="lehtiviite" title="Lehtiviite">Criticism of Java. <i>Wikipedia</i>, 4.4.2023.  <a class="external text" href="https://en.wikipedia.org/w/index.php?title=Criticism_of_Java&oldid=1148163329">Artikkelin verkkoversio</a>. <span style="font-size: 0.95em;">(englanniksi)</span></span></span> </li> </ol> </div> <div class="mw-heading mw-heading2"><h2 id="Aiheesta_muualla">Aiheesta muualla</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Java&veaction=edit&section=53" title="Muokkaa osiota Aiheesta muualla" class="mw-editsection-visualeditor"><span>muokkaa</span></a><span class="mw-editsection-divider"> | </span><a href="/w/index.php?title=Java&action=edit&section=53" title="Muokkaa osion lähdekoodia: Aiheesta muualla"><span>muokkaa wikitekstiä</span></a><span class="mw-editsection-bracket">]</span></span></div> <style data-mw-deduplicate="TemplateStyles:r22431496">.mw-parser-output .side-box{margin:4px 0;box-sizing:border-box;border:1px solid #aaa;font-size:88%;line-height:1.25em;background-color:#f9f9f9;display:flow-root}.mw-parser-output .side-box-abovebelow,.mw-parser-output .side-box-text{padding:0.25em 0.9em}.mw-parser-output .side-box-image{padding:2px 0 2px 0.9em;text-align:center}.mw-parser-output .side-box-imageright{padding:2px 0.9em 2px 0;text-align:center}@media(min-width:500px){.mw-parser-output .side-box-flex{display:flex;align-items:center}.mw-parser-output .side-box-text{flex:1;min-width:0}}@media(min-width:720px){.mw-parser-output .side-box{width:238px}.mw-parser-output .side-box-right{clear:right;float:right;margin-left:1em}.mw-parser-output .side-box-left{margin-right:1em}}</style><div class="side-box side-box-right plainlinks sistersitebox"><style data-mw-deduplicate="TemplateStyles:r22718453">.mw-parser-output .plainlist ol,.mw-parser-output .plainlist ul{line-height:inherit;list-style:none;margin:0;padding:0}.mw-parser-output .plainlist ol li,.mw-parser-output .plainlist ul li{margin-bottom:0}</style> <div class="side-box-flex"> <div class="side-box-image"><span class="noviewer" typeof="mw:File"><a href="/wiki/Tiedosto:Commons-logo.svg" class="mw-file-description"><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Commons-logo.svg/40px-Commons-logo.svg.png" decoding="async" width="30" height="40" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/4/4a/Commons-logo.svg/60px-Commons-logo.svg.png 1.5x" data-file-width="1024" data-file-height="1376" /></a></span></div> <div class="side-box-text plainlist"><a href="/wiki/Wikimedia_Commons" title="Wikimedia Commons">Wikimedia Commonsissa</a> on kuvia tai muita tiedostoja aiheesta <b><a href="https://commons.wikimedia.org/wiki/Category:Java_(programming_language)" class="extiw" title="commons:Category:Java (programming language)">Java</a></b>.</div></div> </div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r22431496" /><div class="side-box side-box-right plainlinks sistersitebox"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r22718453" /> <div class="side-box-flex"> <div class="side-box-image"><span class="noviewer" typeof="mw:File"><a href="/wiki/Tiedosto:Wikibooks-logo-en-noslogan.svg" class="mw-file-description"><img alt="" src="//upload.wikimedia.org/wikipedia/commons/thumb/d/df/Wikibooks-logo-en-noslogan.svg/40px-Wikibooks-logo-en-noslogan.svg.png" decoding="async" width="40" height="40" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/d/df/Wikibooks-logo-en-noslogan.svg/60px-Wikibooks-logo-en-noslogan.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/d/df/Wikibooks-logo-en-noslogan.svg/120px-Wikibooks-logo-en-noslogan.svg.png 2x" data-file-width="400" data-file-height="400" /></a></span></div> <div class="side-box-text plainlist"><a href="https://fi.wikibooks.org/wiki/" class="extiw" title="b:">Wikikirjastossa</a> on aihe: <b><a href="https://fi.wikibooks.org/wiki/Java" class="extiw" title="b:Java">Java</a></b></div></div> </div> <ul><li><a rel="nofollow" class="external text" href="http://java.sun.com/">Sunin Java-sivut</a> <span style="font-size: 0.95em; position: relative;">(englanniksi)</span></li> <li><a rel="nofollow" class="external text" href="http://java.sun.com/javase/6/docs/api/">Javadoc J2SE 1.6</a> <span style="font-size: 0.95em; position: relative;">(englanniksi)</span></li> <li><a rel="nofollow" class="external text" href="http://www.cs.helsinki.fi/u/wikla/Ohjelmointi/Sisalto/">Ohjelmoinnin perusteita Java-kielellä</a></li> <li><a rel="nofollow" class="external text" href="http://cs.joensuu.fi/~vouti/tjdoku/JAVA/">Aloittelijan Java-opas</a></li> <li><a rel="nofollow" class="external text" href="http://staff.cs.utu.fi/staff/jouni.smed/SHR07-SPOO.pdf">Sopimuspohjainen olio-ohjelmointi Java-kielellä</a></li> <li><a rel="nofollow" class="external text" href="http://www.pedacode.net/pikaoppaat/version2/HelloWorld.html">Java-kehitysympäristön pystyttäminen ja HelloWorld-ohjelman luominen</a></li> <li><a rel="nofollow" class="external text" href="http://www.meshplex.org/wiki/Java/Introduction_to_Java">Full Java Tutorial</a> (<a rel="nofollow" class="external text" href="https://web.archive.org/web/20070618164741/http://www.meshplex.org/wiki/Java/Introduction_to_Java">Arkistoitu</a> – Internet Archive)</li> <li><a rel="nofollow" class="external text" href="http://www.netbeans.org/">NetBeans, Avoimeen lähdekoodiin perustuva Java-kehitysympäristö</a></li></ul> <div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r22837949">.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}</style><style data-mw-deduplicate="TemplateStyles:r22706081">.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;margin:auto;clear:both;font-size:88%;text-align:center;padding:1px}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}</style><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r22837949" /><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r22837949" /><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r22837949" /></div><div role="navigation" class="navbox" aria-labelledby="Yleisimmät_ohjelmointikielet" style="padding:3px"><table class="nowraplinks mw-collapsible mw-collapsed navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2" style="background:#AABBCC"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r22837949" /><style data-mw-deduplicate="TemplateStyles:r22702658">.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}</style><div class="plainlinks hlist navbar mini"><ul><li class="nv-view"><a href="/wiki/Malline:Ohjelmointikielet" title="Malline:Ohjelmointikielet"><span title="Näytä malline">n</span></a></li><li class="nv-talk"><a href="/wiki/Keskustelu_mallineesta:Ohjelmointikielet" title="Keskustelu mallineesta:Ohjelmointikielet"><span title="Keskustele mallineesta">k</span></a></li><li class="nv-edit"><a class="external text" href="https://fi.wikipedia.org/w/index.php?title=Malline:Ohjelmointikielet&action=edit"><span title="Muokkaa mallinetta">m</span></a></li></ul></div><div id="Yleisimmät_ohjelmointikielet" style="font-size:114%;margin:0 4em"><a href="/wiki/Ohjelmointikieli" title="Ohjelmointikieli">Yleisimmät ohjelmointikielet</a></div></th></tr><tr><th scope="row" class="navbox-group" style="background:#AABBCC;width:1%;text-align: left; white-space:nowrap; font-weight:bold;">Tuotantokäytössä</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"><div class="hlist"> <ul><li><a href="/wiki/Ada_(ohjelmointikieli)" title="Ada (ohjelmointikieli)">Ada</a></li> <li><a href="/wiki/APL_(ohjelmointikieli)" title="APL (ohjelmointikieli)">APL</a></li> <li><a href="/wiki/Assembly_(ohjelmointikieli)" title="Assembly (ohjelmointikieli)">Assembly</a></li> <li><a href="/wiki/AWK" title="AWK">AWK</a></li> <li><a href="/wiki/C_(ohjelmointikieli)" title="C (ohjelmointikieli)">C</a></li> <li><a href="/wiki/C%2B%2B" title="C++">C++</a></li> <li><a href="/wiki/C_sharp" title="C sharp">C#</a></li> <li><a href="/wiki/COBOL" title="COBOL">COBOL</a></li> <li><a href="/wiki/Dart_(ohjelmointikieli)" title="Dart (ohjelmointikieli)">Dart</a></li> <li><a href="/wiki/Delphi" title="Delphi">Delphi</a></li> <li><a href="/wiki/Eiffel_(ohjelmointikieli)" title="Eiffel (ohjelmointikieli)">Eiffel</a></li> <li><a href="/wiki/Erlang_(ohjelmointikieli)" title="Erlang (ohjelmointikieli)">Erlang</a></li> <li><a href="/wiki/Forth_(ohjelmointikieli)" title="Forth (ohjelmointikieli)">Forth</a></li> <li><a href="/wiki/Fortran" title="Fortran">Fortran</a></li> <li><a href="/wiki/Go_(ohjelmointikieli)" title="Go (ohjelmointikieli)">Go</a></li> <li><a class="mw-selflink selflink">Java</a></li> <li><a href="/wiki/JavaScript" title="JavaScript">JavaScript</a></li> <li><a href="/wiki/Kotlin_(ohjelmointikieli)" title="Kotlin (ohjelmointikieli)">Kotlin</a></li> <li><a href="/wiki/Lisp" title="Lisp">Lisp</a></li> <li><a href="/wiki/Lua" title="Lua">Lua</a></li> <li><span style="white-space:nowrap"><a href="/wiki/Objective-C" title="Objective-C">Objective-C</a></span></li> <li><a href="/wiki/Pascal_(ohjelmointikieli)" title="Pascal (ohjelmointikieli)">Pascal</a></li> <li><a href="/wiki/Perl" title="Perl">Perl</a></li> <li><a href="/wiki/PHP" title="PHP">PHP</a></li> <li><a href="/wiki/PostScript" title="PostScript">PostScript</a></li> <li><a href="/wiki/Python_(ohjelmointikieli)" title="Python (ohjelmointikieli)">Python</a></li> <li><a href="/wiki/R_(ohjelmointikieli)" title="R (ohjelmointikieli)">R</a></li> <li><a href="/wiki/Ruby" title="Ruby">Ruby</a></li> <li><a href="/wiki/Rust_(ohjelmointikieli)" title="Rust (ohjelmointikieli)">Rust</a></li> <li><a href="/wiki/Smalltalk" title="Smalltalk">Smalltalk</a></li> <li><a href="/wiki/Swift_(ohjelmointikieli)" title="Swift (ohjelmointikieli)">Swift</a></li> <li><a href="/wiki/Tcl_(ohjelmointikieli)" title="Tcl (ohjelmointikieli)">Tcl</a></li> <li><a href="/wiki/TypeScript" title="TypeScript">TypeScript</a></li> <li><span style="white-space:nowrap"><a href="/wiki/Visual_Basic" title="Visual Basic">Visual Basic</a></span></li></ul> </div></div></td></tr><tr><th scope="row" class="navbox-group" style="background:#AABBCC;width:1%;text-align: left; white-space:nowrap; font-weight:bold;">Akateemiset</th><td class="navbox-list-with-group navbox-list navbox-even hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"><div class="hlist"> <ul><li><a href="/wiki/CLU" title="CLU">CLU</a></li> <li><a href="/wiki/Haskell" title="Haskell">Haskell</a></li> <li><a href="/wiki/Logo_(ohjelmointikieli)" title="Logo (ohjelmointikieli)">Logo</a></li> <li><a href="/wiki/ML_(ohjelmointikieli)" title="ML (ohjelmointikieli)">ML</a></li> <li><a href="/wiki/OCaml" title="OCaml">OCaml</a></li> <li><a href="/wiki/Prolog" title="Prolog">Prolog</a></li> <li><a href="/wiki/Scheme" title="Scheme">Scheme</a></li></ul> </div></div></td></tr><tr><th scope="row" class="navbox-group" style="background:#AABBCC;width:1%;text-align: left; white-space:nowrap; font-weight:bold;">Historialliset</th><td class="navbox-list-with-group navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"><div class="hlist"> <ul><li><a href="/wiki/ALGOL" title="ALGOL">ALGOL</a></li> <li><a href="/wiki/BASIC" title="BASIC">BASIC</a></li> <li><span style="white-space:nowrap"><a href="/w/index.php?title=Modula-3&action=edit&redlink=1" class="new" title="Modula-3 (sivua ei ole)">Modula-3</a></span></li> <li><a href="/wiki/MUMPS" title="MUMPS">MUMPS</a></li> <li><a href="/w/index.php?title=Plankalk%C3%BCl&action=edit&redlink=1" class="new" title="Plankalkül (sivua ei ole)">Plankalkül</a></li> <li><a href="/wiki/PL/I" title="PL/I">PL/I</a></li> <li><a href="/wiki/Simula" title="Simula">Simula</a></li></ul> </div></div></td></tr><tr><td class="navbox-abovebelow" colspan="2" style="background:#AABBCC"><div><a href="/wiki/Luettelo_ohjelmointikielist%C3%A4" title="Luettelo ohjelmointikielistä">Luettelo yleisimmistä ohjelmointikielistä</a></div></td></tr></tbody></table></div> <div class="navbox-styles"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r22837949" /><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r22706081" /></div><div role="navigation" class="navbox authority-control" aria-labelledby="Auktoriteettitunnisteet_frameless&#124;text-top&#124;10px&#124;alt=Muokkaa_Wikidatassa&#124;link=https&#58;//www.wikidata.org/wiki/Q251#identifiers&#124;class=noprint&#124;Muokkaa_Wikidatassa" style="padding:3px"><table class="nowraplinks hlist mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><div id="Auktoriteettitunnisteet_frameless&#124;text-top&#124;10px&#124;alt=Muokkaa_Wikidatassa&#124;link=https&#58;//www.wikidata.org/wiki/Q251#identifiers&#124;class=noprint&#124;Muokkaa_Wikidatassa" style="font-size:114%;margin:0 4em"><a href="/wiki/Malline:Auktoriteettitunnisteet" title="Malline:Auktoriteettitunnisteet">Auktoriteettitunnisteet</a> <span class="mw-valign-text-top noprint" typeof="mw:File/Frameless"><a href="https://www.wikidata.org/wiki/Q251#identifiers" title="Muokkaa Wikidatassa"><img alt="Muokkaa Wikidatassa" src="//upload.wikimedia.org/wikipedia/commons/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/10px-OOjs_UI_icon_edit-ltr-progressive.svg.png" decoding="async" width="10" height="10" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/15px-OOjs_UI_icon_edit-ltr-progressive.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/8/8a/OOjs_UI_icon_edit-ltr-progressive.svg/20px-OOjs_UI_icon_edit-ltr-progressive.svg.png 2x" data-file-width="20" data-file-height="20" /></a></span></div></th></tr><tr><th scope="row" class="navbox-group" style="width:1%">Kansalliset</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><span class="uid"><a rel="nofollow" class="external text" href="https://datos.bne.es/resource/XX540033">Espanja</a></span></li> <li><span class="uid"><a rel="nofollow" class="external text" href="https://catalogue.bnf.fr/ark:/12148/cb12533207m">Ranska</a></span></li> <li><span class="uid"><a rel="nofollow" class="external text" href="https://data.bnf.fr/ark:/12148/cb12533207m">BnF data</a></span></li> <li><span class="uid"><a rel="nofollow" class="external text" href="https://d-nb.info/gnd/4401313-9">Saksa</a></span></li> <li><span class="uid"><a rel="nofollow" class="external text" href="https://www.nli.org.il/en/authorities/987007561288105171">Israel</a></span></li> <li><span class="uid"><a rel="nofollow" class="external text" href="https://id.loc.gov/authorities/sh95008574">Yhdysvallat</a></span></li> <li><span class="uid"><abbr title="Java (programovací jazyk)"><a rel="nofollow" class="external text" href="https://aleph.nkp.cz/F/?func=find-c&local_base=aut&ccl_term=ica=ph117027&CON_LNG=ENG">Tšekki</a></abbr></span></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Muut</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><span class="uid"><a rel="nofollow" class="external text" href="https://elmcip.net/node/10259">ELMCIP</a></span></li></ul> </div></td></tr></tbody></table></div></div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://auth.wikimedia.org/loginwiki/wiki/Special:CentralAutoLogin/start?useformat=desktop&type=1x1&usesul3=1" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Noudettu kohteesta ”<a dir="ltr" href="https://fi.wikipedia.org/w/index.php?title=Java&oldid=23144845">https://fi.wikipedia.org/w/index.php?title=Java&oldid=23144845</a>”</div></div> <div id="catlinks" class="catlinks" data-mw="interface"><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="/wiki/Toiminnot:Luokat" title="Toiminnot:Luokat">Luokka</a>: <ul><li><a href="/wiki/Luokka:Java" title="Luokka:Java">Java</a></li></ul></div><div id="mw-hidden-catlinks" class="mw-hidden-catlinks mw-hidden-cats-hidden">Piilotetut luokat: <ul><li><a href="/wiki/Luokka:Small-elementti%C3%A4_k%C3%A4ytt%C3%A4m%C3%A4tt%C3%B6m%C3%A4t_tarkenteelliset_tietolaatikot" title="Luokka:Small-elementtiä käyttämättömät tarkenteelliset tietolaatikot">Small-elementtiä käyttämättömät tarkenteelliset tietolaatikot</a></li><li><a href="/wiki/Luokka:Puutteelliset_l%C3%A4hdemerkinn%C3%A4t" title="Luokka:Puutteelliset lähdemerkinnät">Puutteelliset lähdemerkinnät</a></li><li><a href="/wiki/Luokka:V%C3%A4itteelle_ei_ole_merkitty_esitt%C3%A4j%C3%A4%C3%A4" title="Luokka:Väitteelle ei ole merkitty esittäjää">Väitteelle ei ole merkitty esittäjää</a></li><li><a href="/wiki/Luokka:Suomentaja-parametria_k%C3%A4ytt%C3%A4v%C3%A4t_viitteet" title="Luokka:Suomentaja-parametria käyttävät viitteet">Suomentaja-parametria käyttävät viitteet</a></li><li><a href="/wiki/Luokka:Wikipedia-artikkelit_BNE-tunnisteilla" title="Luokka:Wikipedia-artikkelit BNE-tunnisteilla">Wikipedia-artikkelit BNE-tunnisteilla</a></li><li><a href="/wiki/Luokka:Wikipedia-artikkelit_BNF-tunnisteilla" title="Luokka:Wikipedia-artikkelit BNF-tunnisteilla">Wikipedia-artikkelit BNF-tunnisteilla</a></li><li><a href="/wiki/Luokka:Wikipedia-artikkelit_BNFdata-tunnisteilla" title="Luokka:Wikipedia-artikkelit BNFdata-tunnisteilla">Wikipedia-artikkelit BNFdata-tunnisteilla</a></li><li><a href="/wiki/Luokka:Wikipedia-artikkelit_GND-tunnisteilla" title="Luokka:Wikipedia-artikkelit GND-tunnisteilla">Wikipedia-artikkelit GND-tunnisteilla</a></li><li><a href="/wiki/Luokka:Wikipedia-artikkelit_J9U-tunnisteilla" title="Luokka:Wikipedia-artikkelit J9U-tunnisteilla">Wikipedia-artikkelit J9U-tunnisteilla</a></li><li><a href="/wiki/Luokka:Wikipedia-artikkelit_LCCN-tunnisteilla" title="Luokka:Wikipedia-artikkelit LCCN-tunnisteilla">Wikipedia-artikkelit LCCN-tunnisteilla</a></li><li><a href="/wiki/Luokka:Wikipedia-artikkelit_NKC-tunnisteilla" title="Luokka:Wikipedia-artikkelit NKC-tunnisteilla">Wikipedia-artikkelit NKC-tunnisteilla</a></li><li><a href="/wiki/Luokka:Wikipedia-artikkelit_ELMCIP_ID_-tunnisteilla" title="Luokka:Wikipedia-artikkelit ELMCIP ID -tunnisteilla">Wikipedia-artikkelit ELMCIP ID -tunnisteilla</a></li><li><a href="/wiki/Luokka:Seulonnan_keskeiset_artikkelit" title="Luokka:Seulonnan keskeiset artikkelit">Seulonnan keskeiset artikkelit</a></li></ul></div></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> <li id="footer-info-lastmod"> Sivua on viimeksi muutettu 1. huhtikuuta 2025 kello 17.28.</li> <li id="footer-info-copyright">Teksti on saatavilla <a rel="nofollow" class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.fi">Creative Commons Attribution/Share-Alike</a> -lisenssillä; lisäehtoja voi sisältyä. Katso <a class="external text" href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use/fi">käyttöehdot</a>.<br /> Wikipedia® on <a rel="nofollow" class="external text" href="https://wikimediafoundation.org/">Wikimedia Foundationin</a> rekisteröimä tavaramerkki.<br /> <a href="/wiki/Wikipedia:Artikkelien_ongelmat" title="Wikipedia:Artikkelien ongelmat">Ongelma artikkelissa?</a></li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Tietosuojakäytäntö</a></li> <li id="footer-places-about"><a href="/wiki/Wikipedia:Tietoja">Tietoja Wikipediasta</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Wikipedia:Vastuuvapaus">Vastuuvapaus</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">Käytössäännöstö</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Kehittäjät</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/fi.wikipedia.org">Tilastot</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Evästekäytäntö</a></li> <li id="footer-places-mobileview"><a href="//fi.m.wikipedia.org/w/index.php?title=Java&mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Mobiilinäkymä</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://www.wikimedia.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><picture><source media="(min-width: 500px)" srcset="/static/images/footer/wikimedia-button.svg" width="84" height="29"><img src="/static/images/footer/wikimedia.svg" width="25" height="25" alt="Wikimedia Foundation" lang="en" loading="lazy"></picture></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><picture><source media="(min-width: 500px)" srcset="/w/resources/assets/poweredby_mediawiki.svg" width="88" height="31"><img src="/w/resources/assets/mediawiki_compact.svg" alt="Powered by MediaWiki" lang="en" width="25" height="25" loading="lazy"></picture></a></li> </ul> </footer> </div> </div> </div> <div class="vector-header-container vector-sticky-header-container"> <div id="vector-sticky-header" class="vector-sticky-header"> <div class="vector-sticky-header-start"> <div class="vector-sticky-header-icon-start vector-button-flush-left vector-button-flush-right" aria-hidden="true"> <button class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-sticky-header-search-toggle" tabindex="-1" data-event-name="ui.vector-sticky-search-form.icon"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Haku</span> </button> </div> <div role="search" class="vector-search-box-vue vector-search-box-show-thumbnail vector-search-box"> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail"> <form action="/w/index.php" id="vector-sticky-search-form" class="cdx-search-input cdx-search-input--has-end-button"> <div class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="Hae Wikipediasta"> <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Toiminnot:Haku"> </div> <button class="cdx-button cdx-search-input__end-button">Hae</button> </form> </div> </div> </div> <div class="vector-sticky-header-context-bar"> <nav aria-label="Sisällysluettelo" class="vector-toc-landmark"> <div id="vector-sticky-header-toc" class="vector-dropdown mw-portlet mw-portlet-sticky-header-toc vector-sticky-header-toc vector-button-flush-left" > <input type="checkbox" id="vector-sticky-header-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-sticky-header-toc" class="vector-dropdown-checkbox " aria-label="Vaihda sisällysluettelo" > <label id="vector-sticky-header-toc-label" for="vector-sticky-header-toc-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-listBullet mw-ui-icon-wikimedia-listBullet"></span> <span class="vector-dropdown-label-text">Vaihda sisällysluettelo</span> </label> <div class="vector-dropdown-content"> <div id="vector-sticky-header-toc-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div class="vector-sticky-header-context-bar-primary" aria-hidden="true" ><span class="mw-page-title-main">Java</span></div> </div> </div> <div class="vector-sticky-header-end" aria-hidden="true"> <div class="vector-sticky-header-icons"> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-talk-sticky-header" tabindex="-1" data-event-name="talk-sticky-header"><span class="vector-icon mw-ui-icon-speechBubbles mw-ui-icon-wikimedia-speechBubbles"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-subject-sticky-header" tabindex="-1" data-event-name="subject-sticky-header"><span class="vector-icon mw-ui-icon-article mw-ui-icon-wikimedia-article"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-history-sticky-header" tabindex="-1" data-event-name="history-sticky-header"><span class="vector-icon mw-ui-icon-wikimedia-history mw-ui-icon-wikimedia-wikimedia-history"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only mw-watchlink" id="ca-watchstar-sticky-header" tabindex="-1" data-event-name="watch-sticky-header"><span class="vector-icon mw-ui-icon-wikimedia-star mw-ui-icon-wikimedia-wikimedia-star"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-ve-edit-sticky-header" tabindex="-1" data-event-name="ve-edit-sticky-header"><span class="vector-icon mw-ui-icon-wikimedia-edit mw-ui-icon-wikimedia-wikimedia-edit"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-edit-sticky-header" tabindex="-1" data-event-name="wikitext-edit-sticky-header"><span class="vector-icon mw-ui-icon-wikimedia-wikiText mw-ui-icon-wikimedia-wikimedia-wikiText"></span> <span></span> </a> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only" id="ca-viewsource-sticky-header" tabindex="-1" data-event-name="ve-edit-protected-sticky-header"><span class="vector-icon mw-ui-icon-wikimedia-editLock mw-ui-icon-wikimedia-wikimedia-editLock"></span> <span></span> </a> </div> <div class="vector-sticky-header-buttons"> <button class="cdx-button cdx-button--weight-quiet mw-interlanguage-selector" id="p-lang-btn-sticky-header" tabindex="-1" data-event-name="ui.dropdown-p-lang-btn-sticky-header"><span class="vector-icon mw-ui-icon-wikimedia-language mw-ui-icon-wikimedia-wikimedia-language"></span> <span>118 kieltä</span> </button> <a href="#" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--action-progressive" id="ca-addsection-sticky-header" tabindex="-1" data-event-name="addsection-sticky-header"><span class="vector-icon mw-ui-icon-speechBubbleAdd-progressive mw-ui-icon-wikimedia-speechBubbleAdd-progressive"></span> <span>Lisää aihe</span> </a> </div> <div class="vector-sticky-header-icon-end"> <div class="vector-user-links"> </div> </div> </div> </div> </div> <div class="mw-portlet mw-portlet-dock-bottom emptyPortlet" id="p-dock-bottom"> <ul> </ul> </div> <script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgHostname":"mw-web.codfw.main-fb96cc848-n5lnl","wgBackendResponseTime":227,"wgPageParseReport":{"limitreport":{"cputime":"0.571","walltime":"0.819","ppvisitednodes":{"value":4193,"limit":1000000},"postexpandincludesize":{"value":80977,"limit":2097152},"templateargumentsize":{"value":9467,"limit":2097152},"expansiondepth":{"value":18,"limit":100},"expensivefunctioncount":{"value":24,"limit":500},"unstrip-depth":{"value":0,"limit":20},"unstrip-size":{"value":110716,"limit":5000000},"entityaccesscount":{"value":1,"limit":400},"timingprofile":["100.00% 628.175 1 -total"," 17.87% 112.245 1 Malline:Viitteet"," 15.83% 99.421 1 Malline:Ohjelmointikielet"," 15.29% 96.057 1 Malline:Navbox"," 14.56% 91.492 4 Malline:Wikidata"," 14.30% 89.830 1 Malline:Ohjelmointikieli"," 13.62% 85.588 1 Malline:Tietolaatikko"," 12.70% 79.807 1 Malline:Commonscat"," 12.23% 76.835 1 Malline:Commons"," 12.13% 76.200 2 Malline:Sister_project"]},"scribunto":{"limitreport-timeusage":{"value":"0.139","limit":"10.000"},"limitreport-memusage":{"value":2421194,"limit":52428800}},"cachereport":{"origin":"mw-web.eqiad.main-768b59b564-44r4f","timestamp":"20250401142813","ttl":2592000,"transientcontent":false}}});});</script> <script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Article","name":"Java","url":"https:\/\/fi.wikipedia.org\/wiki\/Java","sameAs":"http:\/\/www.wikidata.org\/entity\/Q251","mainEntity":"http:\/\/www.wikidata.org\/entity\/Q251","author":{"@type":"Organization","name":"Wikimedia-hankkeiden muokkaajat"},"publisher":{"@type":"Organization","name":"Wikimedia Foundation, Inc.","logo":{"@type":"ImageObject","url":"https:\/\/www.wikimedia.org\/static\/images\/wmf-hor-googpub.png"}},"datePublished":"2003-07-08T12:59:47Z","headline":"ohjelmointikieli"}</script> </body> </html>