Ett datorprogram skriver man i ett programspråk, t ex Java. En dator "förstår" inte ett sådant program. Det enda datorn kan göra är att följa mycket enkla instruktioner av typen "addera två tal", "lagra ett tal på en bestämd plats i minnet", "undersök om två tal är lika" osv. Detta kallas för maskinkod. Varje typ av dator har sin egen maskinkod.
En kompilator är ett datorprogram som läser ett datorprogram och kontrollerar att programkoden inte bryter mot de grammatiska reglerna i programspråket. Därefter översätter kompilatorn datorprogrammet till ett enklare språk som datorn "förstår".
Kompilatorer för de flesta programspråk översätter datorprogrammet till maskinkod . Det översatta programmet kan sedan direkt exekveras av datorn.
I Java fungerar det lite annorlunda. När man kompilerar ett Java-program översätts det till bytekod (instruktioner på högre nivå än maskinkod, men som kan tolkas av datorn). När man skall exekvera programmet använder man en interpretator som läser instruktioner tolkar dem. Bytekoden är standardiserad, vilket innebär att den kan tolkas av alla datorer, oavsett typ, som har en Java-interpretator. Det innebär att ett kompilerat Java-program är flyttbart mellan olika slags datorer.
Kompilatorn heter javac och interpretatorn heter java. Man kan använda dessa i ett kommandofönster.
Det har nu skapats en fil med namnet Calculator.class som innehåller bytekoden.
Oftast är ett program uppdelat i flera filer med en klass i varje fil. Om man har skrivit alla klasserna själv finns de förmodligen i samma katalog. Då man kompilerar en av klasserna kompileras automatiskt de övriga klasserna som den aktuella klassen är beroende av ifall detta behövs. Det räcker alltså att kompilera klassen med main-metoden för att få allt som behövs kompilerat.
import se.lth.cs.util.SimpleInput;
Det finns klasser man kan använda utan att de behöver importeras. Det är de klasser som tillhör Java och finns i klasspaketet java.lang, t ex klasserna Math, String och StringBuffer.