Zurück   Weiter

7 Einige interessante Javaklassen

7.1 Die Klassen zu den primitiven Datentypen

Die einzigen Elemente in Java die keine Objekte sind, sind die primitiven Datentypen. Um auch mit den primitiven Datentypen in Bereichen arbeiten zu können, in denen nur Objekte erlaubt sind, ist jedem ein Klasse zugeordnet. In diesen Klassen sind Konstruktoren und Methoden definiert, welche ein einfaches Umwandeln von primitiven Datentypen zu Klassen und umgekehrt ermöglichen.

Einfacher Datentyp Java-Klasse
boolean Boolean
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
public class PrimitiveTypeClasses {
  public static void main(String[] args) {
    Integer classInt = new Integer(10);
    int primitiveInt = classInt.intValue();
    double primitiveDouble = classInt.doubleValue();
    System.out.println("primitiveInt = " + primitiveInt);
    System.out.println("primitiveDouble = " + primitiveDouble);
    classInt = new Integer("15");
    primitiveInt = classInt.intValue();
    primitiveDouble = classInt.doubleValue();
    System.out.println("primitiveInt = " + primitiveInt);
    System.out.println("primitiveDouble = " + primitiveDouble);
    Boolean classBoolean = new Boolean(true);
    boolean primitiveBoolean = classBoolean.booleanValue();
    System.out.println("primitiveBoolean = " + primitiveBoolean);
    classBoolean = new Boolean("false");
    primitiveBoolean = classBoolean.booleanValue();
    System.out.println("primitiveBoolean = " + primitiveBoolean);
  }
}
Sourcefile

7.2 Die Klasse java.lang.String

Die Klasse String weist in Java ein paar Besonderheiten auf, weshalb wir sie hier besonders betrachten wollen.

  1. String-Objekte können mit dem "=" (Zuweisungsoperator) direkt zugewiesen werden. Bei allen anderen Objekten muss der Konstruktor (Konstruktoren) aufgerufen werden.
  2. String-Objekte können mit dem "+"-Operator aneinander gehängt werden. Bei allen anderen Java-Objekten sind Verknüpfungen mit Hilfe von Operatoren nicht erlaubt.

Der Text eines String-Objekts muss immer in doppelten Anführungszeichen (") angegeben werden.

  String s1 = "abc";
  String s2 = new String("abc");
  String s3 = "ab" + "cd";

7.2.1 String-Konvertierung

7.2.1.1 valueOf

Die Klasse String implementiert für jeden Datentyp die passende Methode public static String valueOf(DatenTyp value), welche zu jedem Datentyp den passenden String erzeugt. Da die Methoden als public static definiert sind, können sie ohne eine Instanz der Klasse String aufgerufen werden.

import java.awt.Point;

public class StringValueOf {
  public static void main(String[] args) {
    int x = 175;
    String s = String.valueOf(x);
    System.out.println("s = " + s);
    double y = 1.2345;
    s = String.valueOf(y);
    System.out.println("s = " + s);
    Point p = new Point(7, 9);
    s = String.valueOf(p);
    System.out.println("s = " + s);
  }
}
Sourcefile

7.2.1.2 Die Methode toString der Klasse Object

Wird an die Methode String.valueOf die Instanz einer Klasse übergeben, so wird von dieser Klasse die Methode public String toString() aufgerufen. Diese Methode ist in der Klasse java.lang.Object definiert. Da die Klasse java.lang.Object die Superklasse aller Java-Klassen ist, so besitzt jede Java-Klasse diese Methode. Möchte man nun bei einer selbst definierten Klasse eine spezielle String-Darstellung definieren, so muss man die Methode public String toString() überschreiben.
Point15.java

package graphic;

public class Point15 {
  int xPosition = 0;
  int yPosition = 0;

  public Point15() {
    this(0, 0);
  }

  public Point15(int xPos, int yPos) {
    moveTo(xPos, yPos);
  }

  public int getXPosition() {
    return xPosition;
  }

  public int getYPosition() {
    return yPosition;
  }

  public void moveTo(int xPosition, int yPosition) {
    this.xPosition = xPosition;
    this.yPosition = yPosition;
  }

  public String toString() {
    String result = "Point15: x = " + xPosition + ", y = " + yPosition;
    return result;
  }
}

Sourcefile

Line5.java

package graphic;

public class Line5 {
  private Point15 start;
  private Point15 end;

  public Line5(Point15 p1, Point15 p2) {
    start = p1;
    end = p2;
  }

  public void paint() {
    int minY;
    int maxY;
    if(start.getYPosition() > end .getYPosition()) {
      minY = end.getYPosition();
      maxY = start.getYPosition();
    } else {
      minY = start.getYPosition();
      maxY = end.getYPosition();
    }
    double m = (end.getYPosition() - start.getYPosition()) /
               (double)(end.getXPosition() - start.getXPosition());
    double b = -m * end.getXPosition() + end.getYPosition();
    for(int i = 0; i < minY; i++) {
      System.out.println();
    }
    for(int i = minY; i <= maxY; i++) {
      int xPos = (int)Math.round(1/m * (i - b));
      for(int j = 0; j < xPos; j++) {
        System.out.print(" ");
      }
      System.out.println("x");
    }
  }

  public String toString() {
    String result = "Line5: start = " + start.toString() +
                    ", end = " + end.toString();
    return result;
  }
}

Sourcefile

7.2.1.3 valueOf und System.out.println

Wie wir schon gesehen haben, können bei der Ausgabe von Informationen mit der Methode System.out.println direkt Variablennamen angegeben werden. Bei der Umwandlung der Variablen in einen String, wird die Methode String.valueOf mit der Variablen als Parameter aufgerufen. Diese Methode ruft, wie oben beschrieben, die Methode public String toString() auf, wenn der Variablenname auf ein Objekt verweist. So kann man mit dem Aufruf von System.out.println die Informationen über den Zustand eines eigenen Objektes ausgeben, wenn man die Methode toString geeignet überschrieben hat.
Paint9.java

package programs;

import graphic.Line5;
import graphic.Point15;

class Paint9 {
  public static void main(String[] args) {
    Point15 p1 = new Point15(1, 3);
    Point15 p2 = new Point15(8, 10);
    Line5 graph = new Line5(p1, p2);
    graph.paint();
    p2.moveTo(7, 1);
    graph.paint();
    System.out.println(graph);
  }
}
Sourcefile

Aufgabe 19

7.2.2 Weitere Methoden der Klasse String

Die Klasse String besitzt noch einige weitere nützliche Methoden, von denen einige hier aufgeführt werden. Es muss beachtet werden, das bei allen String verändernden Methoden eine neue Stringinstanz zurückgegeben wird und die aufrufende Instanz nicht verändert wird.

7.2.2.1 length

Die Methode public int length() gibt die Anzahl der im String enthaltenen Zeichen zurück.

7.2.2.2 charAt

public char charAt(int index) liefert das Zeichen an der Stelle index zurück. Der Index beginnt bei einem String mit der '0'.

7.2.2.3 indexOf

Von dieser Methode gibt es 4 Implementierungen:

7.2.2.4 lastIndexOf

Von dieser Methode gibt es 4 Implementierungen:

7.2.2.5 startsWith

public boolean startsWith(String str) liefert den Wert true zurück, wenn die aufrufende String-Instanz mit dem String str beginnt.

7.2.2.6 endsWith

public boolean endsWith(String str) liefert den Wert true zurück, wenn die aufrufende String-Instanz mit dem String str endet.

7.2.2.7 toUpperCase

public String toUpperCase() wandelt alle Kleinbuchstaben der aufrufenden String-Instanz in Grossbuchstaben um und liefert den umgewandelten String als neue Instanz zurück.

7.2.2.8 toLowerCase

public String toLowerCase() wandelt alle Grossbuchstaben der aufrufenden String-Instanz in Kleinbuchstaben um und liefert den umgewandelten String als neue Instanz zurück.

7.2.2.9 trim

public String trim() entfernt alle Leerzeichen am Beginn und am Ende der aufrufende String-Instanz und liefert das Ergebnis als neue String-Instanz zurück.

7.2.2.10 substring

Von dieser Methode gibt es 2 Implementierungen. Beide liefern einen Teilstring der aufrufenden String-Instanz zurück.

7.3 Die Klasse java.lang.StringBuffer

Die Klasse StringBuffer ist eine veränderbare Sequenz von Charactern. Sie ist wie ein String, aber veränderbar. Während bei einem String bei jeder Zuweisung und Veränderung eine neue Instanz erzeugt wird, kann beim StringBuffer die Länge und der Inhalt einer Instanz direkt verändert werden. Zudem kann die Länge des eines StringBuffer bereits mit dem Konstruktor festgelegt werden. Dies hat vor allem bei sehr viel ändernden Strings den Vorteil, dass nur beim ersten Initialisieren Speicherbereich reserviert werden muss. Für jede weitere Aktion wird der zu Beginn reservierte Speicherbereich benutzt. Die Verwendung des StringBuffer ist somit sehr viel weniger Zeit intensiv als die Verwendung der Klasse String.

7.3.1 Methoden der Klasse StringBuffer

7.3.1.1 append

Für alle primitiven Datentypen und für die Klasse java.lang.Object ist im StringBuffer eine public StringBuffer append(...)-Methode definiert. Diese Methode ruft die Methode String.valueOf auf und hängt den so erhaltenen String an den StringBuffer an. Diese Methode wird immer dann verwendet, wenn mit dem "+"-Operator Strings verknüpft werden. append gibt die Referenz auf den geänderten StringBuffer an die aufrufende Instanz zurück.

7.3.1.2 delete

public StringBuffer delete(int start, int end) löscht alle Zeichen zwischen der Position start und der Position end aus dem StringBuffer heraus und gibt eine Verweis auf den geänderten StringBuffer zurück.

7.3.1.3 insert

public StringBuffer insert(int offset, ...) fügt die String-Darstellung eines beliebigen Datentyps an der Stelle offset in den vorhandenen StringBuffer ein und gibt diesen zurück. Hierzu wird die Methode String.valueOf verwendet.

7.3.1.4 replace

public StringBuffer replace(int start, int end, String str) ersetzt den Substring von der Position start bis zur Position end durch den String str und gibt die Instanz zurück.

7.4 Die Klasse java.util.StringTokenizer

Mit Hilfe der Klasse java.util.StringTokenizer können Strings mit Hilfe von Trennzeichen in Teilstrings getrennt werden. Das Ende des Strings wird in jedem Fall als Trennzeichen gewertet.

7.4.1 Konstruktoren der Klasse StringTokenizer

7.4.1.1 StringTokenizer(String str)

Diesem Konstruktor wird nur der aufzutrennende String mitgegeben. Als Trennzeichen werden in diesem Fall Leerzeichen(' '), Tabulator('\t'), Newline('\n'), Carriage Return('\r') und Formfeed(\f) verwendet.

7.4.1.2 StringTokenizer(String str, String delim)

Mit diesem Konstruktor wird ein StringTokenizer erzeugt, bei dem die Trennzeichen vom Anwender definiert werden. Jedes einzelne Zeichen des 'delim'-Strings wird als Trennzeichen verwendet. Folgen in dem zu trennenden String meherere Trennzeichen aufeinander, so werden diese wie ein einzelnes Trennzeichen behandelt. Dies bedeutet auch, dass nicht jedes Trennzeichen auch einen Teil-String erzeugt.

7.4.1.3 StringTokenizer(String str, String delim, boolean returnDelims)

Mit dem zusätzlichen boolean Parameter dieses Konstruktors wird festgelegt ob die Trennzeichen mit dem Teil-String zurückgegeben werden. Wird der Wert true übergeben, so ergibt sich, dass für jedes Trennzeichen ein Teil-String erzeugt wird. Bei direkt aufeinander folgenden Trennzeichen besteht dieser nur aus dem Trennzeichen.

7.4.2 Methoden der Klasse StringTokenizer

7.4.2.1 hasMoreTokens

Die Methode hasMoreTokens() zeigt an, ob im zu bearbeitenden String noch weitere Teil-Strings vorhanden sind.

7.4.2.2 countTokens

Mit countTokens() erhält man die Anzahl, der im zu berabeitenden String enthaltenen Trennzeichen. Wenn im Konstruktor der Wert für die Rückgabe der Trennzeichen auf true gesetzt wurde, so entspricht dies der Anzahl der zu erwartenden Teil-Strings.

7.4.2.3 nextToken

Mit der Methode nextToken() erhält man den nächsten Teil-String. Je nachdem, wie im Konstruktor die Rückgabe der Trennzeichen festgelegt wurde, ist das Trennzeichen am Ende des Teil-Strings enthalten oder nicht.

Beispiel einfügen.

7.5 Die Klassen java.util.Vector/java.util.ArrayList

Die Klassen java.util.Vector und java.util.ArrayList sind indizierte Listen, deren Grösse sich dynamisch an die Erfordernisse anpassen kann. Einem Vector oder einer ArrayList können Elemente hinzugefügt werden, auch wenn die eigentliche Grösse der Liste bereits erreicht ist. In diesem Fall wird die Liste um eine vorher definierte Anzahl von Elementen erweitert.

7.5.1 Konstruktoren

7.5.2 Methoden der Klasse Vector

7.5.2.1 addElement, add

7.5.2.2 insertElementAt

7.5.2.3 elementAt, get

7.5.2.4 removeElement, remove

7.5.2.5 removeElementAt, remove

7.5.2.6 toArray, copyInto

7.6 Die Klasse java.util.Hashtable

Hashtable

7.6.1 Methoden der Klasse Hashtable

7.6.1.1 put

7.6.1.2 get

7.7 Die Klasse java.util.Arrays

Arrays

7.7.1 Methoden der Klasse Arrays

7.7.1.1 asList

7.7.1.2 sort

Created with Vim Zurück   Weiter