Java — programmeringssprog, platformuafhængig VM og LTS-udgivelser
Lær Java: objektorienteret og platformuafhængigt sprog med VM, LTS-udgivelser (8, 11, 17+), kompatibilitet, Android-brug og opdateringshistorik.
Java er navnet på et programmeringssprog, der er udviklet af Sun Microsystems. Sun blev senere opkøbt af Oracle Corporation, som efterfølgende har stået for mange af de officielle JDK-udgivelser. Java udgives i to spor: hurtige, ikke-LTS udgivelser hver halve år og LTS (Long‑Term Support) udgivelser med længere supportvindue. Eksempler fra de seneste år er Java 8 og Java 11 (begge LTS), Java 17 (LTS, udgivet september 2021) og Java 21 (LTS, udgivet september 2023). Ikke-LTS-udgivelser som Java 14, 15, 16 og 20 introducerede mange nye sprog- og JVM-funktioner i kortere innovationscyklus.
Sprogparadigme og syntaks
Java, som blev kaldt Oak, da det stadig blev udviklet, er et objektorienteret sprog: kode organiseres omkring objekter, der rummer tilstand (felter) og adfærd (metoder). Java-syntaksen ligner til en vis grad C, C++ og C#, men direkte kopiering mellem disse sprog vil oftest kræve tilpasning, fordi Java har sit eget type‑system, hukommelsesmodel og standardbibliotek.
Platformuafhængighed og den virtuelle maskine
Java er kendt for sloganet "Write Once, Run Anywhere" på grund af sin platformuafhængighed. Det opnås ved, at Java-kompileren oversætter kildekode til Java-bytekode (.class-filer) i stedet for direkte maskinkode. Den virtuelle Java‑maskine (JVM) fortolker og/eller kompilerer denne bytekode til maskinkode på det aktuelle system ved hjælp af bl.a. JIT (Just‑In‑Time) kompilering. JVM‑implementeringer som Oracle HotSpot er referencestandard, men der findes også andre — f.eks. GraalVM med ekstra optimeringsmuligheder.
Java kører på mange forskellige styresystemer og platforme, herunder desktop, servere og Android, verdens mest udbredte mobilstyresystem (Android anvender sin egen runtime (ART) og et andet bytecode-format (DEX), men Java‑sprog og -økosystem har historisk været tæt forbundet med Android). Selvom Java stadig bruges bredt på Android, har Google officielt anbefalet Kotlin som foretrukket sprog, men Java er fortsat fuldt understøttet og interoperabelt med Kotlin.
Værktøjer, referenceimplementation og distributioner
Den officielle referenceimplementation for Java er OpenJDK. Oracle tilbyder både OpenJDK-kilnekode og kommersielle builds (Oracle JDK) med forskellige licens- og supportvilkår. Siden Java 11 har der været ændringer i Oracles distributions- og supportpolitik, hvilket har fået mange organisationer til at vælge andre builds fra leverandører som Eclipse Adoptium (tidligere AdoptOpenJDK), Amazon Corretto, BellSoft Liberica, Azul Zulu m.fl., som tilbyder gratis eller betalt LTS‑support.
Sprog- og platformfunktioner (udvalgte)
- Generics — typeparametrisering i collections og API'er.
- Lambda‑udtryk og Streams API — introduceret i Java 8 for funktionel programmeringstilgang.
- Moduler (JPMS) — indført i Java 9 for bedre modularisering af større projekter.
- Local‑variable type inference (var) — indført i Java 10 for kortere deklarationer.
- Records, Sealed classes, Pattern matching — nyere sprogudvidelser, der gør datastrukturer og mønstermatchning mere kompakte og sikre.
- Forbedrede switch‑udtryk, text blocks og forbedrede null‑sikkerhedsmønstre — forbedrer læsbarhed og udviklerproduktivitet.
LTS og udgivelsescyklus
Oracle og OpenJDK har et fast halvårligt udgivelsesflow (marts og september). Hver tredje eller sjette udgivelse markeres typisk som LTS, afhængigt af planlægning, hvilket giver organisationer et stabilt opgraderingsmål med længere support. Virksomheder vælger ofte LTS‑udgaver (f.eks. Java 8, 11, 17, 21) til produktionsmiljøer, fordi disse modtager længerevarende sikkerhedsrettelser og support fra udbydere.
Anvendelsesområder og økosystem
Java bruges bredt i industrien til:
- Enterprise‑applikationer (f.eks. store backend‑systemer og mikrotjenester)
- Webapplikationer (servlets, Jakarta EE/Java EE, Spring Framework)
- Mobiludvikling på Android (sammen med Kotlin)
- Big data og databehandling (Hadoop, Spark og lignende værktøjer)
- Desktop‑apps (Swing, JavaFX) og indlejrede systemer
Praktiske bemærkninger om opgradering
Ved opgradering mellem større Java‑udgaver bør man teste applikationer grundigt, især ved skift mellem LTS og ikke‑LTS eller når man benytter tredjepartsbiblioteker. Mange biblioteker følger OpenJDK‑udgivelser tæt, men nogle enterprise‑afhængigheder kan kræve specifik JDK‑support eller certificering.
Samlet set fortsætter Java som et stabilt, løbende udviklet sprog og platform med et stort økosystem af biblioteker, værktøjer og implementeringer, hvilket gør det til et sikkert valg for mange typer af projekter — fra små applikationer til store, mission‑kritiske systemer.
Java-begreber
Java blev udviklet for at nå fem hovedmål. Disse er:
- Java skal være let at lære, objektorienteret og distribueret.
- Java skal være sikkert og stærkt.
- Java bør ikke være afhængig af nogen computerarkitektur eller platform.
- Java bør fungere godt.
- Java bør kunne have en fortolker, der er skrevet til det, og som understøtter parallelisme og bruger dynamisk typning.
Java-platform
Java-platformen henviser til en gruppe softwareprodukter fra Sun Microsystems. Platformen bruges til at udvikle og køre Java-programmer. Platformen omfatter den eksekveringsmotor (kaldet en Java Virtual Machine), som gør det muligt for Java-programmer at gøre det samme på forskellige computersystemer.
Denne evne til at kunne udvikle software på én platform og køre det på andre platforme kaldes "cross-platform capability".
Java-programeksempel
Et eksempel på et "Hello World"-Java-program:
Typer af Java-programmer
Der findes mange typer Java-programmer, som kører forskelligt:
- Java-applet - lille program skrevet i Java, der downloades fra et websted og udføres i en webbrowser på en klientcomputer.
- Program - udføres på en klientcomputer. Hvis den er online, skal den downloades, før den kan køres.
- JAR-fil (Java-arkiv) - bruges til at pakke Java-filer sammen i en enkelt fil (næsten præcis som en .zip-fil).
- Servlet - kører på en webserver og hjælper med at generere websider.
- Swing-applikation - bruges til at opbygge en applikation, der har en GUI (vinduer, knapper, menuer osv.).
- EJB - kører på en webserver og bruges til at udvikle store, komplekse websteder.
Fordele
Java bruges ofte til at lære studerende at programmere som et første sprog, men det bruges også af professionelle.
- Java kræver, at hver variabel initialiseres. Nogle ældre sprog som C tillader, at variabler ikke initialiseres, hvilket kan forårsage tilfældige fejl med mystiske fejl.
- Java kræver, at hver metode deklarerer en returtype - metoden skal altid returnere en værdi, undtagen hvis returtypen er void. Dette forhindrer også fejl.
- Java leveres med et stort sæt klasser og metoder, Java API'et, som kan bruges uden at skulle udvikle så meget kode "fra bunden".
- I modsætning til C er primitive Java-typer, såsom int, altid af samme størrelse i antal bits, hvilket bidrager til at opnå kompatibilitet på tværs af platforme.
- Java blev tidligere anset for at være langsommere end C, men det er blevet mindre vigtigt i de senere år, fordi computere er blevet hurtigere.
- Java har undtagelseshåndtering, som kræver, at programmøren håndterer fejlbetingelser som f.eks. input/output-fejl.
- Kode, der er kompileret på en Java-platform, kan køres på andre platforme, der understøtter Java, uden at kildekoden eller byte-koden ændres. Det betyder, at en person kan lave et Java-program til en Windows-computer og få det til at køre på en Linux-computer eller en Mac-computer.
Kritik
Java er også blevet kritiseret. Nogle af kritikpunkterne er:
- Generics blev tilføjet til Java på en sådan måde, at eksisterende kode stadig kunne køre videre. Dette blev gjort ved hjælp af type erasure. Det betyder, at den faktiske type af et generisk argument fjernes under kompilering. Dette kan føre til, at Java-fortolkeren til tider opfører sig på uventede måder.
- Java har ingen typer for ikke-fortegnede hele tal, som sprog som C i høj grad bruger. Det betyder også, at det er umuligt at udveksle numeriske data direkte mellem C og Java-programmer. Kryptografi er også til en vis grad afhængig af sådanne typer; dette gør det vanskeligere at skrive programmer, der anvender kryptografi i Java.
- IEEE har defineret en standard for aritmetik med flydende punktum, IEE 754. Java understøtter kun en del af funktionerne i denne standard.
Spørgsmål og svar
Spørgsmål: Hvad er navnet på det programmeringssprog, der er skabt af Sun Microsystems?
A: Det programmeringssprog, som Sun Microsystems har udviklet, hedder Java.
Spørgsmål: Hvem understøtter og ajourfører Java i øjeblikket?
Svar: Oracle Corporation understøtter og ajourfører Java i øjeblikket.
Sp: Hvad er de nuværende LTS-versioner (Long Term Support) af Java?
Svar: De nuværende LTS-versioner (Long Term Support) af Java er version 17, 11 og 8.
Spørgsmål: Hvornår blev den seneste version af Java frigivet?
Svar: Den seneste version af Java, version 19, blev udgivet i september 2022.
Spørgsmål: Er der andre virksomheder, der understøtter Java ud over Oracle?
Svar: Ja, Eclipse Adoptium understøtter også Java indtil mindst maj 2026 for version 8 og mindst september 2027 for version 17.
Spørgsmål: Hvilken type kode bruger Java?
Svar: Java anvender objektorienteret kode, hvilket betyder, at den er baseret på objekter, der arbejder sammen for at få programmerne til at udføre deres arbejde. Det ligner C, C++ eller C#, men kode skrevet i disse sprog vil i de fleste tilfælde ikke fungere uden at blive ændret.
Spørgsmål: Hvordan gør Java sig selv platformsuafhængig?
Svar: Java gør sig selv platformsuafhængig ved at få compileren til at omdanne kode til et særligt format kaldet bytecode i stedet for maskinkode. Det betyder, at når programmet udføres, kan bytekoden fortolkes af et særligt program kaldet en virtuel maskine, som oversætter den til maskinkode, så den kan køre på forskellige styresystemer som f.eks. Android.
Søge