De gegevenstypen in Java |
In Java kunnen tijdelijke waarde voor getallen worden opgeslagen in een variabele. Een variabele is een primitieve gegevenstype, waarvan de naam is opgegeven bij de declaratie.
In het dagelijks leven werken we met verschillende gegevenstypen, bijv. hele en gebroken getallen. Elk gegevenstype heeft zijn kenmerken. Hele getallen bijvoorbeeld kunnen zekere waarden aannemen en bepaalde bewerkingen ondergaan. Veronderstel dat x een geheel getal is. Dan is de toekenning x = 2 wel, maar de toekenning x = 12,6 niet toegestaan.
Java kent de onderstaande getalstypen voor gehele, gebroken getallen boolean en karakter.
|
grootte in bits | minimale t/m maximale waarde |
|
8-bit | -128 t/m +127 |
|
16-bit | -32.768 t/m 32.767 |
|
32-bit | -2.147.483.648 t/m +2.147.483.747 |
|
64-bit | - 9.223.372.036.854.775.808
t/m 9.223.372.036.854.775.808 |
|
32-bit IEEE 754 |
-3,40292347E+38 t/m +3,40292347E+38 |
|
64-bit IEEE 754 |
-1,79769313486231570E+308 t/m +1,79769313486231570E+308 |
|
16-bit Unicode | '\u0000 t/m '/uFFFF |
|
vlag | true of false |
Constante waarde voor integers kunnen een decimale, octale, hexadecimale vorm en een long formaat aannemen.
In principe kunnen constante waarden aan byte, short en int worden toegekend mits de waarde binnen dit formaat past. In andere gevallen moet een expliciete typecast toegepast worden, waardoor bij de conversie informatie verloren kan gaan.
Gebroken getallen kunnen een decimale punt bevatten en eindigen met een exponent, maar het is beide niet verplicht.
3 3. 3.1 .31E1 31.0E-1
Constante waarden van gebroken getallen zijn van het type double. Als ze eindigen met een F of f dan zijn ze van het type float. B.v. 18.3F. Als een gebroken eindigt met een D of d dan is het een double, maar dit is overbodig.
Een constante van het type double kan niet worden toegewezen aan een float ook al valt de waarde binnen die van een float .De onderstaande expressie is fout:
float f = 3.1; // FOUT float f = 3.1F; // GOED
Karakters zijn getallen die letters vertegenwoordigen. Karakter worden gecodeerd volgens het Unicode karakterset. De oude bekende ASCII karakterset is daar een subset van.
Karakters staan tussen enkele aanhalingstekens 'A'. Dit geldt voor ieder Unicode teken. Enkele tekens kunnen met zgn escape karakters worden weergegeven. Deze zijn
\n newline volgende regel \t tab de tab \b backspace één karakter terug \r return terug \f form feed nieuwe bladzijde \\ back slash de backslash zelf \' single quote enkele aanhalingsteken \" double quote dubbele aanhalingsteken \ddd een ascii karakter weergegeven met 3 of minder octale getallen \udddd een Unicode karakter weergegeven met 4 hexadecimale getallen
Een tekst begint en eindigt met een dubbele aanhalingsteken (") B.v. "Dit is een tekst". De string wordt opgeslagen in een String klasse
Een declaratie bestaat uit het noemen van een naam, voorafgegaan door een gegevenstype en afgesloten met een puntkomma.
int getal;
Hierboven wordt een variabele getal gedeclareerd van het gegevenstype int. Vanaf de zinsnede van de declaratie en verder is de naam van de variabele te gebruiken. Voorafgaande aan de declaratie is de naam dus niet bekend.
De compiler weet nu hoeveel ruimte voor de variabele getal in het geheugen moet worden gereserveerd. De Java compiler reserveert voor een integer 4 bytes, 32 bits.
Als we meer dan één variabele van het type int nodig hebben, bijv. getalX en getalY dan kunnen we die op de volgende drie manieren declareren
int getalX; //vergeet de punt-komma niet int getalY; int getalX, getalY; int getalX, // Let op: er staat een komma getalY;
getal is de naam van een variabele. Namen, of identifiers, worden in Java voor verschillende doelen gebruikt, o.a. voor het aanduiden van variabelen en methoden. Kenmerken van een identifier zijn:
Probeer variabelen aan te duiden met een naam die zo goed mogelijk de functie van de variabele weergeeft. Namen als winst en verlies zijn veelzeggender dan w en v. Maar aan de andere kant gebruik geen overdreven lange namen, waardoor het correct overschrijven van die namen een probleem wordt. Hoewel de Java programmeurs er zelf ook wat van kunnen; neem nou de klassenaam ArrayIndexOutOfBoundsException, maar je weet wel direct wat er bedoeld wordt.
Begin namen van variabelen bij voorkeur met kleine letters (klassenamen met een hoofdletter). Als een identifier bestaat uit een samentrekking van twee namen schrijf de beginletters van de tweede en eventueel daaropvolgende namen als hoofdletters. Bijv.
idCode, telefNr xCoord
Dit is de manier die in de java bibliotheken consequent wordt toegepast. Dit geldt ook voor de namen van methoden.
Een variabele kan een beginwaarde krijgen bij de declaratie
int teller = 0; char kar = 'A'; boolean vlag = false;
Standaard initialisatie
Wordt een variabele niet geinitieerd dan geeft de java
compiler standaard een waarde. Dit geldt alleen als het een
datamember van een klasse of een element in een array betreft. De
lokale variabele van een methode worden niet geinitieerd. Dit
moet de programmeur dus doen.
Dat standaard initialisatie waarden zijn
boolean |
false |
byte, short, int, long |
0 |
float |
0.0f |
double |
0.0 |
char |
'/u0000' |
object referentie |
null |
Een variabele kan alleen binnen een klasse of binnen een methode gedeclareerd worden. Een variabele mag op elke willekeurige plaats gedeclareerd worden. Een variabele bestaat vanaf het moment van declareren totdat de levensduur van de klasse of methode is afgelopen. De levensduur wordt ook wel de scoop genoemd. De scoop van een variabel is het programmablok waarin de variabele toegankelijk is. Er zijn drie plaatsen waar variabelen voorkomen:
In Java kan een variabele een constante waarde krijgen, die in het verdere programma niet meer veranderd kan worden.
final int aantal = 12;
De waarde mag ook later dan bij de declaratie worden vastgelegd mits het voor het eerste gebruik van deze variabele is
final int totaal; ...// een stuk programma totaal = 10; // dit mag totaal = 12; // dit mag niet meer
De standaard gegevenstype zijn voorzien van een zogenaamde wrapper klasse. In deze wrapper klasse staan:
| int | Integer |
| byte | Byte |
| short | Short |
| long | Long |
| float | Float |
| double | Double |
| boolean | Boolean |
| char | Character |
Alle standaard gegevenstypen hebben een maximale waarde. Deze waarde staat in de wrapper klasse van dit type. Bijvoorbeeld de maximale waarden van een int staat in de Integer klasse.
int |
Integer.MAX_VALUE |
IntegerMIN_VALUE |
double |
Double.MAX_VALUE |
Double.MIN_VALUE |
byte |
Byte.MAX_VALUE |
Byte.MIN_VALUE |
char |
Character.MAX_VALUE |
Character.MIN_VALUE |
De waarde van pi = 3.14 staat in Math.PI en e is Math.E
De uitdrukking lengte * breedte is een expressie. Alle zinvolle combinaties van constanten, variabelen, operatoren en functie-aanroepen noemen we expressies. Volgt na een expressie een punt-komma dan is het een statement. Voorbeelden van expressies zijn:
x a + b c = a + b a*b + b/(d -c) e > x
Voorbeelden van statements zijn:
x = 3;
z= a + b ;
c = methode(a);
| operator | type |
| ( ) | haakjes |
| [] . (parameters) x++ x-- | postfix |
| ++x --x +x -x | unary |
| new (type) | creatie of typecast |
| * / % | vermenigvuldigen delen |
| + - | optellen aftrekken |
| << >> <<< | schuiven |
| < > >= <= instanceof | relationeel |
| == != | gelijkheid |
| & ^ | | bitwise AND, XOR en OR |
| && | logische AND |
| || | logische OR |
| ?: | conditioneel |
| = += -= *= /= %= >>= <<= >>>= &= ^= |= | toewijzing |
Alle operatoren associeren van links naar rechts dus a * b / c komt overeen met (a * b) / c. De enige uitzondering vormen de toewijzings operatoren. Met als gevolg dat a = b = c hetzelfde is als a = (b = c).
Expressie worden altijd van links naar rechts geëvalueerd. In het onderstaande voorbeeld wordt x[2] gelijk aan 0. Eerst wordt de expressie x[a] uitgevoerd en daarna het = -teken. Het = -teken associeert van rechts naar links, dus wordt gelezen als x[a] = (a = 0);
a = 2; x[a] = a = 0;
Om programma's goed leesbaar te maken mogen we in de broncode als scheidingstekens spaties en/of tabs en/of newline gebruiken. Scheidingstekens (whitespaces) mogen overal in een programma worden gebruikt, maar niet in namen en gereserveerde woorden. Dus som1 = a + b is wel, maar som 1 = a + b is niet toegestaan (spatie tussen som en 1). Een spatie na een komma en punt-komma en tussen identifiers en operatoren kan een programma beter leesbaar maken.