Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

...

Typen til en verdi eller et objekt bestemmer hva en kan gjøre med verdien eller et objekt, dvs. hvilke operasjoner en kan utføre eller metoder en kan kalle. F.eks. kan en bruke + mellom tall og mellom String-objekter, men ikke mellom Date-objekter. For hver type kan en liste opp hva som er lov og ikke, og hvis en gjør noe ulovlig så vil det typisk blir bli utløst et unntak. Hvis en vet hva slags typer type verdier en har å gjøre med i et uttrykk eller setning, så kan en også sjekke at de blir brukt riktig. Og hvis dette kan sjekkes av kompilatoren eller utviklingsverktøyet, så kan en unngå at det blir feil ved kjøring, fordi en nektes å skrive og kjøre kode som ikke er korrekt iht. typene.

...

  • boolean - sannhetsverdier, som støtter logiske operasjoner som og AND (& og &&) og eller OR (| og ||) 
  • int - helttallstype som støtter aritmetiske operasjoner som +, -, *, / og % (rest)
  • double - desimaltallstype som støtter aritmetiske operasjoner som +, -, *, / og % (rest)
  • java.lang.String - tegnsekvensklasse som støtter + for sammensetting (spleising) og en rekke metoder for å hente ut tegn og /delsekvenser og for å lage nye String-objekter
  • java.util.ArrayList - objektsekvensklasse som har en rekke metoder for å endre å sekvensen (endre, legge til og fjerne elementer)

...

  • 1 + 2, lov fordi 1 og 2 begge er av typen int, som støtter + (resultatet blir 3)
  • "1" + "2", lov fordi "1" og "2" er av typen String, som støtter + (resultatet blir "12")
  • "1".length(), lov fordi "1" er av typen String og String har metoden length() (uten parametre)
  • "2".charAt(2.0), ikke lov fordi selv om "2" er en String og String har metoden charAt, så tar charAt en int som argument og 2.0 er en double-verdi.
  • ("1" + "2").metodeSomIkkeFinnes(), ikke lov fordi "1" + "2" gir en ny String, og String har ikke metoden metodeSomIkkeFinnes.
  • new Date() + 3, ikke lov fordi new Date() gir et objekt av typen Date, som ikke støtter + (selv om en kunne definert det teknisk sett er mulig å definere at det skulle gi en ny dato en viss tid fremover)

...

Casting er en mulighet en har i Java for å "endre" typen til et uttrykk. Notasjonen er (T) expr, hvor T er en type og expr er et uttrykk. En altså setter typen altså typen en ønsker i parentes foran et uttrykk og samlet sett får en et nytt uttrykk av angitt type. En kan selvsagt ikke velge T fritt, det må jo være en sammenheng mellom T og typen til expr. Effekten av utførelsen av casting-uttrykk og hva som er lov og ikke, kan deles i to tilfeller:

...

  • A a = new B(), går greit, siden uttrykket new B() gir en B som er en subklasse (arver fra) A
  • B b = new A(), går ikke greit, siden en A ikke er en B
  • G g1 = new A(), g2 = new B(), g3 = new C(), den første går ikke, siden en A ikke er en subklasse av (implementerer) G, mens de andre er greie, siden både B og C implementerer G
Spørsmålet i b) er hvilke av følgende uttrykk vil gi feil i editoren/ved kompilering (statiske typer) og hvorfor (anta at variablene ab og c er deklarert til å være av klassene AB og C):

...