Lite om statisk och dynamisk typing i Java

Sven-Olof Nyström
OOP med Java våren -25
Informationsteknologi
Uppsala Universitet

Detta avsnitt är främst för dig som bara har erfarenhet av programspråk med dynamisk typning, till exempel scriptspråk som Python och Javascript.

Programspråk med dynamisk typning lagrar typinformation om alla värden. Anta att programmet vill addera två värden. Då måste implementationen kontrollera att värdena har rätt typer. Detta har några konsekvenser:

I en del programspråk (som C) lagras ingen typinformation vid körning. Alla typfel upptäcks vid kompilering. Man behöver alltså inte provköra programmet för att upptäcka typfel. (Notera att C++ är olikt C. I C++ lagras en del typinformation vid körning.)

Vad är en kompilator? En kompilator är ett program är ett program som läser det program som du har skrivit och översätter det till en annan form. C-kompilatorer brukar översätta till maskinkod. Java-kompilatorer översätter till JVM.

Vid kompileringen utförs ett antal kontroller, till exempel att metoder anropas med rätt antal argument och att variabler får värden som stämmer med hur de är deklarerade.

Java är ett statiskt typat programspråk. Varje variabel måste deklareras. Men trots det lagras mycket information när programmet körs. Både hängslen och livrem kan man säga.

När du själv skriver ett program och får fel bör du vara medveten om felet är ett kompileringsfel eller om felet visar sig först vid körning (run-time). Det gör det lättare att hitta den underliggande orsaken i programmet. En del utvecklingsmiljöer gör skillnaden otydlig.