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().

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:

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.

nach oben

Describe the significance of the immutability of String objects.

String
In 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: Wenn man zwei neue Stringobjekte direkt erzeugt, ohne den new()-Operator zu benutzen, so wird nur ein Objekt erzeugt. Beispiel:
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

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: Folgende Methoden sind in der Klasse StringBuffer enthalten: StringBuffer-Methoden Bei den Methoden append() bzw. insert() gibt es alternative Varianten, wo verschiedene Primitivtypen als Argument übergeben werden können. Hierbei werden diese Argumente in Strings umgewandelt und danach angehängt bzw. eingefügt.
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.

nach oben

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);
Valid XHTML 1.1! Valid CSS!