Java är ett objektorienterat programspråk som konstruerades av bland andra James Gosling på Sun Microsystems under 90-talets tidigare hälft. Ursprungligen kallades språket D, för att sedan ändras till Oak#DidYouKnow, Java was originally called, men Sun bytte slutligen ut namnet ytterligare en gång, och Java presenterades för världen 23 maj 1995. Anledningen till namnbytet var att Oak var upptaget. Programspråket är idag ett av de mest använda språken och används för allt från diskmaskiner till mobilspel.
Historia Java-plattformen och programspråket började som ett internt projekt hos Sun Microsystems i december 1990 för att ge ett alternativ till C++ och C. Ingenjören Patrick Naughton var frustrerad över API:erna som Sun hade skapat för C och C++. Medan han övervägde att säga upp sig och börja på NeXT istället, fick han erbjudande om möjligheten att utveckla en ny teknik, och därmed startade Stealth Project.
Det dröjde inte länge innan Stealth bytte namnet till Green Project och fick tillskott genom att James Gosling och Mike Sheridan började hjälpa till med projektet. Tillsammans med andra ingenjörer började de utveckla i ett litet kontor på Sand Hill Road i Menlo Park, Kalifornien. Deras mål var att utveckla en ny teknologi för programmering av nästa generations smarta enheter.
Projektgruppen övervägde att använda C++ till en början, men valde att inte göra så av flera anledningar. Eftersom de utvecklade ett inbäddat system med begränsade resurser, bestämde de sig för att C++ behövde för mycket minne och att dess komplexitet ledde till att utvecklare lättare kunde råka skriva fel. På grund av programmets brister i fråga om skräpsamling skulle utvecklare behöva hantera systemets minne manuellt, vilket är en utmanande och krånglig uppgift. Gruppen ville bygga en plattform som kunde flyttas enkelt till olika typer av enheter.
Bill Joy hade idéer om ett nytt programspråk influerat av Mesa och C. Han kom med ett förslag i ett dokument kallat Further att ingenjörerna skulle skapa en objektorienterad miljö baserad på C++. I början så försökte Gosling att modifiera och utöka C++ (han refererade till detta med "C++ ++ --") men han övergav sitt försök till detta och bestämde sig istället för att skapa ett helt nytt programspråk. Detta kallade han för Oak, eftersom det stod just en ek utanför hans kontor.
År 1994 bytte Sun namn på språket Oak till Java efter de upptäckt att Oak Technology hade ensamrätt till namnet. Trots att Java 1.0a kunde laddas ned redan 1994, kom inte den första riktiga publika versionen, Java 1.0a2, förrän 23 maj 1995 då den presenterades på SunWorld-konferensen..
Versionhistorik Sedan den första versionen av Java släpptes har programspråket fått flera uppdateringar. Av dessa är samtliga versioner mellan 1.0 och 8, samt versionerna 11, 17 och 21 så kallade long term support releases, vilket innebär att Oracle kommer att fortsätta stödja dessa versioner längre än de övriga. +VersionDatumUrval av nya funktionerStöd upphör1.01995 -20021.11997 Stöd för JIT-kompilatorer JavaBeans API Serialisering Stöd för Unicode 2.0 AWT API, för att enkelt kunna skapa grafiska användargränssnitt.20031.21998 Förbättrad säkerhetsmodell Prestandaförbättringar Nyckelordet strictfp Collections API, för att lättare kunna hantera samlingar med data. Swing API, för att enklare hantera grafiska användargränssnitt.20031.32000 JNDI inkluderas direkt, och är inte längre ett tillägg. Förbättrad säkerhet och prestanda.20111.42002 Nyckelordet assert Verktyg för hantering av XML Verktyg för utskrifter Möjlighet att skapa kedjor av undantag (exceptions) Förbättrad I/O-hantering ijava.nio201352004 Generiska klasser och metoder Förbättrad for-loop, som enklare kan användas för att löpa igenom alla element i en samling. Nyckelordet enumför att skapa uppräkningstyper Automatisk omvandling mellan primitiva datatyper och respektive omslagsklass (autoboxing) Varargs Statiska importer Annotationer Nya verktyg för att hantera trådar201562006 Prestandaförbättringar API för att köra skriptspråk i JVM API för att starta en Javakompilator programmatiskt. Förbättrad hantering av användargränssnitt.201872011 Möjlighet att använda strängar i switch-satser Möjlighet att skriva heltal i binär form i källkoden. Möjlighet att utelämna typargument vid instantiering av generiska klasser i de fall kompilatorn ändå kan sluta sig till vilken typ som avses. Alltså möjliggjordes kod som List<String> words = new ArrayList<>() där typargumentet Stringtidigare skulle ha krävts även vid konstruktoranropet till ArrayList. try-with-resources d.v.s. möjligheten att specificera ett antal resurser, ofta strömmar eller skannrar, vilka automatiskt kommer att stängas efter ett try-block oavsett om ett undantag skapades eller ej. Möjlighet att låta samma catch-block fånga olika sorters undantag.202282014 Lambda-uttryck, vilka låter användaren behandla funktioner som variabler. Streams API, ett tillskott till Collections API som tillsammans med lambda-uttryck möjliggör en del uttryck från funktionell programmering, t.ex. map och reduce. Referenser till metoder på formen String::toString Default-metoder i gränssnitt. Möjlighet att repetera annotationer.203092017 Moduler. Privata metoder i gränssnitt. Möjlighet att använda variabler som resurser i try-with-resources.2018102018 Typinferens för lokala variabler med nyckelordet var.2018112018 Stöd för Unicode 10 Förbättringar i standardbiblioteket.2026122019 Stöd för Unicode 11 Förbättringar i standardbiblioteket.2019132019 Stöd för Unicode 12 Förbättringar i standardbiblioteket.2020142020 Möjlighet att använda switch-satser som ett uttryck. NullPointerException ger mer information än tidigare. Förbättringar i standardbiblioteket.2020152020 Möjlighet att skapa block av text som innehåller flera rader. Stöd för Unicode 13. Förbättringar i standardbiblioteket. Ny skräpsamlare.2021162021 Möjlighet att använda mönstermatchning (pattern matching) i instanceof-satser. Införande av s.k. record-klasser, vilka möjliggör enklare datahantering. Förbättringar i standardbiblioteket.2021172021 Möjlighet för klasser att begränsa vilka klasser som får ärva från dem med det nya nyckelordet sealed. Förbättringar i standardbiblioteket.2029182022 UTF-8 är numera standard för alla klasser i standardbiblioteket. Övriga förbättringar i standardbiblioteket.2022192022 Stöd för Unicode 14. Förbättringar i standardbiblioteket.2023202023 Stöd för Unicode 15. Förbättringar i standardbiblioteket.2023212023 Stöd för mönstermatchning för record-klasser i instanceof-satser. Exempelvis möjliggörs följande:if (object instanceof Point(double x, double y)) { System.out.println("x-värde " + x); System.out.println("y-värde " + y); } Stöd för mönstermatchning i switch-satser. Följande kod visar ett exempel på detta:public interface Pet { ... } public class Dog implements Pet { public String bark() { return "Voff!";
... } public class Cat implements Pet { public String meow() { return "Mjau!";
... }
public class Main { public static String getGreeting(Pet pet) { return switch (pet) { case Dog d -> d.bark(); case Cat c -> c.meow(); default -> "?";
}2031222024 Möjlighet att använda _ i stället för en variabel, exempelvis i for-satser.2024
Design De viktigaste designmålen för Java var:
Det ska vara enkelt, objektorienterat och bekant. Det ska vara robust och säkert. Det ska ha en arkitekturoberoende och portabel miljö. Det ska kunna exekveras med höga prestanda. Det ska vara tolkat, trådat och dynamiskt.
Plattformsoberoendet uppnås genom att det färdiga Javaprogrammet kompileras till bytekod istället för till maskinkod. Denna bytekod tolkas och körs sedan i ett vanligt plattformsberoende program, en "virtuell maskin". Detta extra steg gör att Java historiskt sett varit långsammare än kompilerande programspråk, men skillnaden har krympt i och med introduktionen av JIT-kompilatorer, exempelvis Suns egna HotSpot och BEAs JRockit
miniatyr|Javakod.
Den 13 november 2006 släppte Sun Microsystems sin tillämpning av Java under den fria licensen GPL. Ända sedan Javas tillkomst har Javautvecklare debatterat om Java ska släppas som fri mjukvara eller inte. Java har varit gratis att ladda ner och använda, men licensen har begränsat distribution och förändring. Detta har bland annat hindrat Java från att skickas med de flesta Linuxdistributioner och gjort att en del utvecklare som endast vill arbeta med fri källkod undvikit Java.
Man skapar ett Java-program i flera steg: Man börjar med att tillverka en källfil. Källfilen består av vanlig text som följer Javas syntax. När källfilen är klar måste den kompileras av en kompilator till en bytekodfil. Bytekodfilen kan läsas av Java Virtual Machine (JVM), en emulerad dator eller exekveringsmiljö. Varje dator som kör programmet använder en programtolkare som tar JVM till hjälp för att tolka bytekoden till instruktioner som datorn kan utföra.
I Java får en klass endast ha en superklass, till skillnad från exempelvis C++. Multipla arv av klasser är således inte tillåtet. En klass kan dock verka på mer än ett gränssnitt (eng. interface).
En fördel med Java är att språket har ett stort bibliotek med färdiga datastrukturer, bibliotek och ramverk, bland annat för nätverksanslutning och för att visa grafiska fönster på ett enkelt sätt. Programexempel Hello world "Hello, World!" med terminalutskrift:
public class Hello { public static void main(String[] args) { System.out.println("Hello World!");
"Hello, World!" med grafisk utskrift:
import javax.swing.*; public class Hello { public static void main(String[] args) { JOptionPane.showMessageDialog(null, "Hello World!");
Inmatning, utmatning Här är ett enkelt exempel på hur man skriver ut information och får inmatning av användaren. import java.util.Scanner; public class JavaDemo { public static void main(String[] args) { System.out.println("Hej, vad heter du?"); Scanner scan = new Scanner(System.in); String namn = scan.nextLine(); System.out.println("Hej, " + namn + ". Ditt namn börjar på " + namn.charAt(0));
Ett väldigt enkelt program. Metoden charAt() med parametern 0 (noll) returnerar första tecknet i strängen (en datatyp för text) namn.
Alltså kommer programmet se ut så här när det körs: Hej, vad heter du? "Robert Ahlberg" Hej, Robert Ahlberg. Ditt namn börjar på R Det som är skrivet inom Citationstecken matas in av användaren.
Personinformation Följande klassdefinition demonstrerar hur en enkel typ definieras i Java i form av en klass. I detta fall beskriver klassen en person med några typiska attribut för en sådan, till exempel namn (name) och ålder (age), samt några metoder för att sätta och hämta värden från attributen.
public class Person { private String name; private String location; private int age; public Person(String name, String location, int age) { this.name = name; this.location = location; this.age = age;
public void setName(String newName) { name = newName; } public void setLocation(String newLocation) { location = newLocation; } public void setAge(int newAge) { age = newAge; } public String getName() { return name; } public String getLocation() { return location; } public int getAge() { return age; } public String toString() { return "Name: " + name + " (Age: " + age + ")"; } }
Olika versioner av Java
Java ME Java Platform, Micro Edition, eller Java ME, är en Java-plattform avsedd för inbyggda system (mobila enheter är en typ av sådana system). Målenheter är allt från industriella styrsystem till mobiltelefoner (speciellt funktionen telefoner) och set-top-boxar. Java ME var tidigare känt som Java 2 Platform, Micro Edition (J2ME). I september 2012 använde mer än 3 miljarder mobiltelefoner Java. Teknologin bakom Java ME skapades för att hantera de resursbegränsningar som kommer med små enheter, såsom minne, teckenruta eller energiförbrukning.
Java SE