23
Java Einführung Objekt-Datentypen und Strings Kapitel 8 und 9

Java Einführung Objekt-Datentypen und Strings · Grundzüge der Programmierung - Hahsler 2 Inhalt • Was sind Objekt-Datentypen • Sonderheiten bei Zuweisung und Vergleich •

Embed Size (px)

Citation preview

Page 1: Java Einführung Objekt-Datentypen und Strings · Grundzüge der Programmierung - Hahsler 2 Inhalt • Was sind Objekt-Datentypen • Sonderheiten bei Zuweisung und Vergleich •

Java EinführungObjekt-Datentypen

und StringsKapitel 8 und 9

Page 2: Java Einführung Objekt-Datentypen und Strings · Grundzüge der Programmierung - Hahsler 2 Inhalt • Was sind Objekt-Datentypen • Sonderheiten bei Zuweisung und Vergleich •

2Grundzüge der Programmierung - Hahsler

Inhalt• Was sind Objekt-Datentypen

• Sonderheiten bei Zuweisung und Vergleich

• Zeichenketten (Strings)• Zeichencodes• Char, Char-Arrays und Strings• String-Operationen• String-Konversion

Page 3: Java Einführung Objekt-Datentypen und Strings · Grundzüge der Programmierung - Hahsler 2 Inhalt • Was sind Objekt-Datentypen • Sonderheiten bei Zuweisung und Vergleich •

3Grundzüge der Programmierung - Hahsler

Objekt-Datentyp• Jede Klasse in Java stellt einen sogenannten

Objektdaten-Typ (Benuzerdefinierter Datentyp) dar.

• Die Instanzen verhalten sich meist wie primitive Datentypen, es gibt jedoch wichtige Unterschiede!

Page 4: Java Einführung Objekt-Datentypen und Strings · Grundzüge der Programmierung - Hahsler 2 Inhalt • Was sind Objekt-Datentypen • Sonderheiten bei Zuweisung und Vergleich •

4Grundzüge der Programmierung - Hahsler

Bsp: Date class Date {int day;String month;int year;

}

Date

int dayString monthint year

Date kann nach der Deklaration wie ein Datentyp verwendet werden.

Page 5: Java Einführung Objekt-Datentypen und Strings · Grundzüge der Programmierung - Hahsler 2 Inhalt • Was sind Objekt-Datentypen • Sonderheiten bei Zuweisung und Vergleich •

5Grundzüge der Programmierung - Hahsler

Erzeugung und Freigabe

• Deklaration und Erzeugung von InstanzenDate x, y;

x = new Date();

• Freigabe von ObjektenGarbage Collection: Sobald kein Zeiger mehr auf das Objekt zeigt (Reference Count)

x = null; // x zeigt jetzt auf nichts!

xdaymonthyear

Objekt

y

Page 6: Java Einführung Objekt-Datentypen und Strings · Grundzüge der Programmierung - Hahsler 2 Inhalt • Was sind Objekt-Datentypen • Sonderheiten bei Zuweisung und Vergleich •

6Grundzüge der Programmierung - Hahsler

Punkt-Operator• Verwendung der Klassenvariablen (Punkt-

Operator)Date x = new Date();

x.day = 13;x.month = "November";x.year = 2001;

Achtung: month ist vom Typ String und daher eigentlich ein Array.

xdaymonthyear

Objekt13November2001

Page 7: Java Einführung Objekt-Datentypen und Strings · Grundzüge der Programmierung - Hahsler 2 Inhalt • Was sind Objekt-Datentypen • Sonderheiten bei Zuweisung und Vergleich •

7Grundzüge der Programmierung - Hahsler

Zuweisung• Zuweisung von ObjektnamenDate x, y;x = new Date();

y = x;y.day = 20;

• Es wird nur die Referenz kopiert, nicht der Wert!• Zuweisung ist nur bei gleichem Datentyp

(Klassennamen) erlaubt!

xdaymonthyear

Objekt20

y

Page 8: Java Einführung Objekt-Datentypen und Strings · Grundzüge der Programmierung - Hahsler 2 Inhalt • Was sind Objekt-Datentypen • Sonderheiten bei Zuweisung und Vergleich •

8Grundzüge der Programmierung - Hahsler

VergleichDate x, y;x = new Date();y = new Date();y.day = 20; x.day = 20;

if (x==y) { System.out.println("x ist gleich y");

}

• Vergleich ergibt immer falsch, weil die Zeiger verglichen werden!

xdaymonthyear

Instanz20

y

daymonthyear

Instanz20

Page 9: Java Einführung Objekt-Datentypen und Strings · Grundzüge der Programmierung - Hahsler 2 Inhalt • Was sind Objekt-Datentypen • Sonderheiten bei Zuweisung und Vergleich •

9Grundzüge der Programmierung - Hahsler

Übergabe als ParameterDate addOneDay (Date b){b.day++;return b;

}

...

Date a = new Date(); a.day=19;

Date c = addOneDay(a); // a hat jetzt auch 20!

adaymonthyear

Instanz19 20

cb

Page 10: Java Einführung Objekt-Datentypen und Strings · Grundzüge der Programmierung - Hahsler 2 Inhalt • Was sind Objekt-Datentypen • Sonderheiten bei Zuweisung und Vergleich •

10Grundzüge der Programmierung - Hahsler

Zeichenketten in Java (Strings)

• Zeichenketten bestehen aus einzelnen Zeichen.• Diese Zeichen sind vom primitiven Datentyp char

• Zeichenketten können als Array von charerzeugt werden, oder

• als eigener Objekt-Datentyp String (ist in den Bibliotheken von Java vorhanden unter java.lang.String)

Page 11: Java Einführung Objekt-Datentypen und Strings · Grundzüge der Programmierung - Hahsler 2 Inhalt • Was sind Objekt-Datentypen • Sonderheiten bei Zuweisung und Vergleich •

11Grundzüge der Programmierung - Hahsler

Zeichenkonstanten und -codes'a', 'A', '?' ...

Zeichen werden in Java codiert als:• ASCII (American Standard Code of Information Interchange): 128

Zeichen, benutzt 7 Bit, keine Umlaute...Darstellung: Zahl (Hex oder Dezimal)

• Unicode: benutzt 2 Byte, 65536 Zeichen, ersten 128 sind identisch mit ASCII (siehe: www.unicode.org )Darstellung: \unnnn ... nnnn ist der Code in Hex

Page 12: Java Einführung Objekt-Datentypen und Strings · Grundzüge der Programmierung - Hahsler 2 Inhalt • Was sind Objekt-Datentypen • Sonderheiten bei Zuweisung und Vergleich •

12Grundzüge der Programmierung - Hahsler

Zeichenvariable (Primitiver Datentyp)

• Deklarationchar ch;

• Zuweisungch = 'a';

• Kompatibilität mit intchar ch2 = 'x';int i = ch2; // ok, Code in int-Variablech2 = (char) (i+1);

Page 13: Java Einführung Objekt-Datentypen und Strings · Grundzüge der Programmierung - Hahsler 2 Inhalt • Was sind Objekt-Datentypen • Sonderheiten bei Zuweisung und Vergleich •

13Grundzüge der Programmierung - Hahsler

Standardfunktionen für Zeichen

• Auswahl von Java-Bibliothek Standardfunktionen:

if (Character.isLetter(ch)) ... // Unicode?

if (Character.isDigit(ch)) ... // Digit?

ch=Character.toUpperCase(ch); // Großch=Character.toLowerCase(ch); // Klein

siehe: java.lang.Character

Page 14: Java Einführung Objekt-Datentypen und Strings · Grundzüge der Programmierung - Hahsler 2 Inhalt • Was sind Objekt-Datentypen • Sonderheiten bei Zuweisung und Vergleich •

14Grundzüge der Programmierung - Hahsler

char-Arrays• Eine Kette von Zeichen. Deklaration:char[] s1 = new char[20];char[] s2 = {'a','b','c'};

• Zugriff auf einzelne Zeichen:s2[1]='x'; // ersetzt 'b' durch 'x'

Page 15: Java Einführung Objekt-Datentypen und Strings · Grundzüge der Programmierung - Hahsler 2 Inhalt • Was sind Objekt-Datentypen • Sonderheiten bei Zuweisung und Vergleich •

15Grundzüge der Programmierung - Hahsler

Strings - Zeichenketten (Objekt-Datentyp)

• Char-Arrays sind relativ umständlich zu verwenden.

• Da Zeichenketten häufig vorkommen, stellt Java einen eigenen Bibliothekstyp mit dem Namen String (in java.lang) zur Verfügung.

Page 16: Java Einführung Objekt-Datentypen und Strings · Grundzüge der Programmierung - Hahsler 2 Inhalt • Was sind Objekt-Datentypen • Sonderheiten bei Zuweisung und Vergleich •

16Grundzüge der Programmierung - Hahsler

String-Konstanten• Zeichenfolge zwischen doppelten Hochkommas

"Hello, I am a String!""Alice\t2000\nBob\t1500""Das \"-Zeichen ""Griechische Symbol (pi): \u03c0"

• Achtung: Unterschied zwischen 'x' und "x"

Page 17: Java Einführung Objekt-Datentypen und Strings · Grundzüge der Programmierung - Hahsler 2 Inhalt • Was sind Objekt-Datentypen • Sonderheiten bei Zuweisung und Vergleich •

17Grundzüge der Programmierung - Hahsler

Datentyp String• DeklarationString a, b;

• Zuweisunga = "Hallo";b = a;

• Achtung: Strings verhalten sich wie Arrays. Der Name ist nur ein Zeiger auf das "String-Objekt"

Halloa

b

Page 18: Java Einführung Objekt-Datentypen und Strings · Grundzüge der Programmierung - Hahsler 2 Inhalt • Was sind Objekt-Datentypen • Sonderheiten bei Zuweisung und Vergleich •

18Grundzüge der Programmierung - Hahsler

Verkettung von Strings• VerkettungString a = "Hallo";a = a + " Welt!"; // einfache Verkettung

• Andere Datentypen (z.Bsp: int) werden zu Stringkonvertiertint i = 12;String b = "Es ist " + i;System.out.println("i hat den Wert " + i);

Page 19: Java Einführung Objekt-Datentypen und Strings · Grundzüge der Programmierung - Hahsler 2 Inhalt • Was sind Objekt-Datentypen • Sonderheiten bei Zuweisung und Vergleich •

19Grundzüge der Programmierung - Hahsler

Vergleich von StringsString s = new String("Hallo");

if (s=="Hallo") { ... // Fehler: Referenzen werden verglichen!

if (s.equals("Hello")) { .../* die richtige Funktion (siehe: java.lang.String) */

Page 20: Java Einführung Objekt-Datentypen und Strings · Grundzüge der Programmierung - Hahsler 2 Inhalt • Was sind Objekt-Datentypen • Sonderheiten bei Zuweisung und Vergleich •

20Grundzüge der Programmierung - Hahsler

Stringoperationen• die Java-Bibliothek definiert eine Reihe nützlicher

Funktionen für Strings (siehe: java.lang.String)

String s = "a long string"; string s2;int i; char ch;

i = s.length(); // bei Arrays kein ()!

ch = s.charAt(3);i = s.indexOf("ng");s2= s.substring(2,6)if (s.startsWith("abc")) {....

Page 21: Java Einführung Objekt-Datentypen und Strings · Grundzüge der Programmierung - Hahsler 2 Inhalt • Was sind Objekt-Datentypen • Sonderheiten bei Zuweisung und Vergleich •

21Grundzüge der Programmierung - Hahsler

java.lang.StringBuffer

• Strings haben nach der Erzeugung eine fixe Länge. Zum zeichenweisen Aufbau eines Strings ist dies ungeeignet.

int i; // x kann sein char,int,float...

StringBuffer b = new StringBuffer("Hallo");

b.append("rld");

i= b.length();

b.insert(4,"o W"); // an Stelle 4 einfügen

b.delete(0,4); // Zeichen von 0-4 löschen

b.replace(1,3,"abc"); /* Zeichen 1-3 durch "abc" ersetzen */

Page 22: Java Einführung Objekt-Datentypen und Strings · Grundzüge der Programmierung - Hahsler 2 Inhalt • Was sind Objekt-Datentypen • Sonderheiten bei Zuweisung und Vergleich •

22Grundzüge der Programmierung - Hahsler

StringkonversionenOft müssen Strings in andere Datentypen

konvertiert werden oder umgekehrt:

int i = Integer.parseInt("123");float f = Float.parseFloat("3.14");

String s = String.valueOf(x);char[] a = s.toCharArray();

Page 23: Java Einführung Objekt-Datentypen und Strings · Grundzüge der Programmierung - Hahsler 2 Inhalt • Was sind Objekt-Datentypen • Sonderheiten bei Zuweisung und Vergleich •

23Grundzüge der Programmierung - Hahsler

Nach dieser Einheit sollten Sie wissen, ...

• was der Unterschied zwischen primitiven und Objekt-Datentypen ist

• wie Objekt-Datentypen erzeugt, verwendet uns als Parameter übergeben werden

• wie Strings in Java funktionieren