Java er eit høgnivå, klassebasert, objektorientert programmeringsspråk som vart designa for å ha så få implementeringsavhengigheiter som mogleg. Språket er kjent for sin portabilitet, som gjer det mogleg for utviklarar å skrive kode som kan køyre på kva som helst eining utstyrt med ein Java Virtual Machine (JVM). Denne "skriv éin gong, køyre kvar som helst"-kapasiteten gjer Java spesielt eigna for webapplikasjonar, bedriftsprogramvare og utvikling av Android-appar. Java sin syntaks er henta frå C og C++, med eit sterkt fokus på lesbarheit og brukervennlegheit.
Java vart opprinneleg utvikla av James Gosling og teamet hans hos Sun Microsystems tidleg på 1990-talet. Språket var meint å vere ei plattformuavhengig løysing for å bygge applikasjonar på tvers av ulike einingar. I starten vart det kalla Oak, men vart seinare omdøpt til Java, inspirert av Java-kaffi. Den offisielle utgjevinga av Java 1.0 kom i mai 1995, samstundes med oppblomstringa av World Wide Web, som betydelig auka bruken av språket.
Gjennom åra har Java utvikla seg gjennom fleire versjonar, der kvar av dei har introdusert nye funksjonar og forbetringar. Innføringa av Java 2 i 1998 førte med seg Java 2-plattforma, som inkluderte Swing grafisk API og Collections Framework. Overgangen til ein versjoneringsmodell i 2004, startande med Java 5, introduserte betydelige språklige funksjonar som generiske typar, annotasjonar og den forbetra for-løkken.
I dag vert Java vedlikehaldt av Oracle Corporation etter oppkjøpet av Sun Microsystems i 2010. Java-fellesskapet er livleg, med mange rammeverk, bibliotek og verktøy tilgjengeleg, som Spring, Hibernate og Maven. Utviklinga av Java held fram med regelmessige oppdateringar, den nyaste er Java 17, som er ein Long-Term Support (LTS) versjon, som sikrar stabilitet for bedrifter.
Java har hatt ein betydelig innverknad på andre programmeringsspråk, og har inspirert funksjonar i C#, Kotlin og Scala. Den plattformuavhengige naturen har også bana veg for ulike applikasjonar utover tradisjonell programvare, inkludert big data-plattformer som Apache Hadoop og skytjenester.
Java er i sin natur objektorientert, noko som betyr at det oppmuntrar til organisering av kode i klassar og objekt. Dette gjer det enklare å modellere verkelege einingar.
class Animal {
void sound() {
System.out.println("Dyrelyd");
}
}
class Dog extends Animal {
void sound() {
System.out.println("Bjeff");
}
}
Java nyttar eit sterkt typekontrollsystem, som betyr at variabeltypar må bli erklært, noko som forhindrar mange kjøretidsfeil.
int count = 10;
String name = "Java";
Java bruker søppelrydding for å håndtere minne, og gjenoppretter automatisk minne brukt av objekt som ikkje lenger er referert.
Animal animal = new Animal(); // Minne allokert
animal = null; // Minne kvalifisert for søppelrydding
Java gir ein robust unntakshåndteringsmekanisme gjennom try-catch blokker, som hjelper utviklarar med å håndtere feil på ein elegant måte.
try {
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("Deling med null-feil!");
}
Java forenklar multitråding, og gjer det mogleg med samtidig utføring av oppgåver med relativt enkle trådar å håndtere.
class MyThread extends Thread {
public void run() {
System.out.println("Tråden køyrer.");
}
}
MyThread thread = new MyThread();
thread.start();
Java tillèt oppretting av anonyme indre klassar, som gjer det mogleg å implementere grensesnitt eller utvide klassar raskt utan formell erklæring.
Runnable runnable = new Runnable() {
public void run() {
System.out.println("Anonym indre klasse");
}
};
new Thread(runnable).start();
Java støttar generiske typar, som gjer det mogleg for utviklarar å lage klassar, grensesnitt og metodar med typeparametrar, noko som forbetrar kodepålitelegheit.
class Box<T> {
private T item;
public void setItem(T item) { this.item = item; }
public T getItem() { return item; }
}
Innført i Java 8, gir lambda-uttrykk ein klarare måte å representere instansar av grensesnitt med ein metode (funksjonelle grensesnitt).
List<String> names = Arrays.asList("John", "Jane", "Jack");
names.forEach(name -> System.out.println(name));
Java sin Stream API tillèt funksjonelle stiloperasjonar på samlingar, noko som gjer databehandling enklare og meir effektiv.
List<String> filteredNames = names.stream()
.filter(name -> name.startsWith("J"))
.collect(Collectors.toList());
Java støttar annotasjonar, som gir metadata om programmet og kan påverke korleis programmet vert behandla av kompilatoren eller kjøretida.
@Override
public void myMethod() {
// Metodekode her
}
JDK er det primære utviklingssettet for Java, som inneheld verktøy som er nødvendige for å utvikle, kompilere og køyre Java-applikasjonar. Det inkluderer Java Runtime Environment (JRE), bibliotek og utviklingsverktøy.
Vanlege integrerte utviklingsmiljø (IDE-ar) for Java-utvikling inkluderer:
Prosjekt vert typisk bygd ved hjelp av byggverktøy som Maven eller Gradle, som automatiserer avhengigheitsforvaltning og strømlinjeformar byggeprosessen. Ein enkel byggekommando i Gradle kan sjå slik ut:
gradle build
Java vert mykje brukt i ulike domener, inkludert:
Java vert ofte samanlikna med språk som C#, C++, Python og JavaScript.
Java-kode kan oversettast til andre språk, sjølv om kompleksiteten kan variere basert på målspåket sine paradigmer. Verktøy som Jaunt og J2ObjC finst for å hjelpe i denne prosessen, men kan ikkje håndtere alle scenario. Nøkkelen til vellykka oversetting ligg i å forstå konstruksjonane til både Java og målspåket, spesielt innan områda som minnehåndtering og typesystem.