Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Es gibt Klassen, die mit der Entwicklungsumgebung ausgeliefert werden

Ähnliche Präsentationen


Präsentation zum Thema: "Es gibt Klassen, die mit der Entwicklungsumgebung ausgeliefert werden"—  Präsentation transkript:

1 Es gibt Klassen, die mit der Entwicklungsumgebung ausgeliefert werden
Es gibt Klassen, die mit der Entwicklungsumgebung ausgeliefert werden. Eine davon ist die Klasse:

2 Math

3 Die Klasse Math besitzt Klassenmethoden und Klassenvariablen, wie z. B
Die Klasse Math besitzt Klassenmethoden und Klassenvariablen, wie z.B. die Klassenmethoden:

4 Liefert eine Zufallszahl zwischen 0 und 1: Math
Liefert eine Zufallszahl zwischen 0 und 1: Math.random() Die Sinusfunktion: Math.sin(...) Die Kosinusfunktion: Math.cos(...)

5 Und die Klassenvariablen (besser Konstanten):

6 Kreiszahl  public static final double PI 3. 14
Kreiszahl  public static final double PI Eulersche Zahl public static final double E

7 Math.PI bzw. Math.E wird dann darauf zugegriffen.

8 Realisierung eigener Konstanten mit Java

9 Bemerkungen: Eine Konstante ist eine Variable, der nur genau einmal ein Wert zugewiesen werden darf. Sie hat den Bezeichner final. Vergleich: Eine CD, die nur genau einmal beschrieben werden kann.

10 Eine Konstante kann man als eine schreibgeschützte Variable auffassen
Eine Konstante kann man als eine schreibgeschützte Variable auffassen. (Deswegen ist sie im eigentlichen Sinne des Worts keine Variable mehr).

11 Eine Konstante kann sich auf ein Objekt beziehen (Objektkonstante), auf eine ganze Klasse (Klassenkonstante mit static), auf eine Methode, auf einen formalen Parameter oder eine lokale Konstante

12 Zuerst eine einfache Klasse, die wir später noch brauchen:

13 class Hauptstadt{ private String stadtname; public Hauptstadt(){ } public String getStadtname() { return stadtname; } public void setStadtname(String stadtname) { this.stadtname = stadtname; } }

14 Jetzt zu den Konstanten

15 Objektkonstante: gelten spezifisch für jedes Objekt, das nach dem Bauplan der Klasse angelegt wird.
class Land{ public final double kurs; public final double sinnlos = 123; public final Hauptstadt metropole = new Hauptstadt(); public Land(final double waehrungskurs){ //waehrungskurs = waehrungskurs *1.19; this.kurs=waehrungskurs; } } class Zahlenkonstanten { public static final double PI = 3.14; }

16 Welchen Wert hat jede Konstante sinnlos innerhalb jedes Objekts?
class Land{ public final double kurs; public final double sinnlos = 123; public final Hauptstadt metropole = new Hauptstadt(); public Land(final double waehrungskurs){ //waehrungskurs = waehrungskurs *1.19; this.kurs=waehrungskurs; } } class Zahlenkonstanten { public static final double PI = 3.14; } Welchen Wert hat jede Konstante sinnlos innerhalb jedes Objekts? 123 Wie könnte man dies auch anders realisieren?

17 Mit einer Klassenkonstanten (ähnlich wie z.B. bei PI, siehe unten)
class Land{ public final double kurs; public final double sinnlos = 123; public final Hauptstadt metropole = new Hauptstadt(); public Land(final double waehrungskurs){ //waehrungskurs = waehrungskurs *1.19; this.kurs=waehrungskurs; } } class Zahlenkonstanten { public static final double PI = 3.14; } Mit einer Klassenkonstanten (ähnlich wie z.B. bei PI, siehe unten) Da die Konstante sinnlos für jedes Objekt den gleichen Wert hat, ist es nicht besonders sinnvoll, dies durch eine Objektkonstante zu realisieren.

18 Hat die Objektkonstante kurs für jedes Objekt den gleichen Wert?
class Land{ public final double kurs; public final double sinnlos = 123; public final Hauptstadt metropole = new Hauptstadt(); public Land(final double waehrungskurs){ //waehrungskurs = waehrungskurs *1.19; this.kurs=waehrungskurs; } } class Zahlenkonstanten { public static final double PI = 3.14; } Hat die Objektkonstante kurs für jedes Objekt den gleichen Wert? Nein, der spezifische Wert kann durch den Parameter des Konstruktors festgelegt werden.

19 Hat die Objektkonstante metropole für jedes Objekt den gleichen Wert?
class Land{ public final double kurs; public final double sinnlos = 123; public final Hauptstadt metropole = new Hauptstadt(); public Land(final double waehrungskurs){ //waehrungskurs = waehrungskurs *1.19; this.kurs=waehrungskurs; } } class Zahlenkonstanten { public static final double PI = 3.14; } Hat die Objektkonstante metropole für jedes Objekt den gleichen Wert? Nein, der spezifische Wert ist ein Verweis auf jeweils ein neues (mit new angelegtes) Objekt.

20 waehrungskurs = waehrungskurs *1.19;
class Land{ public final double kurs; public final double sinnlos = 123; public final Hauptstadt metropole = new Hauptstadt(); public Land(final double waehrungskurs){ //waehrungskurs = waehrungskurs *1.19; this.kurs=waehrungskurs; } } class Zahlenkonstanten { public static final double PI = 3.14; } Die lokale Konstante waehrungskurs verhindert, daß der Wert der Variable waehrungskurs innerhalb der Methode z.B. durch: waehrungskurs = waehrungskurs *1.19; verändert werden kann.

21 class Land{ public final double kurs; public final double sinnlos = 123; public final Hauptstadt metropole = new Hauptstadt(); public Land(final double waehrungskurs){ //waehrungskurs = waehrungskurs *1.19; this.kurs=waehrungskurs; } } class Zahlenkonstanten { public static final double PI = 3.14; } Die Klassenkonstante PI hat unabhängig von irgendeinem Objekt immer den gleichen Wert 3.14 Deswegen muss kein Objekt erzeugt werden, um diese Konstante verwenden zu können.

22 class Land{ public final double kurs; public final double sinnlos = 123; public final Hauptstadt metropole = new Hauptstadt(); public Land(final double waehrungskurs){ //waehrungskurs = waehrungskurs *1.19; this.kurs=waehrungskurs; } } class Zahlenkonstanten { public static final double PI = 3.14; } Die Java-Gemeinde schreibt alle Klassenkonstanten durchgehend groß. Über die Schreibweise aller anderen Konstanten gibt es keine einheitliche Regelung (dem Compiler ist das sowieso alles egal).

23 Was wird auf dem Bildschirm ausgegeben?
package konstante2; public class StartklasseKonstante2 { public static void main(String[] args) { final int kl1 = 10; System.out.println("lokaleKonst.="+kl1); System.out.println("Klassenkonstante PI= " Zahlenkonstanten.PI); Land holland=new Land(12.0); System.out.println("lokaleKonstante= " holland.kurs); } } Was wird auf dem Bildschirm ausgegeben?

24 package konstante2; public class StartklasseKonstante2 { public static void main(String[] args) { final int kl1 = 10; System.out.println("lokaleKonst.="+kl1); System.out.println("Klassenkonstante PI= " Zahlenkonstanten.PI); Land holland=new Land(12.0); System.out.println("lokaleKonstante= " holland.kurs); } } lokaleKonst.=10 Klassenkonstante PI=3.14 lokaleKonstante=12.0

25 Gleich etwas zum Nachdenken ... (Tipp: An die Konstruktoren denken)

26 Der Konstruktor sieht dann so aus:
class Land{ public final double kurs=0; public Land(final double waehrungskurs){ this.kurs=waehrungskurs; } } Weil der Compiler die Initialisierung des Attributs kurs EIGENMÄCHTIG in den Konstruktor (als 1. Zeile) einfügt. Der Konstruktor sieht dann so aus: Warum beklagt sich hier der Compiler?

27 Der Konstruktor sieht dann so aus:
class Land{ public final double kurs=0; public Land(final double waehrungskurs){ this.kurs=waehrungskurs; } } Weil der Compiler die Initialisierung des Attributs kurs EIGENMÄCHTIG in den Konstruktor (als 1. Zeile) einfügt. Der Konstruktor sieht dann so aus: Warum gibt es jetzt Probleme im Konstruktor? Warum beklagt sich hier der Compiler? public Land(final double waehrungskurs){ this.kurs=0; this.kurs=waehrungskurs; Obwohl das Attribut eine Konstante ist (und damit nur einmal beschrieben werden darf) wird jetzt versucht, es zweimal zu beschreiben.

28 Ein weiterer Vorteil von Konstanten ...

29 Wenn man z.B. zwei Konstanten wie SCHWARZ und WEISS durch die Zahlen 1 bzw. 2 definiert, dann könnte ein Programmierer im Programm z.B. statt dieser Konstanten SCHWARZ bzw. WEISS die Zahlen 1 und 2 verwenden. Wenn er kein gutes Gedächtnis hat, führt dies zu Verwechslungen (er könnte auch noch andere Zahlen wie z.B. 5 probieren..) Will man dies ausschließen, kann man dies wie folgt erreichen:

30 Warum sollen dies die einzigen zugelassenen Farben sein?
class FarbKonstanten{ public static final FarbKonstanten WEISS = new FarbKonstanten(); public static final FarbKonstanten SCHWARZ = new FarbKonstanten(); private FarbKonstanten(){ } } Warum sollen dies die einzigen zugelassenen Farben sein? Ein Programmierer könnte nach dem Klassenplan wie folgt neue Farben basteln...

31 Warum geht dies nicht? (Compiler meckert!)
class FarbKonstanten{ public static final FarbKonstanten WEISS = new FarbKonstanten(); public static final FarbKonstanten SCHWARZ = new FarbKonstanten(); private FarbKonstanten(){ } } class Startklasse{ public static final FarbKonstanten ROT = new FarbKonstanten(); public static void main(String[] args) { final FarbKonstanten BLAU = new FarbKonstanten(); } } Warum geht dies nicht? (Compiler meckert!)

32 Dies geht aber nicht, da der Konstruktor private ist !
class FarbKonstanten{ public static final FarbKonstanten WEISS = new FarbKonstanten(); public static final FarbKonstanten SCHWARZ = new FarbKonstanten(); private FarbKonstanten(){ } } class Startklasse{ public static final FarbKonstanten ROT = new FarbKonstanten(); public static void main(String[] args) { final FarbKonstanten BLAU = new FarbKonstanten(); } } Dies geht aber nicht, da der Konstruktor private ist !

33 Dies geht aber nicht, da der Konstruktor private ist !
class FarbKonstanten{ public static final FarbKonstanten WEISS = new FarbKonstanten(); public static final FarbKonstanten SCHWARZ = new FarbKonstanten(); private FarbKonstanten(){ } } class Startklasse{ public static final FarbKonstanten ROT = new FarbKonstanten(); public static void main(String[] args) { final FarbKonstanten BLAU = new FarbKonstanten(); } } Dies geht aber nicht, da der Konstruktor private ist !


Herunterladen ppt "Es gibt Klassen, die mit der Entwicklungsumgebung ausgeliefert werden"

Ähnliche Präsentationen


Google-Anzeigen