Notizen

Werbung
int x = 1;
int y = 2;
int *ip; // ip is Pointer to int
ip = &x;
y = *ip;
*ip = 0;
ip = &y;
J2SE 5.0 – Aufzähldatentypen
(These 2) Java 1.5 führt Aufzähldatentypen ein
●
●
●
typsicher
ähnlich einer Klassendefinition (keine Ober-/Unterklassen)
erlauben auch Methoden und Variablen
public class Farbe {
public final static int BLACK = 0;
public final static int WHITE = 1;
public final static int RED = 2;
}
....
int farbe = Farbe.BLACK;
enum Farbe {
black, white, red, green
}
...
Farbe f = Farbe.black;
J2SE 5.0 – “Generics”
(These 3) Java 1.5 ermöglicht auch generische Klassen:
kein Type-Casting mehr bei der Benutzung von Collections
Buch b1 = new Buch(“Titel”);
Buch b = new Buch(“Titel”);
ArrayList list = new ArrayList(); ArrayList<Buch> list =
list.add(0, b);
new ArrayList<Buch>();
list.add(0,b);
Buch b2 = (Buch)list.get(0);
Buch b2 = list.get(0);
J2SE 5.0 – “Generics”
(These 3) Java 1.5 ermöglicht auch generische Klassen:
typsichere Collections
Buch b = new Buch(“Titel”);
Auto a = new Auto(“E-TV 20”);
ArrayList list = new ArrayList();
list.add(0, a);
list.add(1, b);
list.add(2, new Integer(2));
Buch b = new Buch(“Titel”);
Auto a = new Auto(“E-TV 20”);
ArrayList<Buch> list =
new ArrayList<Buch>();
list.add(0, b);
// Fehler zur Compilezeit:
list.add(1, a);
J2SE 5.0 – “Autoboxing”
Problem: an vielen Stellen (z.B. beim Arbeiten mit Collections)
werden Objekte benötigt, aber es liegen primitive Datentypen
(z.B. int-Werte) vor
bisher: explizite Hin- und Rückkonvertierung nötig
Autoboxing beseitigt dieses Problem
ArrayList list = new ArrayList(); ArrayList<Integer> list =
new ArrayList<Integer>();
int i = 12;
int i = 12;
list.add(0, new Integer(i));
list.add(0, i);
int j = 2;
int j = 2;
j = j + (list.get(0)).intValue();
j = j + list.get(0);
J2SE 5.0 – vereinfachte Iteration
Problem: bei Iteration über die Elemente von Collections ist bisher
der Umweg über Iterator oder Enumeration nötig
Java 1.5 erlaubt einfachere Schleifen bei Benutzung von Collections
ArrayList regal =
new ArrayList();
...
for (Iterator i = list.iterator();
i.hasNext();) {
((Buch)regal.get(i)).print();
}
ArrayList<Buch> regal =
new ArrayList<Buch>();
...
for (Buch b : regal) {
b.print();
}
TYPE personentyp : ( student, dozent );
TYPE uniperson = RECORD
name : STRING
alter : INTEGER;
CASE typ : personentyp OF
student : (matrikelnr : INTEGER );
dozent : (personalnr, telefon, raum : INTEGER );
END; { case }
END;
class Ueberladen {
private int wert;
Ueberladen() {wert=0;}
Ueberladen(int zahl) {wert = zahl;}
int addiere(int summand) { wert += summand; return wert;}
int addiere(int summand, int mehrmals) {
wert = (wert+summand)*mehrmals; ; return wert;
}
int addiere(Ueberladen summand) {
wert += summand.wert; return wert;
}
int gibWert() {return wert;}
}
class UeberladenTest{
public static void main(String[] args){
Ueberladen u1 = new Ueberladen();
Ueberladen u2 = new Ueberladen(42);
System.out.println(u1.addiere(21));
System.out.println(u2.addiere(u1));
System.out.println(u1.addiere(10,2));
u1.addiere(1);
System.out.println(u1.gibWert());
}
}
J2SE 5.0 – “Varargs”
(These 5) Java 1.5 ermöglicht nun auch variable Argumentlisten
int addiere (int a, int b) {
return (a+b);
}
int addiere (int a, int b, int c) {
return (a+b+c);
}
...
int addiere (int ... args) {
int wert = 0;
for (int i : args) {
wert += i;
}
return wert;
}
int i = 0;
int j = 0;
marke 1:
i++;
j = 0;
marke2:
j++;
if (j < 10) goto marke2;
if (i < 10) goto marke1;
J2SE 5.0 – statischer Import
mit Vorsicht zu genießen:
Import statischer Variablen aus anderen Klassen in den
Namensraum der aktuellen Klasse
import java.awt.BorderLayout;
...
getContentPane().add(
new JButton(“Play”),
BorderLayout.CENTER);
import static
java.awt.BorderLayout.*;
...
getContentPane().add(
new Jbutton(“Play”),
CENTER);
Herunterladen