Primitieven en Wrapper classes Primitieven en Wrapper classes ________________________________________________ 1 I. Primitieven in Java ______________________________________________________ 2 A. Primitieven.java ______________________________________________________ 2 B. Maxima.java ________________________________________________________ 3 C. Primitieven2.java _____________________________________________________ 4 D. Primitieven3.java _____________________________________________________ 5 E. Primitieven4.java _____________________________________________________ 6 II. De bijhorende Wrapper classes __________________________________________ 8 A. WrapperBoolean.java _________________________________________________ 8 B. WrapperBoolean.java _________________________________________________ 9 C. WrapperInt.java ____________________________________________________ 10 D. WrapperDouble.java_________________________________________________ 11 III. Packages ___________________________________________________________ 12 I. Primitieven in Java A. Primitieven.java Verwijder de verschillende commentaren en probeer te begrijpen waar het fout gaat ! public class Primitieven { public static void main(String args[]) { boolean bo = false; char c = 'A'; // byte by = 255; byte by = (byte)127; // short s = 32767; short s = (short)32767; int i = 2147483647; //2^31-1 // long l = 9223372036854775807; long l = 9223372036854775807l; //2^63-1 // float f = 1.1; // float f = (float)1.1; float f = 1.1f; double d = 1.1; // double d = 1.1d; System.out.println("boolean : " + bo); System.out.println("char : " + c); System.out.println("byte : " + by); System.out.println("short : " + s); System.out.println("int : " + i); System.out.println("long : " + l); System.out.println("float : " + f); System.out.println("double : " + d); } } B. Maxima.java Wijzig het onderstaande programma, zodanig dat je de verschillende maxima berekend van de opgegeven primitieve data-types. Maak hiervoor gebruik van een static methode uit de klasse Math. public class Maxima { public static void main(String args[]) { byte by = Math.; // Bereken 2^7-1 short s = Math.; // Bereken 2^15-1 int i = Math.; // Bereken 2^31-1 long l = Math.; // Bereken 2^63-1, let op de afrondingsfout! System.out.println("byte : " + by); System.out.println("short : " + s); System.out.println("int : " + i); System.out.println("long : " + l); } } C. Primitieven2.java Sla de code van Primitieven.java op onder de naam Primitieven2.java en refactor de code om tot de onderstaande code te komen. Probeer de fouten die de IDE je rapporteert te begrijpen. Haal eerst de declaratie van de attributen/variabelen uit de main methode. Plaats de println-opdrachten in een methode die dezelfde naam heeft als de klasse public class Primitieven2 { boolean bo = false; char c = 'A'; // byte by = 255; byte by = (byte)127; // short s = 32767; short s = (short)32767; int i = 2147483647; //2^31-1 // long l = 9223372036854775807; long l = 9223372036854775807l; //2^63-1 // float f = 1.1; // float f = (float)1.1; float f = 1.1f; double d = 1.1; // double d = 1.1d; public Primitieven2() { System.out.println("boolean : " + bo); System.out.println("char : " + c); System.out.println("byte : " + by); System.out.println("short : " + s); System.out.println("int : " + i); System.out.println("long : " + l); System.out.println("float : " + f); System.out.println("double : " + d); } } public static void main(String args[]) { Primitieven2 primitieven2 = new Primitieven2(); } D. Primitieven3.java We kunnen nog iets verder gaan in het refactoren. Ipv. de constructor te gebruiken maken we twee methodes aan: Een methode drukt initialiseert de verschillende attributen, behalve de eerste twee: bo en c bo en c worden geinitialiseerd in de static main, via een referentie naar hun object Het afbeelden van de attributen gebeurt in de methode primitievenAfdrukkken. public class Primitieven3 { boolean bo; char c; byte by; short s; int i; long l; float f; double d; public void primitievenAfdrukkken() { System.out.println("boolean : " + bo); System.out.println("char : " + c); System.out.println("byte : " + by); System.out.println("short : " + s); System.out.println("int : " + i); System.out.println("long : " + l); System.out.println("float : " + f); System.out.println("double : " + d); } public void setNumbers() { by = (byte)127; s = (short)32767; i = 2147483647; //2^31-1 l = 9223372036854775807l; //2^63-1 f = 1.1f; d = 1.1; } public static void main(String args[]) { Primitieven3 p = new Primitieven3(); p.bo = false; p.c = 'A'; } } p.setNumbers(); p.primitievenAfdrukkken(); E. Primitieven4.java De variabelen bo en c worden niet met de methode setNumbers geinitialiseerd. Genereer via de IDE getters en setters voor deze 2 variablen en roep ze aan in de methode main ipv. De code uit Primitieven3.java public class Primitieven4 { boolean bo; char c; byte by; short s; int i; long l; float f; double d; /** * @return Returns the bo. */ public boolean isBo() { return bo; } /** * @param bo The bo to set. */ public void setBo(boolean bo) { this.bo = bo; } /** * @return Returns the c. */ public char getC() { return c; } /** * @param c The c to set. */ public void setC(char c) { this.c = c; } /** * Druk alle primitieve an */ public void PrimitievenAfdrukkken() { System.out.println("boolean : " + bo); System.out.println("char : " + c); System.out.println("byte : " + by); System.out.println("short : " + s); System.out.println("int : " + i); System.out.println("long : " + l); System.out.println("float : " + f); System.out.println("double : " + d); } /** * Geef alle numeriek primitieven een waarde */ public void setNumbers() { by = (byte)127; s = (short)32767; i = 2147483647; //2^31-1 l = 9223372036854775807l; //2^63-1 f = 1.1f; d = 1.1; } public static void main(String args[]) { Primitieven4 p = new Primitieven4(); p.setBo(false); p.setC('A'); p.setNumbers(); p.PrimitievenAfdrukkken(); } } II. De bijhorende Wrapper classes A. WrapperBoolean.java public class WrapperBoolean { public static void main(String args[]) { Boolean wBo; boolean bo = false; wBo = new Boolean(bo); System.out.println(wBo); System.out.println(wBo.toString()); System.out.println(Boolean.toString(wBo.booleanValue())); } } wBo = Boolean.TRUE; System.out.println(wBo); bo = wBo.booleanValue(); System.out.println(bo); B. WrapperBoolean.java public class WrapperChar { public static void main(String args[]) { Character wC; char c = 'A'; wC = new Character(c); System.out.println(wC); System.out.println(wC.toString()); System.out.println(Character.toString(wC.charValue())); System.out.println(Character.toLowerCase(wC.charValue())); c = (char)65; System.out.println(c); c = (char)90; System.out.println(c); System.out.println(Character.toLowerCase((char)90)); System.out.println((int)Character.toLowerCase((char)90)); c = (char)122; System.out.println(c); c = (char)122-25; System.out.println(c); } } C. WrapperInt.java public class WrapperInt { public static void main(String args[]) { Integer wI; int i = 153; wI = new Integer(i); System.out.println(wI); System.out.println(wI.toString()); System.out.println(Integer.toString(wI.intValue())); System.out.println(Integer.MIN_VALUE); System.out.println(Integer.MAX_VALUE); String geheelGetal = "136"; i = Integer.parseInt(geheelGetal); System.out.println(i); } } wI = new Integer((new Integer(5)).intValue() + (new Integer(7)).intValue()); System.out.println(wI); D. WrapperDouble.java Maak als oefening een nieuwe java-klasse aan die twee primitieve floats in hun wrapperklasse stopt (=boxing). Ze er terug uit haalt (=unboxing) en samentelt. Het resultaat stop je opnieuw in een Float-object dat je daarna afbeeld via de toString()-methode in een System.out.println(). Roep deze methode evt. impliciet aan. public class WrapperDouble { public static void main(String args[]) { Double wD; double d = 153; wD = new Double(d); System.out.println(wD); System.out.println(wD.toString()); System.out.println(Double.toString(wD.doubleValue())); System.out.println(Double.MIN_VALUE); System.out.println(Double.MAX_VALUE); String geheelGetal = "136"; d = Double.parseDouble(geheelGetal); System.out.println(d); wD = new Double((new Double(5)).intValue() + (new Double(7)).intValue()); System.out.println(wD); wD = new Double((new Double(5.1)).doubleValue() + (new Double(7.6)).doubleValue()); System.out.println(wD); } } III.Packages De bovenstaande oefeningen staan waarschijnlijk in het default package. Maak een package c02R aan en versleep deze oefeningen hier naar toe. Kijk welke wijzigingen er zich in de code voordoen?