Java er et højniveau, klassebaseret, objektorienteret programmeringssprog, der er designet til at have så få implementeringsafhængigheder som muligt. Sproget er kendt for sin portabilitet, hvilket gør det muligt for udviklere at skrive kode, der kan køre på enhver enhed udstyret med en Java Virtual Machine (JVM). Denne "skriv én gang, kør hvor som helst"-kapacitet gør Java særligt velegnet til webapplikationer, virksomhedsoftware og udvikling af Android-apps. Javas syntaks er afledt af C og C++, med en stærk vægt på læsbarhed og brugervenlighed.
Java blev oprindeligt udviklet af James Gosling og hans team hos Sun Microsystems i begyndelsen af 1990'erne. Sproget var beregnet til at være en platformuafhængig løsning til opbygning af applikationer på tværs af forskellige enheder. Oprindeligt blev det kaldt Oak, men blev senere omdøbt til Java, inspireret af Java-kaffe. Den officielle udgivelse af Java 1.0 kom i maj 1995, hvilket faldt sammen med stigningen af World Wide Web, som betydeligt fremmede dets adoption.
Gennem årene har Java udviklet sig gennem flere versioner, hver med nye funktioner og forbedringer. Introduktionen af Java 2 i 1998 bragte Java 2 Platformen med sig, som inkluderede Swing grafiske API og Collections Framework. Overgangen til en versionsmodel i 2004, der startede med Java 5, introducerede betydelige sprogfunktioner som generics, annotationer og den forbedrede for-løkke.
I øjeblikket vedligeholdes Java af Oracle Corporation efter deres opkøb af Sun Microsystems i 2010. Java-fællesskabet er livligt, med adskillige rammer, biblioteker og værktøjer tilgængelige, såsom Spring, Hibernate og Maven. Udviklingen af Java fortsætter med regelmæssige opdateringer, den seneste er Java 17, som er en Long-Term Support (LTS) version, der sikrer stabilitet for virksomheder.
Java har haft en betydelig indflydelse på andre programmeringssprog, der har inspireret funktioner i C#, Kotlin og Scala. Dets platformuafhængige natur har også banet vejen for forskellige applikationer ud over traditionel software, herunder big data-platforme som Apache Hadoop og cloud-tjenester.
Java er iboende objektorienteret, hvilket betyder, at det opmuntrer til organisering af kode i klasser og objekter. Dette gør det lettere at modellere virkelige enheder.
class Animal {
void sound() {
System.out.println("Dyrelyd");
}
}
class Dog extends Animal {
void sound() {
System.out.println("Gøen");
}
}
Java anvender et stærkt typekontrolsystem, hvilket betyder, at variabeltyper skal deklareres, hvilket forhindrer mange runtime-fejl.
int count = 10;
String name = "Java";
Java bruger garbage collection til at styre hukommelsen, hvilket automatisk genvinder hukommelse brugt af objekter, der ikke længere refereres.
Animal animal = new Animal(); // Hukommelse tildelt
animal = null; // Hukommelse berettiget til garbage collection
Java giver en robust undtagelseshåndteringsmekanisme gennem try-catch blokke, der hjælper udviklere med at håndtere fejl på en elegant måde.
try {
int result = 10 / 0;
} catch (ArithmeticException e) {
System.out.println("Division med nul-fejl!");
}
Java forenkler multitrådning, hvilket muliggør samtidig udførelse af opgaver med relativt lette at håndtere tråde.
class MyThread extends Thread {
public void run() {
System.out.println("Tråden kører.");
}
}
MyThread thread = new MyThread();
thread.start();
Java tillader oprettelse af anonyme indre klasser, hvilket muliggør hurtig implementering af interfaces eller udvidelse af klasser uden formel deklaration.
Runnable runnable = new Runnable() {
public void run() {
System.out.println("Anonym indre klasse");
}
};
new Thread(runnable).start();
Java understøtter generics, hvilket gør det muligt for udviklere at oprette klasser, interfaces og metoder med typeparametre, hvilket forbedrer kodepålideligheden.
class Box<T> {
private T item;
public void setItem(T item) { this.item = item; }
public T getItem() { return item; }
}
Introduceret i Java 8, giver lambda-udtryk en klarere måde at repræsentere instanser af interfaces med en enkelt metode (funktionelle interfaces).
List<String> names = Arrays.asList("John", "Jane", "Jack");
names.forEach(name -> System.out.println(name));
Javas Stream API muliggør funktionelle operationer på samlinger, hvilket gør databehandling enklere og mere effektiv.
List<String> filteredNames = names.stream()
.filter(name -> name.startsWith("J"))
.collect(Collectors.toList());
Java understøtter annotationer, som giver metadata om programmet og kan påvirke, hvordan programmet behandles af compileren eller runtime.
@Override
public void myMethod() {
// Metodekode her
}
JDK er det primære udviklingskit til Java, der indeholder værktøjer, der kræves for at udvikle, kompilere og køre Java-applikationer. Det inkluderer Java Runtime Environment (JRE), biblioteker og udviklingsværktøjer.
Almindelige Integrated Development Environments (IDEs) til Java-udvikling inkluderer:
Projekter bygges typisk ved hjælp af byggeværktøjer som Maven eller Gradle, som automatiserer afhængighedsstyring og strømliner byggeprocessen. En simpel byggekommando i Gradle kunne se sådan ud:
gradle build
Java anvendes bredt inden for forskellige domæner, herunder:
Java sammenlignes ofte med sprog som C#, C++, Python og JavaScript.
Java-kode kan oversættes til andre sprog, selvom kompleksiteten kan variere afhængigt af mål-sprogets paradigmer. Værktøjer som Jaunt og J2ObjC findes for at hjælpe i denne proces, men de håndterer muligvis ikke alle scenarier. Nøglen til en vellykket oversættelse ligger i at forstå konstruktionerne i både Java og mål-sproget, især inden for områder som hukommelsesstyring og typesystemer.