Som fotograf ser vi ofte på det endelige billede, det færdige print, eller den polerede online-præsentation. Men bag kulisserne i den digitale verden, der understøtter vores kreative værktøjer – fra redigeringssoftware til online gallerier og meget mere – ligger komplekse teknologier. En af disse fundamentale teknologier er Java-platformen, og en version, der spillede en væsentlig rolle, var Java SE 6.
Java SE, der står for Java Platform, Standard Edition, er en computerplatform designet til udvikling og implementering af bærbar kode for både desktop- og servermiljøer. Tænk på det som et robust fundament, som mange forskellige softwareapplikationer kan bygges på. Platformen benytter Java-programmeringssproget og er en del af den større Java-softwarefamilie. Java SE definerer en række generelle API'er (Application Programming Interfaces), såsom Java API'erne for Java Class Library, og inkluderer også Java Language Specification og Java Virtual Machine Specification. Siden version 7 har OpenJDK været den officielle referenceimplementering.

- Navngivning og Historie
- Kernekomponenter: JDK og JRE
- Hvad Sagde Eksperterne om Java SE 6?
- Nøglepakker og API'er i Java SE 6
- Specialiserede Pakker
- Grafiske Brugergrænseflader (GUI): Swing
- Andre javax og org Pakker
- Performance, Test og Sikkerhed
- Ressourcer og Ældre Udgivelser
- Tabel over Nøglepakker
- Ofte Stillede Spørgsmål
Platformen har gennemgået flere navneændringer. Fra version 1.2 var den kendt som Java 2 Platform, Standard Edition, eller J2SE. Navnet blev ændret til Java Platform, Standard Edition, eller Java SE, i version 1.5. 'SE' bruges til at adskille denne grundlæggende platform fra Enterprise Edition (Java EE) og Micro Edition (Java ME) platformene. Tallet '2' var oprindeligt tænkt til at fremhæve de store ændringer introduceret i version 1.2, men det blev fjernet i version 1.6. Navngivningskonventionen har altså ændret sig flere gange i Javas historie.
Java SE 6, også kendt som JDK 6 eller kodenavnet 'Peabody', blev udgivet under Java Community Process via JSR 270. Dette standardiseringsarbejde sikrer, at platformen udvikles på en åben og samarbejdsorienteret måde.
Relaterede specifikationer inkluderer Java Platform, Enterprise Edition (Java EE), som indeholder alle klasser fra Java SE plus yderligere klasser nyttige for programmer, der kører på servere. Java Platform, Micro Edition (Java ME) er en anden relateret specifikation, der er beregnet til udvikling af software til små, ressourcebegrænsede enheder som mobiltelefoner, PDA'er og set-top-bokse.
Kernekomponenter: JDK og JRE
Når man taler om Java SE, støder man ofte på to akronymer: JRE og JDK. Java Runtime Environment (JRE) og Java Development Kit (JDK) er de faktiske filer, der downloades og installeres på en computer for henholdsvis at køre eller udvikle Java-programmer. JRE er det, slutbrugere skal have for at køre Java-applikationer, mens JDK er for udviklere, da det inkluderer JRE plus værktøjer til at skrive, kompilere og debugge Java-kode.
Hvad Sagde Eksperterne om Java SE 6?
Da Java SE 6 blev lanceret, vakte det opmærksomhed i branchen. Michael Cote, analytiker hos RedMonk, bemærkede, at "Sun gør et godt stykke arbejde med ikke at have for meget framework-stuff bagt ind i Java SE. På den måde er det lettere at lægge frameworks ovenpå." Dette peger på platformens fleksibilitet som et solidt grundlag.
Danny Coward, Java SE Platform lead, fremhævede forbedringerne inden for overvågning og administration: "Det virkelig store her er, at du ikke behøver at gøre noget særligt ved opstarten for at kunne tilknytte on-demand med nogen af overvågnings- og administrationsværktøjerne i Java SE-platformen. [Java SE 6] tilføjer endnu mere diagnostisk information, og vi medleverede det berygtede memory-heap analyseværktøj Jhat til retsmedicinske undersøgelser af disse core dumps." Dette viser et fokus på at give udviklere bedre værktøjer til at forstå og optimere deres applikationer.
Fra et performance-perspektiv var der også positive meldinger. Graeme Wallace, CTO hos FareCompare, delte sin erfaring: "Da de tidlige builds af Java SE 6 kom ud, sprang vi på for at se, om vi kunne få nogen performanceforbedringer, hvilket er afgørende for vores forretning. For at gøre en lang historie kort, var forskellen mellem Java SE 5 og Java SE 6 slående. Når det kommer til at 'crunche' flypriser, taler vi om en stigning i hastighed på 25% til 30%." Denne form for hastighedsforbedring kan have en enorm indvirkning på applikationers effektivitet.
Nøglepakker og API'er i Java SE 6
Java SE er organiseret i pakker, der indeholder relaterede klasser og interfaces. Mange af disse pakker er fundamentale for platformen.
java.lang
Denne pakke indeholder grundlæggende klasser og interfaces tæt knyttet til sproget og runtime-systemet. Dette inkluderer rodklasserne, der danner klassetræet (som Object), typer knyttet til sprogdefinitionen (som String og primitive wrapper-klasser), basale undtagelser (exceptions), matematiske funktioner (Math), threading (Thread), sikkerhedsfunktioner samt information om det underliggende native system. Klasser i java.lang importeres automatisk til enhver kildekodefil, hvilket understreger deres centrale rolle. I JDK 6 indeholdt denne pakke 22 ud af de 32 Error klasser.
java.lang.ref
Introduceret i J2SE 1.2, giver denne pakke mere fleksible typer af referencer end standard 'stærke' referencer, hvilket muliggør begrænset interaktion mellem applikationen og Java Virtual Machine (JVM) garbage collector. Den er vigtig, men bruges ikke af alle udviklere. Pakken definerer tre yderligere referencetyper: soft, weak og phantom referencer, hver designet til et specifikt formål.
- En SoftReference kan bruges til at implementere en cache. Objekter, der kun er nåelige via en soft reference, kan garbage collectes efter garbage collectorens skøn, typisk når ledig hukommelse er lav.
- En WeakReference bruges til at implementere 'svage' maps (som
java.util.WeakHashMap). Objekter, der kun er nåelige via en weak reference, garbage collectes i næste opsamlingscyklus. - En PhantomReference bruges til at referere objekter, der er markeret til garbage collection og er blevet finaliseret, men endnu ikke er blevet frigivet. Dette giver mulighed for mere fleksibel oprydning.
Alle disse referencetyper udvider klassen Reference, som tilbyder metoder som get() (for at få en stærk reference til objektet) og clear() (for at rydde referencen). Pakken inkluderer også ReferenceQueue til at holde styr på referencer, der har ændret nåelighedstilstand.
java.lang.reflect
Denne pakke, tilføjet i JDK 1.1, indeholder API'er for refleksion, der lader Java-kode undersøge og 'reflektere' over Java-komponenter ved runtime og bruge de reflekterede medlemmer. Klasser som Method, Constructor og Field, sammen med java.lang.Class, understøtter applikationer som debuggere, tolke, objektinspektorer og GUI-designere, der har brug for adgang til klassers medlemmer. Refleksion muliggør dynamisk programmering, hvor klasser og deres medlemmer kan opdages og bruges ved navn under kørsel.
java.io
Denne pakke indeholder klasser, der understøtter input og output, primært stream-orienteret, men også med understøttelse af random access-filer. De centrale abstraktioner er InputStream og OutputStream for byte streams, og Reader og Writer for karakter streams. Stream-klasser følger ofte decorator-mønstret for at tilføje funktionalitet, som filtrering eller buffering. Pakken understøtter forskellige kilder/destinationer som byte arrays, karakter arrays, filer, strenge og tråde (via PipedInputStream/OutputStream). Reader og Writer håndterer konvertering mellem bytes og karakterer ved hjælp af tegnsæt. RandomAccessFile muliggør tilfældig læsning/skrivning i filer ved hjælp af en filpointer. File-klassen repræsenterer filstier og understøtter filsystemoperationer som oprettelse, sletning og manipulation af attributter. FileDescriptor repræsenterer en kilde eller destination af bytes.
I J2SE 1.4 blev java.nio (Non-blocking I/O) tilføjet for at forbedre I/O-performance med understøttelse af buffere, kanaler og låsning af filer. java.nio.charset håndterer tegnsæt.
java.math
Denne pakke understøtter multipræcisionsaritmetik. De vigtigste klasser er BigDecimal for vilkårligt præcise decimaltal med kontrol over afrundning (via RoundingMode) og BigInteger for vilkårligt præcise heltal, der understøtter standardaritmetik, modulær aritmetik, GCD, primtalstest og -generering. MathContext indkapsler indstillinger for numeriske operationer.
Andre Generelle Pakker
Java SE 6 inkluderer mange andre pakker, der dækker forskellige aspekter af softwareudvikling:
java.net: Giver specifikke I/O-rutiner for netværk, understøtter HTTP-anmodninger og andre netværkstransaktioner.java.text: Implementerer parsing-rutiner for strenge og understøtter forskellige menneskelige sprog og lokaliseret parsing.java.util: Fokuserer på datastrukturer, der aggregerer objekter. Inkluderer Collections API, en organiseret hierarki af datastrukturer.
Specialiserede Pakker
java.applet
Oprindeligt skabt til at understøtte Java-applets, der kunne downloades over netværket og køre i en sandkasse i en webbrowser. Sikkerhedsrestriktioner var lette at pålægge. Applets er nu forældede (deprecated), og dermed er denne pakke også forældet.
java.beans
Indeholder klasser til udvikling og manipulation af 'beans', genanvendelige komponenter defineret af JavaBeans-arkitekturen. Denne arkitektur giver mekanismer til at manipulere komponenters egenskaber og udløse hændelser, når disse ændrer sig. API'erne er primært beregnet til brug af værktøjer som GUI-designere i integrerede udviklingsmiljøer (IDE'er).

java.awt (Abstract Window Toolkit)
Giver adgang til et grundlæggende sæt GUI-widgets baseret på den underliggende native platforms widget-sæt. Det er kernen i GUI-hændelsessystemet og interfacet mellem det native vinduessystem og Java-applikationen. Det tilbyder også layout managers, dataoverførsel (clipboard, drag and drop), interface til input-enheder og adgang til systembakken. Denne pakke, sammen med javax.swing, indeholdt det største antal enums (7 i alt) i JDK 6.
java.rmi
Tilbyder Java Remote Method Invocation for at understøtte fjernprocedurekald mellem to Java-applikationer, der kører i forskellige JVM'er.
java.security
Indeholder understøttelse for sikkerhed, herunder message digest-algoritmer.
java.sql
En implementering af JDBC API'en, der bruges til at få adgang til SQL-databaser.
javax.rmi
Leverede understøttelse for fjernkommunikation mellem applikationer ved hjælp af RMI over IIOP-protokollen, der kombinerer RMI- og CORBA-funktioner.
Grafiske Brugergrænseflader (GUI): Swing
Swing er en samling af rutiner, der bygger ovenpå java.awt for at levere et platformsuafhængigt widget-toolkit. I modsætning til AWT, der bruger native widgets, bruger javax.swing 2D-tegnerutiner til at gengive brugergrænsefladekomponenterne. Dette muliggør 'pluggable looks and feels' (PLAFs), så widgets kan efterligne udseendet fra det underliggende native system, eller have et helt unikt udseende. Designmønstre gennemsyrer systemet, især en modifikation af model-view-controller (MVC) mønstret, der løsner koblingen mellem funktion og udseende. En uoverensstemmelse i J2SE 1.3 var, at skrifttyper blev tegnet af det underliggende native system, ikke af Java, hvilket begrænsede tekstportabilitet. Arbejdsgange, som at bruge bitmap-skrifttyper, eksisterer dog. Generelt bruges 'layouts' til at opretholde et æstetisk konsistent GUI på tværs af platforme.
javax.swing-pakken indeholdt det største antal klasser (133 i alt) i JDK 6. Sammen med java.awt indeholdt den også det største antal enums (7 i alt) i JDK 6.
Andre javax og org Pakker
Java SE 6 inkluderede også andre specialiserede pakker:
javax.swing.text.html.parser: Indeholder en fejl-tolerant HTML-parser, der bruges til at skrive webbrowsere og web-bots.javax.xml.bind.annotation: Indeholdt det største antal Annotation Types (30 i alt) i JDK 6. Den definerer annotationer til tilpasning af Java-program-elementer til XML Schema-mapping.org.omg.CORBA: Gav understøttelse for fjernkommunikation ved hjælp af General Inter-ORB Protocol (GIOP). Ligesom RMI var denne pakke til at kalde fjernmetoder på objekter i andre virtuelle maskiner. CORBA er portabelt mellem forskellige sprog, men dette medfører mere kompleksitet. Denne pakke indeholdt det største antalExceptionklasser (45 i alt) i JDK 6. Disse pakker blev forældede i Java 9 og fjernet fra Java 11.org.omg.PortableInterceptor: Indeholdt det største antal interfaces (39 i alt) i JDK 6. Den gav en mekanisme til at registrere ORB-hooks, hvorigennem ORB-tjenester kan afbryde den normale udførelsesflow af ORB'en.
Performance, Test og Sikkerhed
Som Graeme Wallace's citat illustrerede, medførte overgangen fra Java SE 5 til 6 betydelige performanceforbedringer for visse applikationer.
For at teste den installerede JVM-softwareversion var der en testside med en applet, der automatisk testede og viste information om operativsystemet og, hvis installeret, JVM-softwaren og JRE-implementeringens releaseversioner. Dette var en praktisk måde for brugere at verificere deres installation.
Det er vigtigt at bemærke, at der er blevet rapporteret flere kritiske sikkerhedsrisici i Java. Oracle udsender sikkerhedsadvarsler, der annoncerer kritiske sikkerhedsrelaterede patches til Java SE. At holde Java-installationer opdaterede er afgørende for sikkerheden.
Ressourcer og Ældre Udgivelser
For udviklere, der arbejdede med Java SE 6, var der ressourcer tilgængelige, herunder Java Tutorial, som indeholder praktiske onlineguider og hundreder af arbejdende eksempler. Funktionernes release notes gav detaljer om ændringer og nye funktioner. Der var også tekniske artikler og tips tilgængelige.
Sun (og senere Oracle) har leveret nogle ældre produkt- og teknologiudgivelser som en service. Disse udgivelser har gennemført Sun's 'end-of-life' (EOL) proces og understøttes ikke længere under standard supportkontrakter. De kan dog stadig tilgås via arkiverne, hvilket er relevant for dem, der skal arbejde med ældre systemer bygget på f.eks. Java SE 6.
Tabel over Nøglepakker
| Pakke | Formål | Bemærkninger (JDK 6) |
|---|---|---|
java.lang |
Grundlæggende sprog- og runtime-funktioner | Automatisk importeret, 22 Error-klasser |
java.lang.ref |
Fleksible referencetyper (Soft, Weak, Phantom) | Introduceret i J2SE 1.2 |
java.lang.reflect |
Refleksion (runtime-undersøgelse af kode) | Introduceret i JDK 1.1 |
java.io |
Input/Output streams og filsystemadgang | Understøtter bytes, karakterer, random access |
java.math |
Multipræcisionsaritmetik (BigDecimal, BigInteger) | Inkluderer RoundingMode, MathContext |
java.net |
Netværks-I/O | Understøtter HTTP m.m. |
java.text |
Tekstparsing, lokalisering | |
java.util |
Datastrukturer, Collections API | |
java.applet |
Java Applets | Forældet |
java.beans |
JavaBeans (genanvendelige komponenter) | Bruges af GUI-designværktøjer |
java.awt |
Abstract Window Toolkit (native GUI) | Kerne GUI-hændelsessystem, mange enums i JDK 6 |
java.rmi |
Remote Method Invocation | RPC mellem JVM'er |
java.security |
Sikkerhedsfunktioner | Inkluderer message digest |
java.sql |
JDBC (SQL databaseadgang) | |
javax.rmi |
RMI over IIOP | Kombinerer RMI og CORBA |
javax.swing |
Swing (platformsuafhængig GUI) | Bygger på AWT, flest klasser i JDK 6, mange enums i JDK 6 |
javax.swing.text.html.parser |
HTML-parser | Fejl-tolerant |
javax.xml.bind.annotation |
XML Schema-mapping annotationer | Flest Annotation Types i JDK 6 |
org.omg.CORBA |
CORBA fjernkommunikation | Flest Exception-klasser i JDK 6, fjernet i Java 11 |
org.omg.PortableInterceptor |
ORB-hooks | Flest interfaces i JDK 6 |
Ofte Stillede Spørgsmål
Hvad er Java SE versionen?
Java SE står for Java Platform, Standard Edition. Det er navnet på computingplatformen, der bruges til udvikling og implementering af bærbar kode for desktop- og servermiljøer. Version 6 refererer specifikt til den udgivelse, der fulgte efter version 5.
Hvad er forskellen mellem J2SE og Java SE 6?
J2SE (Java 2 Platform, Standard Edition) var det tidligere navn for platformen fra version 1.2 til 1.4. Navnet blev ændret til Java SE (Java Platform, Standard Edition) fra version 1.5. Tallet '2' blev fjernet i version 1.6 (som er en del af Java SE-familien). Så J2SE er en ældre navngivning for den samme type platform, mens Java SE 6 er en specifik, senere version under den nye navngivning.
Hvordan downloader man Java 6?
Informationen, der er tilgængelig her, beskriver platformen, men giver ikke specifikke instruktioner eller links til at downloade Java 6. Det nævnes dog, at Sun (og Oracle) har leveret ældre produktudgivelser via arkiver, selvom de ikke længere understøttes officielt.
Java SE 6 var en vigtig iteration af Java-platformen, der byggede videre på sine forgængere og introducerede forbedringer og nye API'er, der understøttede udviklingen af et bredt spektrum af applikationer. Selvom nyere versioner af Java nu er standard, er Java SE 6 stadig relevant i forståelsen af platformens evolution og som grundlag for mange eksisterende systemer.
Hvis du vil læse andre artikler, der ligner Forstå Java SE 6 Platformen, kan du besøge kategorien Fotografi.
