Fundamental Classes in The java.lang Package
- Write code using the following methods of the java.lang.Math class: abs(), ceil(), floor(), max(), min(), random(), round(), sin(), cos(), tan(), sqrt().
- Describe the significance of the immutability of String objects.
- Make appropriate selections in the wrapper classes to suit specified behavior requirements.
- State the result of executing a fragment of code that includes an instance of one of the wrapper classes.
- Write code using the following methods of the wrapper classes (e.g. Integer, Double,, etc): doubleValue, floatValue, intValue, longValue, parseXxx, getXxx, toString, toHexString.
Write code using the following methods of the java.lang.Math class: abs(), ceil(), floor(), max(), min(), random(), round(), sin(), cos(), tan(), sqrt().
Die Math-Klasse ist "final" und deshalb kann sie nicht vererbt werden. Alle Methoden sind public und static, das heisst, dass auf sie mit Math.methode() zugegriffen werden kann.abs()-Methode
Diese Methode gibt den absoluten Wert einer Zahl zurück. Ist das Argument positiv oder 0, so ist das Ergebnis die gleiche Zahl, die als Argument übergeben wurde. Ist die zahl negativ, so wird die zahl umgewandelt in eine positive Zahl.
Math.abs(-1) gibt 1 zurück
Math.abs(0) gibt 0 zurück
Math.abs(1) gibt 1 zurück
Math.abs(5.0) gibt 5.0 zurück
Die abs()-Methode ist überladen. Hier sind vier verschiedene Versionen:
- public static int abs(int x)
- public static long abs(long x)
- public static double abs(double x)
- public static float abs(float x)
ceil()-Methode
Diese Methode nimmt als Argument ein double-Wert und gibt auch double-Wert zurück. Dabei wird der nächsthöhere Integerwert zurückgegeben.
Math.ceil(3) gibt 3.0 zurück
Math.ceil(3.1) gibt 4.0 zurück
Math.ceil(-3.1) gibt -3.0 zurück
Ist bei dieser Methode das Argument kleiner als 0 und grösser als -1.0, so ist das Ergebnis -0.0
floor()-Methode
Diese Methode nimmt als Argument ein double-Wert und gibt auch double-Wert zurück. Dabei wird der nächstkleinere Integerwert zurückgegeben.
Math.floor(3) gibt 3.0 zurück
Math.floor(3.1) gibt 3.0 zurück
Math.floor(-3.1) gibt -4.0 zurück
max() und min()-Methoden
Beide Methoden nehmen zwei Argumente auf. Die Methode min() gibt den kleineren Wert wieder zurück, während die max()-Methode den grösseren Wert zurückgibt
Beide methoden sind überladen mit int, long, float und double Rückgabewerten.
Math.max(-1,-10) gibt -1 zurück
Math.max(1,2) gibt 2 zurück
Math.min(1,1) gibt 1 zurück
Math.min(-1,-10) gibt -10 zurück
Math.min(1,2) gibt 1 zurück
random()-Methode
Diese Methode gibt eine Zufallszahl, die grösser/gleich 0.0 und kleiner als 1.0 ist. Wenn man eine Zufallszahl zwischen 0 und 10 haben möchte, so schreibt man wie folgt: System.out.println(Math.round(Math.random()*10));
round()-Methode
Diese Methode rundet eine Zahl nach mathematischen Regeln auf bzw. ab. Es gibt zwei Methoden:
public int round(float f)
public long round(double d)
Math.round(1.001) gibt 1 zurück
Math.round(1.678) gibt 2 zurück
Math.round(-1.001) gibt -1 zurück
Math.round(-1.678) gibt -2 zurück
Math.round(1.5) gibt 2 zurück
Math.round(-1.5) gibt -1 zurück
sin(), cos(), tan()-Methoden
Alle drei Methoden erwarten Radianten als Argumente. Die Argumente und Rückgabewerte sind vom Typ double.
sqrt()-Methode
gibt die Wurzel von einem double Argument zurück. Rückgabewert ist ebenfalls double. Ist die Zahl grösser/gleich als 0, so ist der Rückgabewert Wurzel aus dieser Zahl.
Ist die Zahl kleiner als 0, also negativ, so ist der Rückgabewert NaN (Not a Number). Die Methode gibt kein Exception aus, wenn die Zahl negativ ist.
Describe the significance of the immutability of String objects.
StringIn Java werden die Zeichenketten durch die String-Klasse repräsentiert. Das wichtigste bei den String-Objekten ist, dass sie nicht veränderbar sind (immutable). Wenn eine Instanz von java.lang.String erzeugt wurde, so kann der Inhalt nicht mehr verändert werden. Bei allen String verändernden Methoden wird eine neue Instanz erzeugt und die aufrufende Instanz wird nicht verändert. Die Stringklasse ist final.
Es gibt zwei Methoden um eine neue Stringinstanz zu erzeugen:
- direkte Zuweisung eines Literals:
String str = "abc"; - Erzeugung durch den new()-Operator.
String str = new String("abc");
String str1 = "abc";
String str2 = "abc";
Hier wird nur ein Stringobjekt erzeugt und dieses Objekt wird in einem Literal String Pool gespeichert. Wenn man die beiden Strings mittels "==" vergleicht, so wird true zurückgegeben, weil die Referenzen der beiden Objekte gleich sind.
Alle Methoden, die die Zeichenketten verändern, geben immer einen neuen String zurück.
String str1 = "Guten";
str1 = str1 + " Morgen";
Es sieht so aus, als ob der String str1 verändert wird. Aber hier wird ein neuer String mit dem Inhalt "Guten Morgen" erzeugt. Der alte String wird nicht verändert.
Die einzige Ausnahme bilden die Methoden toUpper() und toLower()-Methoden. Wenn der Inhalt durch Konvertierung nicht verändert wurde, so wird der gleiche String zurückgegeben.
Folgende Methoden sind in der Stringklasse enthalten, die auch im Examen abgefragt werden:
String-Methoden
- char charAt(int index): gibt den char am angegebenen Index zurück. Indizierung fängt mit 0 an.
- String concat(String a): gibt einen neuen String zurück, bestehend aus dem alten String gefolgt von dem anzuhändenden String a.
- int compareTo(String andererString): lexikalische Überprüfung zweier Strings. Gibt einen int-Wert kleiner als 0 zurück, wenn der String kleiner als andererString ist. Gibt 0 zurück, wenn beide Strings gleich sind und gibt einen int-Wert grösser als 0 zurück, wenn der String grösser ist als anderer String ist.
- int compareToIgnoreCase(String andererString): wie oben, nur wird hier Klein- und Grossschreibung ignoriert.
- boolean endsWith(String suffix): gibt true zurück, wenn der String mit dem Suffix endet, sonst false.
- boolean equals(Objekt obj): gibt true zurück, wenn das String-Objekt und obj gleich sind. Hier wird geprüft, ob beide Objekte inhaltlich gleich sind und nicht, ob sie auf das gleiche Objekt refenzieren. Mit dieser Methode wird also nicht nur geprüft, ob zwei Strings gleich sind, sondern ob auch die Stringdarstellung eines Objekts mit dem String inhaltlich gleich ist.
- boolean equalsIgnoreCase(String str): hier werden zwei Strings miteinander inhaltlich verglichen, eventuelle Gross-/Kleinschreibung wird ignoriert.
- int indexOf(char ch): sucht das erste Vorkommens des Zeichens ch in dem angegebenen String. Wird ch gefunden, so wird der Index des ersten Vorkommens zurück. Ist ch nicht vorhanden, so wird -1 zurückgegeben. Gibt man als Argument "null", wird eine "NullPointerException ausgelöst.
- in lastIndexOf(char ch): wie oben, nur wird hier das letzte Vorkommen zurückgegeben. Gibt man als Argument "null", wird eine "NullPointerException ausgelöst.
- int length(): gibt die Anzahl der Zeichen in einem String zurück. length() ist eine Methode in der Stringklasse. Nicht zu verwechseln mit length, welches eine Membervariable ist, die die Anzahl der Arrayelemente angibt.
- String replace(char altChar, char neuChar): gibt einen neuen String zurück, wobei alle Zeichen altChar mit dem neuChar ersetzt wurde.
- boolean startsWith(String prefix): gibt true zurück, wenn der String mit dem prefix anfängt, sonst wird false zurückgegeben.
- String substring(int startIndex): gibt Teilstring zurück, welches mit startIndex anfängt und bis zum Ende der Zeichenkette ist. Alternativ gibt es auch die Methode, wo man startIndex und endIndex angeben kann. Dann wird die Zeichenkette ab startIndex bis endIndex-1 zurückgegeben.
- String toLowerCase(): konvertiert alle Zeichen in Kleinbuchstaben und gibt einen neuen String zurück.
- String toUpperCase(): konvertiert alle Zeichen in Grossbuchstaben und gibt einen neuen String zurück.
- String trim(): gibt einen neuen String, wo am Anfang und Ende alle Whitespaces entfernt wurden.
- String toString(): gibt das Objekt in Stringfom zurück.
StringBuffer
Eine Instanz der StringBuffer-Klasse repräsentiert einen String, welches dynamisch modifiziert werden kann. Bei allen Methoden wird also keine neue Instanz erzeugt, sondern die alte Instanz wird modifiziert. Die StringBufferklasse ist ebenfalls final, wie die String-Klasse.
StringBuffer können auf drei verschiedene Arten erzeugt werden:
- StringBuffer(): erzeugt einen leeren StringBuffer mit einer Anfangskapazität von 16 Zeichen.
- StringBuffer(int kapazität): erzeugt einen leeren StringBuffer mit der angegebenen Anfangskapazität.
- StringBuffer(String initialString): erzeugt einen StringBuffer mit dem angegebenen initialString als Inhalt und mit einer zusätzlichen Anfangskapazität von 16 Zeichen.
- StringBuffer append(String str): angegebener String str wird dem aktuellen String angehängt.
- StringBuffer append(Object obj): ruft die toString()-Methode auf und das Ergebnis wird dem aktuellen String angehängt.
- StringBuffer insert(int offset, String str): fügt den angegebenen String str an der Position offset ein.
- StringBuffer reverse(): invertiert den StringBuffer, das heisst einfach rückwärts gelesen.
- StringBuffer setCharAt(int offset, char neuChar): Das Zeichen, welches an der Position offset ist, wird durch neuChar ersetzt. Ist StringBuffer kleiner als dieser Position, so wird eine StringIndexOutOfBoundsException ausgelöst.
- StringBuffer setLength(int neueLänge): Setzt die Länge des StringBuffers auf die angegebene neueLänge. Ist die neueLänge kleiner als die aktuelle, so werden alle Zeichen ab dieser Position abgeschnitten. Ist die neueLänge grösser, so wird null's angehängt.
- StringBuffer toString(): konvertiert den StringBuffer in ein String.
Die Methode equals(), die vom Object abgeleitet ist, wird bei StringBuffer nicht überladen. Mit der Methode wird überprüft, ob die beiden StringBuffer gleich sind. Sie gibt true zurück, wenn es sich um die gleichen StringBuffer handelt, ist also identisch mit "==".
Zusätzlich ist noch anzumerken, dass die Operatoren + und += nicht überladen sind. Benutzt man sie im Programmcode trotzdem, so wird Compiler Fehler zurückgegeben:
String str = "Guten" + " Morgen";
ist identisch mit:
StringBuffer().append("Guten").append(" Morgen").toString();
Vergleichen und Zuordnen von StringBuffer zu String ergibt Kompilierfehler.
trim() ist keine Methode StringBuffer-Klasse.
Make appropriate selections in the wrapper classes to suit specified behavior requirements.
State the result of executing a fragment of code that includes an instance of one of the wrapper classes.
Write code using the following methods of the wrapper classes (e.g. Integer, Double,, etc): doubleValue, floatValue, intValue, longValue, parseXxx, getXxx, toString, toHexString.
Alle drei Themen sind zusammengefasst.Jeder primitiver Datentyp hat eine korrespondierende Wrapperklasse. Diese Klassen umgibt die primitive Variable und stellt nützliche Methoden zum Zugriff auf die Variablen.
Die Wrapperklassen sind nicht veränderbar (immutable) und final.
Alle numerischen Wrapper-Klassen sind von der abstrakten Superklasse Number abgeleitet, welche nur Konvertierungs-Methoden beinhaltet.
primitive Datentypen und dazugehörige Wrapperklassen
primitiver Datentyp | Wrapperklasse |
boolean | Boolean |
byte | Byte |
char | Charakter |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
Die Instanziierung der Wrapperklasse erfolgt dadurch, dass man den korrespondierenden Typen an den Konstruktor übergibt, um ein Objekt zu erzeugen:
short s = 12;
Short wShort = new Short(s);
byte b = 20;
Byte wByte = new Byte(b);
int i=12345;
Integer wInteger = new Integer(i);
long l = 1234567;
Long wLong = new Long(l);
float f = 1.23f;
Float wFloat = new Float(f);
double d = 1.23456;
Double wDouble = new Double(d);
boolean b = true;
Boolean wBoolean = new Boolean(b);
char c = 'C';
Charakter wCharakter = new Character(c);
Es gibt noch die andere Methode um zu instanzieren, mit Ausnahme der Charakter. Diese Konstruktoren akzeptieren Strings.
Alle numerischen Wrapperklassen können NumberFormatException erzeugen, deshalb müssen diese Exceptions abgefangen werden.
Boolean wBoolean = new Boolean(true"); try { Byte wByte = new Byte("20"); Short wShort = new Short("12"); Integer wInteger = new Integer("12345"); Long wLong = new Long("1234567"); Float wFloat = new Float("1.23f"); Double wDouble = new Double("1.23456"); } catch (NumberFormatException e) { System.out.println("Falsches Format"); }Um zwei Objekte auf Gleichheit zu überprüfen, kann die Methode equals() benutzt werden.
Double d1 = new Double(1.2345); Double d2 = new Double(2.3456); if (d1.equals(d2)) { System.out.println("Die Zahlen sind gleich"); }equals() liefert false, wenn ein Float mit Double verglichen wird, auch wenn beide Klassen den gleichen Wert haben.
Um den Wert des Objekts abzufragen, benutzt man die Methoden mit der Namenserweiterung Value:
public boolean booleanValue()
public char charValue()
public byte byteValue()
public short shortValue()
public int intValue()
public long longValue()
public float floatValue()
public double doubleValue()
Genauso gibt es die überladene Methode toString(), die den internen Wert als String ausgibt.
Ferner gibt es in den Klassen Integer und Long Methoden, die die Werte in verschiedene Zahlenformate umwandeln.:
public static String toBinarystring() - Binärzahlen
public static String toOctalString() - Oktalzahlen
public static String toHexString() - hexadezimale Zahlen
Die Methode valueOf() parst den Eingabestring und gibt eine neue Instanz der entsprechenden Wrapperklasse zurück (ausser Character).
public static Integer valueOf(String s)
Die parse-Methoden geben nach Parsen eines Strings den entsprechenden primitiven Datentyp zurück.
public static byte parseByte(String s) throws NumberFormatException
public static short parseShort(String s) throws NumberFormatException
public static int parseInt(String s) throws NumberFormatException
public static long parseLong(String s) throws NumberFormatException
public static float parseFloat(String s) throws NumberFormatException
public static double parseDouble(String s) throws NumberFormatException
Zusätzlich gibt es bei Boolean, Integer und Long die Methoden getXXX(). Sie geben den Wert einer benannten Eigenschaft zurück. Als Eingabeparameter akzeptieren sie den Namen der Systemeigenschaft.
public static Boolean getBoolean(String s);
public static Integer getInteger(String s);
public static Long getLong(String s);