Java tilbyder otte primitive datatyper og ad­skil­li­ge komplekse datatyper. Disse bestemmer, hvilke værdier der kan gemmes og vises i en variabel. Visse datatyper tildeles alle variabler i Java.

Hvilke datatyper findes der i Java?

I alle pro­gram­me­rings­sprog findes der for­skel­li­ge datatyper, der in­de­hol­der spe­ci­fik­ke objekter og de­fi­ne­re­de ope­ra­tio­ner. Selvom de da­ta­ty­pe­mu­lig­he­der, som de for­skel­li­ge sprog tilbyder, ofte ligner hinanden, er der nogle gange be­ty­de­li­ge forskelle. Hvis man for eksempel sam­men­lig­ner Python og Java og deres datatyper, vil man bemærke ligheder mellem de to, men også ad­skil­li­ge forskelle, der gør sprogene velegnede til for­skel­li­ge typer opgaver.

Java anvender to for­skel­li­ge typer datatyper: primitive og komplekse. Komplekse datatyper kaldes også re­fe­ren­ce­ty­per. Primitive og komplekse datatyper adskiller sig i størrelse og bestemmer, hvilke værdier der kan gemmes i en variabel. Mens primitive datatyper kun kan gemme enkle værdier, bruges re­fe­ren­ce­ty­per til at oprette mere komplekse struk­tu­rer og or­ga­ni­se­re og ma­ni­p­u­le­re store mængder data.

Hvis du vil lære at pro­gram­me­re, er det vigtigt ikke kun at kende de for­skel­li­ge datatyper, men også at vide, hvordan du får mest muligt ud af hver enkelt af dem. For at forstå, hvordan man bedst bruger datatyper, skal man ikke kun forstå deres funk­tio­na­li­tet, men også hvor meget hukom­mel­se de bruger (eller sparer).

Hvad er primitive datatyper i Java?

Der er i alt otte for­skel­li­ge primitive datatyper i Java, som in­de­hol­der fast de­fi­ne­re­de vær­di­in­ter­val­ler. De kan opdeles i fire ka­te­go­ri­er: logiske datatyper, in­te­gre­re­de datatyper, flydende datatyper og tegn-datatyper. De har ingen yder­li­ge­re særlige egen­ska­ber og kaldes også ele­men­tæ­re datatyper. Hver datatype har et fast antal bits. Vi vil gennemgå de primitive datatyper mere de­tal­je­ret nedenfor. Java bruger følgende primitive typer:

  • boolean
  • byte
  • kort
  • int eller heltal
  • lang
  • float
  • dobbelt
  • char

boolean

Javas booleske datatype er ikke en numerisk type. Den tilbyder kun to mulige værdier: sand og falsk. Den kan bruges til at bestemme, om en be­tin­gel­se gælder (sand) eller ikke (falsk). Det er en logisk datatype, og dens stan­dard­vær­di er false. Den består af 1 bit og har følgende syntaks:

boolean booleanVar;
java

byte

byte er en in­te­gre­ret datatype, der re­præ­sen­te­res som en toers kom­ple­ment­vær­di med en størrelse på 8 bit eller 1 byte. Den bruges typisk til at spare hukom­mel­se i større arrays. Dens vær­di­om­rå­de spænder fra -128 til 127, og dens stan­dard­vær­di er 0. Her er dens syntaks:

byte byteVar;
java

short

short er også en af de in­te­gre­re­de datatyper i Java og bruges ho­ved­sa­ge­ligt til at spare hukom­mel­se i større arrays. Toers kom­ple­ment­vær­di­en er i sig selv 16 bits eller 2 bytes i størrelse, og dens vær­di­om­rå­de strækker sig fra -32768 til og med 32767. Som standard er dens værdi 0. Sådan bruges short:

short shortVar
java

int eller heltal

int eller heltal er også en toers kom­ple­ment­vær­di og en in­te­gre­ret datatype med en størrelse på 4 byte eller 32 bit. Dens vær­di­om­rå­de omfatter heltal mellem -2147483648 og 2147483647, og dens stan­dard­vær­di er 0. Dens syntaks er som følger:

int intVar
java

long

Den største in­te­gre­re­de datatype er long. Dette gælder for det første dens vær­di­om­rå­de, som ligger mellem -9223372036854775808 og 9223372036854775807, og for det andet dens egen størrelse, som er 8 byte eller 64 bit. Toers kom­ple­ment­vær­di­en bruges derfor, hvis de andre in­te­gre­re­de datatyper ikke er til­stræk­ke­li­ge. Den kræver dog også langt den mest hukom­mel­se. Dens stan­dard­vær­di er 0. Dette er dens syntaks:

lomg longVar
java

float

float er en flydende datatype og bruges til at gemme reelle tal. Den har en størrelse på 32 bit og over­hol­der IEEE 754-stan­dar­den, som definerer stan­dar­dre­præ­sen­ta­tio­nen af binære og decimale flydende tal i computere. Stan­dard­vær­di­en for float er 0,0, og der kan re­præ­sen­te­res op til syv decimaler i dens vær­di­om­rå­de. Sam­men­lig­net med double er float dog ikke så præcis og bør derfor ikke bruges til værdier, hvor præcision spiller en afgørende rolle. Hvis dette ikke er tilfældet, kan du dog bruge float for at spare plads. Syntaksen for float er som følger:

float floatVar;
java

double

double er cirka dobbelt så præcis som float og opfylder et lignende formål. Den er 64 bit stor og kan re­præ­sen­te­re op til 16 decimaler. Dens stan­dard­vær­di er også 0,0. Hvis du har brug for mere præcise værdier, bør du altid bruge double, selvom denne datatype heller ikke er særlig præcis. Hvis du vil arbejde med helt nøjagtige værdier, bør du i stedet bruge klassen Big­De­ci­mal. Syntaksen for double er som følger:

double doubleVar;
java

char

char er en ka­rak­ter­da­ta­ty­pe. Den gemmer tegn baseret på Unicode-tegn­sæt­tet, hvilket muliggør po­rta­bi­li­tet til mange for­skel­li­ge platforme. Hvert tegn kræver 2 byte hukom­mel­se. Dens vær­di­om­rå­de svarer til ASCII (American Standard Code for In­for­ma­tion In­ter­chan­ge) og ligger mellem ‘\u0000’ (dvs. 0) og ‘\uffff’ (svarer til 65535). Stan­dard­vær­di­en for char er ‘\u0000’, og dens syntaks ser således ud:

char charVar
java

Hvad er komplekse datatyper i Java?

Den anden type datatyper i Java er re­fe­ren­ce­ty­per, også kaldet komplekse datatyper. De kaldes re­fe­ren­ce­ty­per, fordi de refererer til objekter. I mod­sæt­ning til primitive datatyper er de normalt ikke for­ud­de­fi­ne­re­de, men bestemmes af pro­gram­mø­ren (en und­ta­gel­se herfra er streng). De kan bruge metoder og kan også have værdien 0 (i be­tyd­nin­gen tom). Mens primitive datatyper starter med et lille bogstav, starter re­fe­ren­ce­ty­per med et stort bogstav. Her ser vi på de vigtigste re­fe­ren­ce­ty­per.

Strengene

String er en klasse, der kan bruges til at re­præ­sen­te­re en sekvens af tegn, hvilket adskiller denne komplekse datatype fra den primitive datatype char samt andre datatyper. En streng ek­si­ste­rer som et objekt i klassen java.lang. De for­skel­li­ge metoder i String-klassen giver dig mulighed for at undersøge in­di­vi­du­el­le tegn i strengen, sam­men­lig­ne strenge med hinanden, søge i strenge og kopiere strenge. Strenge iden­ti­fi­ce­res ved hjælp af an­før­sels­tegn. Syntaksen for denne re­fe­ren­ce­ty­pe ser således ud:

<string_type> <string_variable> = "<string_sequence>";
java

Her er et eksempel på, hvordan strenge fungerer:

// How to create a string without a new operator
String a = "This is your new string";
/ / How to create a string with a new operator
String a1 = new string ("This is your new string");
java

Arrays

Arrays bruges til at gemme flere værdier i en variabel i stedet for at oprette for­skel­li­ge variabler for hver enkelt værdi. De oprettes ved hjælp af fir­kan­te­de pa­ren­te­ser. De gemte værdier placeres i krøllede pa­ren­te­ser og adskilles med kommaer. Her er syntaksen for arrays:

dataType[] arrayName = {value1, value2, value3,…};
java

Hvis du vil oprette en matrix med strenge, kan du gøre det på følgende måde:

String[] colors = {"blue", "red", "yellow", "purple"};
java

Sådan opretter du en matrix med heltal:

int[] figures = {5, 10, 15, 20};
java

Un­der­vis­ning

I Java er klasser datatyper, der fungerer som ska­be­lo­ner til op­ret­tel­se af objekter. De in­de­hol­der for­skel­li­ge kom­po­nen­ter, herunder klassens navn, mo­di­fi­ka­to­rer og en krop omgivet af krøllede pa­ren­te­ser. Her er et eksempel på, hvordan en klasse ser ud i Java:

public class Main {
	int a = 10;
}
java

Græn­se­fla­der

I Java er en græn­se­fla­de en abstrakt klasse. Den fungerer som en græn­se­fla­de, som en klasse kan få adgang til for­skel­li­ge funk­tio­ner gennem. For at gøre dette skal den dog først im­ple­men­te­re dem. Græn­se­fla­der in­de­hol­der kun kon­stan­ter og abstrakte metoder. Deres syntaks ser sådan ud:

interface {
	abstract methods
}
java

Vi vil her give et simpelt eksempel for at vise, hvordan græn­se­fla­der fungerer:

interface Pizza {
	public void ingredientsList();
	public void preparation();
}
class Mushroom implements Pizza {
	public void ingredientsList() {
		System.out.println("mushrooms, tomato sauce, oregano, mozzarella");
}
public void preparation() {
	System.out.println("The pizza will be ready in 15 minutes.");
}
}
class Main {
	public static void main(String[] args) {
		Mushroom myMushroom = new Mushroom();
		myMushroom.ingredientsList();
		myMushroom.preparation();
	}
}
java

Den til­sva­ren­de output fra Java-kom­man­do­en System.out.println ser således ud:

mushrooms, tomato sauce, oregano, mozzarella
The pizza will be ready in 15 minutes.
java

Objekter

I Java er objekter også en kompleks datatype. Objekter er instanser af klasser, der derefter kan in­ter­a­ge­re med hinanden ved hjælp af metoder. I det følgende eksempel skal vi oprette flere objekter i en Main-klasse:

public class Main {
	int a = 10;
public static void main(String[] args) {
	Main myObj1 = new Main();
	Main myObj2 = new Main();
	System.out.println(myObj1.a);
	System.out.println(myObj2.a);
	}
}
java

Re­sul­ta­tet ser således ud:

10
10
java

Enums

Enums er en særlig klasse, der giver dig mulighed for at in­d­ar­bej­de ufor­an­der­li­ge kon­stan­ter i din kode. Disse variabler tildeles faste værdier, der ikke kan ændres. Denne datatype er især nyttig, hvis du har brug for variabler, der kun skal have få mulige tilstande. Syntaksen for en enum ser således ud:

enum NameOfTheClass {
	VALUE1,
	VALUE2,
	VALUE3
}
java
Gå til ho­ved­me­nu­en