Java lathund #3 - Reserverade ord och primitiva datatyper
Förord
Hejsan! I den här artikeln, som är en fortsättning på artikelserien Java lathund, ska vi kika lite på reserverade ord och primitiva datatyper i Java.Innehåll
»»
»
»
»
»
»
»
»
»
Relaterade artiklar
» Java lathund #1 - Hello World» Java lathund #2 - Klass och main-metod
Reserverade ord i Java
Precis som i andra programmeringsspråk som t.ex. C++, C och VB m.fl. har Java reserverade ord. D.v.s. ord/termer som är reserverade och kan därför inte användas som klassnamn, attributnamn etc.
I Java har vi 51 stycken reserverade ord. Dessa finns i nedanstående tabell:
abstract | const | final | instanceof | private | switch | void |
boolean | continue | finally | int | protected | synchronized | volatile |
break | default | float | interface | public | this | while |
byte | do | for | long | return | throw | |
case | double | goto | native | short | throws | |
catch | else | if | new | static | transient | |
char | extends | implements | null | strictfp | true | |
class | false | import | package | super | try |
De reserverade orden goto och const har ingen betydelse i Java men är ändå reserverade.
Vad alla dessa olika ord/termer har för innebörd kommer jag nog inte gå igenom i denna artikelserie, men en del av dem kommer vi att kika på.
En del av dem är åtkomstmodifierare, en del är logiska operatorer och en del är primitiva datatyper som vi ska titta på härnäst...
Primitiva datatyper i Java
I Java har vi 8 stycken primitiva datatyper. Dessa är:
- boolean
- char
- byte
- short
- int
- long
- float
- double
Och deras storlek i bits är enligt följande tabell:
Typ: | Antal bitar: |
boolean | 1 |
byte | 8 |
char | 16 |
short | 16 |
int | 32 |
float | 32 |
long | 64 |
double | 64 |
Signed integral data types
Detta innebär heltals datatyper som kan anta både negativa tal och poitiva tal, d.v.s. –2 och 32 till exempel.
I Java finns det 4 stycken sådana signerade heltals datatyper. Dessa är:
- byte
- short
- int
- long
Som vi minns från föregående tabell över storlek i bits så är dessa datatyper olika stora. Detta betyder att de kan representera olika stort ”omfång” av tal.
Följande tabell visar vilket minsta tal respektive största tal varje datatyp kan representera:
Typ | Minsta tal | Största tal |
byte | -27 | 27-1 |
short | -215 | 215-1 |
int | -231 | 231-1 |
long | -263 | 263-1 |
Reella tal i Java
Reella tal är tal som kan innehålla ett decimalkoma eller beskrivas i exponetform. Exempel på detta är t.ex. 2.5 och 23.456E-23.
I Java har vi två datatyper som representerar reella tal. Dessa är:
- float
- double
Dessa reella tals omfång är enligt följande på ett ungefär:
Typ | Minsta tal | Största tal | Noggrannhet |
float | -3.4 * 1038 | 3.4 * 1038 | ca. 7 siffror |
double | -1.7 * 10308 | 1.7 * 10308 | ca. 15 siffror |
I Java kan man ange suffix som anger om det aktuella talet är en float eller double. Dessa är bokstäverna d/D och f/F.
Ex:
double tal1 = 12d;
double tal2 = 12D;
float tal3 = 12f;
float tal4 = 12F;
Observera! Att Ni inte kan tilldela en double till en float p.g.a. att float inte har tillräckligt med bitar för att "hålla" en double.
Ex:
double tal1 = 12f; // Ok! double är i storlek 64 bitar och float "bara" 32 bitar.
float tal3 = 12d; // Fel! float är i storlek 32 bitar och kan därmed INTE "hålla" en double på 64 bitar.
Detta gäller i och för sig alla datatyper och är ett vanligt fel som man i början brukar göra.
boolean
boolean i Java representerar, som det kanske hörs av namnet, en boolsk datatyp. Den kan endast ha två värden: true eller false.
Ex:
boolean sant = true;
boolean falskt = false;
char
En char representerar ett ensamt tecken i Java. Dessa beskrivs genom att man tilldelar en char variabel ett tecken inom två apostroftecken. Det är också möjligt att använda sig av Unicode för att representera ett tecken.
Ex:
char ettTecken = 'A';
char ettAnnatTecken = '\u4567';
Java stödjer också några s.k. escape sequences för att representera speciella tecken. Dessa är:
- '\n' för ny linje
- '\r' för RETURN
- '\t' för TAB
- '\b' för BACKSPACE
- '\f' för FORM FEED
- '\'' för apostrof
- '\"' för citationstecken
- '\\' för BACKSLASH
Nu tänkte jag att vi ska titta lite på hur man representerar strängar i Java. En liten förhandstitt fick Ni i föregående artikel, men jag tänkte nu förklara det lite närmare.
String
String är i Java ingen primitiv datatyp utan ett objekt. Ett litet speciellt objekt dock för man behöver inte skapa ett nytt objekt av klassen String för att använda det.
För detta krävs ett exempel och en förklaring:
Ex:
String minText = "Hej!";
String annanText = new String("Hej då!");
Den första kodraden kanske inte är så konstig, men vad är det där andra?
Jo, när man ska skapa ett nytt objekt (d.v.s. skapar en instans av en klass) så säger man helt enkelt "nytt objekt". Och i detta fall så kan objektet som skapas ta en inparameter till sin konstruktor (vilket vi kommer prata mer om i kommande artiklar).
På andra raden säger vi alltså: "skapa ett nytt objekt utifrån klassen String med denna sträng". Detta skulle kunna liknas med följande meddelande om det gällde metaforen för klasser i den föregående artikeln: "bygg ett nytt hus som ska vara rött".
Jag vet, har man inte tidigare sysslat med objekt och objektorientering så kanske detta är hårdsmält. Så länge får ni bara acceptera att man kan skapa nya String objekt så här.
Det är inte vanligt att man kan "direkt" tilldela ett objekt ett värde som vi gör i exemplet på rad 1 ovan. När det gäller just String klassen så föredrar jag att man gör just på detta sätt beskrivet på rad 1. Anledningen till detta är att det kostar i prestanda att s.k. instantiera objekt utifrån en klass med det reserverade ordet new.
Summering
Efter denna artikel ska vi ha lärt oss de reserverade orden i Java och vilka de primitiva datatyperna är. Vi gick också idag in på ett färdigdefinierat objekt som finns i Javas standard bibliotek, nämligen klassen String.
I nästa artikel ska vi prata lite mer om konstruktor som anropas vid skapandet av ett objekt. Lite kodexempel som illustrerar hur man skapar nya objekt och vad som verkligen händer "bakom kulisserna" kommer också att vara på sin plats samt en del om metoder med eller utan inparametrar och returtyper.
Referenser
Skansholm, J. (1999). Java Direkt (2:a rev. Uppl.). Lund: Studentlitteratur.
Roberts, S., Heller, P., & Ernest, M. (2000) Complete Java 2 Certification Study Guide (2nd Ed.). Alameda CA: SYBEX.
Om skribenten…
Andreas Eriksson arbetar idag som frilandskonsult med bl.a. distribuerad programmering och systemutveckling i Java. Han har tidigare föreläst på bl.a. Högskolan i Gävle inom objektorienterad databasutveckling med språket Java som verktyg.
Han har mångårig erfarenhet av utveckling i Java och är sedan 2002 Sun Certified Java Developer for the Java 2 Platform.
Maila mig gärna för kommentarer.
0 Kommentarer