Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort
1 Java ist auch eine Sprache
2 Sprachbeschreibung
3 Klassen und Objekte
4 Der Umgang mit Zeichenketten
5 Mathematisches
6 Eigene Klassen schreiben
7 Angewandte Objektorientierung
8 Exceptions
9 Generics, innere Klassen
10 Die Klassenbibliothek
11 Threads und nebenläufige Programmierung
12 Datenstrukturen und Algorithmen
13 Raum und Zeit
14 Dateien und Datenströme
15 Die eXtensible Markup Language (XML)
16 Grafische Oberflächen mit Swing
17 Grafikprogrammierung
18 Netzwerkprogrammierung
19 Verteilte Programmierung mit RMI und Web–Services
20 JavaServer Pages und Servlets
21 Applets
22 Midlets und die Java ME
23 Datenbankmanagement mit JDBC
24 Reflection und Annotationen
25 Logging und Monitoring
26 Sicherheitskonzepte
27 Java Native Interface (JNI)
28 Dienstprogramme für die Java-Umgebung
Stichwort

Download:
- ZIP, ca. 14,1 MB
Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Java ist auch eine Insel (8. Auflage) von Christian Ullenboom
Programmieren mit der Java Standard Edition Version 6
Buch: Java ist auch eine Insel (8. Auflage)

Java ist auch eine Insel (8. Aufl.)
8., aktual. Auflage, geb., mit DVD
1.475 S., 49,90 Euro
Galileo Computing
ISBN 978-3-8362-1371-4
Pfeil 6 Eigene Klassen schreiben
Pfeil 6.1 Eigene Klassen mit Eigenschaften deklarieren
Pfeil 6.1.1 Attribute deklarieren
Pfeil 6.1.2 Methoden deklarieren
Pfeil 6.1.3 Die this-Referenz
Pfeil 6.2 Privatsphäre und Sichtbarkeit
Pfeil 6.2.1 Für die Öffentlichkeit: public
Pfeil 6.2.2 Kein Public Viewing – Passwörter sind privat
Pfeil 6.2.3 Wieso nicht freie Methoden und Variablen für alle?
Pfeil 6.2.4 Privat ist nicht ganz privat: Es kommt darauf an, wer’s sieht
Pfeil 6.2.5 Zugriffsmethoden für Attribute deklarieren
Pfeil 6.2.6 Setter und Getter nach der JavaBeans-Spezifikation
Pfeil 6.2.7 Paketsichtbar
Pfeil 6.2.8 Zusammenfassung zur Sichtbarkeit
Pfeil 6.3 Statische Methoden und statische Attribute
Pfeil 6.3.1 Warum statische Eigenschaften sinnvoll sind
Pfeil 6.3.2 Statische Eigenschaften mit static
Pfeil 6.3.3 Statische Eigenschaften über Referenzen nutzen?
Pfeil 6.3.4 Warum die Groß- und Kleinschreibung wichtig ist
Pfeil 6.3.5 Statische Variablen zum Datenaustausch
Pfeil 6.3.6 Statische Eigenschaften und Objekteigenschaften
Pfeil 6.4 Konstanten und Aufzählungen
Pfeil 6.4.1 Konstanten über öffentliche statische finale Variablen
Pfeil 6.4.2 Eincompilierte Belegungen der Klassenvariablen
Pfeil 6.4.3 Typ(un)sichere Aufzählungen
Pfeil 6.4.4 Aufzählungen mit enum
Pfeil 6.5 Objekte anlegen und zerstören
Pfeil 6.5.1 Konstruktoren schreiben
Pfeil 6.5.2 Der Default-Konstruktor
Pfeil 6.5.3 Parametrisierte und überladene Konstruktoren
Pfeil 6.5.4 Copy-Konstruktor
Pfeil 6.5.5 Einen anderen Konstruktor der gleichen Klasse aufrufen
Pfeil 6.5.6 Ihr fehlt uns nicht – der Garbage-Collector
Pfeil 6.5.7 Private Konstruktoren, Utility-Klassen, Singleton, Fabriken
Pfeil 6.6 Klassen- und Objektinitialisierung
Pfeil 6.6.1 Initialisierung von Objektvariablen
Pfeil 6.6.2 Statische Blöcke als Klasseninitialisierer
Pfeil 6.6.3 Initialisierung von Klassenvariablen
Pfeil 6.6.4 Exemplarinitialisierer (Instanzinitialisierer)
Pfeil 6.6.5 Finale Werte im Konstruktor und in statischen Blöcken setzen
Pfeil 6.7 Assoziationen zwischen Objekten
Pfeil 6.7.1 Unidirektionale 1:1-Beziehung
Pfeil 6.7.2 Bidirektionale 1:1-Beziehungen
Pfeil 6.7.3 Unidirektionale 1:n-Beziehung
Pfeil 6.8 Vererbung
Pfeil 6.8.1 Vererbung in Java
Pfeil 6.8.2 Spielobjekte modelliert
Pfeil 6.8.3 Implizite Basisklasse java.lang.Object
Pfeil 6.8.4 Einfach- und Mehrfachvererbung
Pfeil 6.8.5 Sichtbarkeit protected
Pfeil 6.8.6 Konstruktoren in der Vererbung und super
Pfeil 6.9 Typen in Hierarchien
Pfeil 6.9.1 Automatische und explizite Typanpassung
Pfeil 6.9.2 Das Substitutionsprinzip
Pfeil 6.9.3 Typen mit dem binären Operator instanceof testen
Pfeil 6.10 Methoden überschreiben
Pfeil 6.10.1 Methoden in Unterklassen mit neuem Verhalten ausstatten
Pfeil 6.10.2 Mit super an die Eltern
Pfeil 6.10.3 Finale Klassen und finale Methoden
Pfeil 6.10.4 Kovariante Rückgabetypen
Pfeil 6.10.5 Array-Typen und Kovarianz
Pfeil 6.11 Dynamisches Binden/Polymorphie
Pfeil 6.11.1 Unpolymorph bei privaten, statischen und finalen Methoden
Pfeil 6.11.2 Polymorphie bei Konstruktoraufrufen
Pfeil 6.12 Abstrakte Klassen und abstrakte Methoden
Pfeil 6.12.1 Abstrakte Klassen
Pfeil 6.12.2 Abstrakte Methoden
Pfeil 6.13 Schnittstellen
Pfeil 6.13.1 Deklarieren von Schnittstellen
Pfeil 6.13.2 Implementieren von Schnittstellen
Pfeil 6.13.3 Markierungsschnittstellen
Pfeil 6.13.4 Ein Polymorphie-Beispiel mit Schnittstellen
Pfeil 6.13.5 Die Mehrfachvererbung bei Schnittstellen
Pfeil 6.13.6 Keine Kollisionsgefahr bei Mehrfachvererbung
Pfeil 6.13.7 Erweitern von Interfaces – Subinterfaces
Pfeil 6.13.8 Vererbte Konstanten bei Schnittstellen
Pfeil 6.13.9 Abstrakte Klassen und Schnittstellen im Vergleich
Pfeil 6.14 Dokumentationskommentare mit JavaDoc
Pfeil 6.14.1 Einen Dokumentationskommentar setzen
Pfeil 6.14.2 Mit javadoc eine Dokumentation erstellen
Pfeil 6.14.3 HTML-Tags in Dokumentationskommentaren
Pfeil 6.14.4 Generierte Dateien
Pfeil 6.14.5 Dokumentationskommentare im Überblick
Pfeil 6.14.6 JavaDoc und Doclets
Pfeil 6.14.7 Veraltete (deprecated) Typen und Eigenschaften


Galileo Computing - Zum Seitenanfang

6.3 Statische Methoden und statische Attribute Zur nächsten ÜberschriftZur vorigen Überschrift

Exemplarvariablen sind eng mit ihrem Objekt verbunden. Wird ein Objekt geschaffen, erhält es einen eigenen Satz von Exemplarvariablen, die zusammen den Zustand des Objekts repräsentieren. Ändert eine Objektmethode den Wert einer Exemplarvariablen in einem Objekt, so hat dies keine Auswirkungen auf die Daten der anderen Objekte; jedes Objekt speichert eine individuelle Belegung. Es gibt jedoch auch Situationen, in denen Eigenschaften oder Methoden nicht direkt einem individuellen Objekt zugeordnet werden. Dazu gehören zum Beispiel die statischen Methoden:

  • Math.max(): liefert das Maximum zweier Zahlen.
  • Math.sin(): bestimmt den Sinus.
  • Integer.parseInt(): konvertiert einen String in eine Ganzzahl.
  • JOptionPane.showInputDialog(): zeigt einen Eingabedialog.
  • Color.HSBtoRGB() [Ja, die Methode beginnt unüblicherweise mit einem Großbuchstaben.] : konvertiert Farben vom HSB-Farbraum in den RGB-Farbraum.

Dazu gesellen sich Zustände, die nicht an ein individuelles Objekt gebunden sind:

  • Integer.MAX_VALUE: ist die größte darstellbare int-Ganzzahl.
  • PI aus Math: bestimmt die Zahl 3,1415...
  • Font.MONOSPACED. steht für einen Zeichensatz mit fester Breite.
  • MediaSize.ISO.A4: definiert die Größe einer DIN-A4-Seite mit 210 mm × 297 mm.

Diese genannten Eigenschaften sind keinem konkreten Objekt zugeordnet als vielmehr der Klasse. Diese Art von Zugehörigkeit wird in Java durch statische Eigenschaften unterstützt. Da sie zu keinem Objekt gehören wie Objekteigenschaften, nennen wir sie auch Klasseneigenschaften. Die Sinus-Funktion ist ein Beispiel für eine statische Methode der Mathe-Klasse, und MAX_INTEGER ist ein statisches Attribut der Klasse Integer. Wie nennen die statischen Methoden auch Funktionen.


Galileo Computing - Zum Seitenanfang

6.3.1 Warum statische Eigenschaften sinnvoll sind Zur nächsten ÜberschriftZur vorigen Überschrift

Statische Eigenschaften haben gegenüber Objekteigenschaften den Vorteil, dass sie im Programm ausdrücken, keinen Zustand vom Objekt zu nutzen. Betrachten wir noch einmal Funktionen aus der Klasse Math. Wenn sie Objektmethoden wären, so würden sie in der Regel mit einem Objektzustand arbeiten. Die Funktionen hätten keine Parameter und nähmen ihre Arbeitswerte nicht aus den Argumenten, sondern aus dem internen Zustand des Objekts. Das macht aber keine Math-Funktion. Um den Sinus eines Winkels zu berechnen, benötigen wir kein spezifisches Mathe-Objekt. Andersherum könnte eine Methode wie setName() eines Spieles nicht statisch sein, da ganz individuell für einen Spieler der Name gesetzt werden soll und nicht alle Spieler-Objekte immer den gleichen Namen tragen sollten.

Statische Funktionen sind aus diesem Grunde häufiger als statische Variablen, da sie ihre Arbeitswerte ausschließlich aus den Parametern ziehen. Statische Variablen werden in erster Linie als Konstanten verwendet.


Galileo Computing - Zum Seitenanfang

6.3.2 Statische Eigenschaften mit static Zur nächsten ÜberschriftZur vorigen Überschrift

Um statische Eigenschaften in Java umzusetzen, fügen wir vor der Deklaration einer Variablen oder einer Methode das Schlüsselwort static hinzu. Für den Zugriff verwenden wir statt der Referenzvariablen einfach den Klassennamen. In der UML sind statische Eigenschaften unterstrichen gekennzeichnet.

Deklarieren wir eine statische Funktion und eine statische Variable für eine Klasse GameUtils. Eine Funktion soll testen, ob Bezeichner, die im Spiel etwa für die Gegenstände verwendet werden, korrekt sind; ein korrekter Bezeichner ist nicht zu lang und enthält kein Sonderzeichen. Die Konstante MAX_ID_LEN steht für die maximale Bezeichnerlänge. Die Variable ist mit dem Modifizierer final versehen, da MAX_ID_LEN eine Konstante ist, deren Wert später nicht mehr verändert werden soll.

Listing 6.19 GameUtils.java

public class GameUtils 
{ 
  public static final int MAX_ID_LEN = 20 /* chars */; 
 
  public static boolean isGameIdentifier( String name ) 
  { 
    if ( name == null ) 
      return false; 
 
    return name.length() <= MAX_ID_LEN && name.matches( "\\w+" ); 
  } 
}

Abbildung 6.3 Statische Eigenschaften werden in der UML unterstrichen.

Die statischen Eigenschaften werden mit dem Klassennamen GameUtils angesprochen:

Listing 6.20 GameUtilsDemo.java, Ausschnitt

System.out.println( GameUtils.isGameIdentifier( "Superpig" ) );       // true 
System.out.println( GameUtils.isGameIdentifier( "Superpig II" ) );    // false

Tipp Falls eine Klasse nur statische Eigenschaften deklariert, spricht nichts dagegen, einen privaten Konstruktor anzugeben – das verhindert den äußeren Aufbau von Objekten.


Abschnitt 6.5.1, »Konstruktoren schreiben«, erklärt Konstruktoren genauer und erläutert auch weitere Anwendungsfälle für private Konstruktoren.


Galileo Computing - Zum Seitenanfang

6.3.3 Statische Eigenschaften über Referenzen nutzen? Zur nächsten ÜberschriftZur vorigen Überschrift

Besitzt eine Klasse eine Klasseneigenschaft, so kann sie auch wie ein Objektattribut über die Referenz angesprochen werden. Dies bedeutet, dass es prinzipiell zwei Möglichkeiten gibt, wenn ein Objektexemplar existiert und die Klasse ein statisches Attribut hat. Bleiben wir bei unserem obigen Beispiel mit der Klasse GameUtils. Wir können für den Zugriff auf MAX_ID_LEN schreiben:

Listing 6.21 GameUtilsDemo.java, Ausschnitt

System.out.println( GameUtils.MAX_ID_LEN );           // Genau richtig 
GameUtils ut = new GameUtils(); 
System.out.println( ut.MAX_ID_LEN );                  // Nicht so gut 
System.out.println( ((GameUtils) null).MAX_ID_LEN );  // Auch gar nicht gut so

Die beiden unteren Anweisungen führen zum gleichen Ziel. Doch betrachten wir allein das zweite Codesegment, so ist für uns nicht sichtbar, dass MAX_ID_LEN eine statische Variable ist. Aus diesem Grund sollten wir immer statische Eigenschaften über ihren Klassennamen ansprechen; Eclipse gibt hier auch eine Meldung aus, wenn wir es nicht so machen.


Galileo Computing - Zum Seitenanfang

6.3.4 Warum die Groß- und Kleinschreibung wichtig ist Zur nächsten ÜberschriftZur vorigen Überschrift

Die Vorgabe der Namenskonvention sagt, Klassennamen sind mit Großbuchstaben zu vergeben und Variablennamen mit Kleinbuchstaben. Treffen wir auf eine Anweisung wie Math.max(a, b), so wissen wir sofort, dass max() eine statische Methode sein muss, weil davor ein Bezeichner steht, der großgeschrieben ist. Dieser kennzeichnet also keine Referenz, sondern einen Klassennamen. Daher sollten wir in unseren Programmen großgeschriebene Objektnamen meiden.

Das folgende Beispiel demonstriert gut, warum Referenzvariablen mit Kleinbuchstaben und Klassennamen mit Großbuchstaben beginnen sollten.

String StringModifier = "What is the Matrix?"; 
String t = StringModifier.trim();

Die trim()-Methode ist nicht statisch, wie die Anweisung durch die Großschreibung der Variable suggeriert.

Das gleiche Problem haben wir, wenn wir Klassen mit Kleinbuchstaben benennen. Auch dies kann irritieren.

class player 
{ 
  static void move() { } 
}

Jetzt könnte jemand player.move() schreiben, und der Leser nähme an, dass player wegen seiner Kleinschreibung eine Referenzvariable ist und move() eine Objektmethode. Wir sehen an diesem Beispiel, dass es wichtig ist, die Groß-/Kleinschreibung zu verfolgen.


Galileo Computing - Zum Seitenanfang

6.3.5 Statische Variablen zum Datenaustausch Zur nächsten ÜberschriftZur vorigen Überschrift

Der Wert einer statischen Variable wird bei dem Klassenobjekt gespeichert und nicht bei einem Exemplar der Klasse. Wie wir aber gesehen haben, kann jedes Exemplar einer Klasse auch auf die statischen Variablen der Klasse zugreifen. Da eine statische Variable aber nur einmal pro Klasse vorliegt, führt dies dazu, dass mehrere Objekte sich eine Variable teilen. Ist etwa das Attribut PI statisch und size ein Objektattribut, so ergibt sich bei zwei Exemplaren folgendes Bild:

Während also beide Exemplare das gleiche PI nutzen, können beide Exemplare size völlig unterschiedlich belegen.

Mit diesem Wissen wird es möglich, einen Austausch von Informationen über die Objektgrenze hinaus zu erlauben.

Listing 6.22 ShareData.java

public class ShareData 
{ 
  private static int data; 
 
  public void memorize( int data ) 
  { 
    ShareData.data = data; 
  } 
 
  public int retrieve () 
  { 
    return data; 
  } 
  public static void main( String[] args ) 
  { 
    ShareData s1 = new ShareData(); 
    ShareData s2 = new ShareData(); 
    s1.memorize( 2 ); 
    System.out.println( s2.retrieve() );    // 2 
  } 
}

Hinweis Es kann bei nebenläufigen Zugriffen auf statische Variablen zu Problemen kommen. Deshalb müssen wir spezielle Synchronisationsmechanismen nutzen – die das Beispiel allerdings nicht verwendet. Statische Variablen können auch schnell zu Speicherproblemen führen, da Objektreferenzen sehr lang gehalten werden.



Galileo Computing - Zum Seitenanfang

6.3.6 Statische Eigenschaften und Objekteigenschaften topZur vorigen Überschrift

Wie wir oben gesehen haben, können wir über eine Objektreferenz auch statische Eigenschaften nutzen. Wir wollen uns aber noch einmal vergewissern, wie Objekteigenschaften und statische Eigenschaften gemischt werden können. Erinnern wir uns daran, dass unsere ersten Programme aus der main()-Funktion bestanden, aber unsere anderen Funktionen auch static sein mussten. Dies ist sinnvoll, da eine statische Methode – ohne explizite Angabe eines aufrufenden Objekts – nur andere statische Methoden aufrufen kann. Wie sollte auch eine statische Methode eine Objektmethode aufrufen können, wenn es kein zugehöriges Objekt gibt? Andersherum kann aber jede Objektmethode eine beliebige statische Methode direkt aufrufen. Genauso verhält es sich mit Attributen. Eine statische Methode kann keine Objektattribute nutzen, da es kein implizites Objekt gibt, auf dessen Eigenschaften zugegriffen werden könnte.

this-Referenzen und statische Eigenschaften

Auch der Einsatz der this-Referenz ist bei statischen Eigenschaften nicht möglich. Eine statische Methode kann also keine this-Referenz verwenden.

class InStaticNoThis 
{ 
  String name; 
 
  static void setName() 
  { 
    name = "Amanda";           // Compilerfehler 
    this.name = "Amanda";      // Compilerfehler 
  } 
}


Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.






<< zurück
  Zum Katalog
Zum Katalog: Java ist auch eine Insel





Java ist auch eine Insel
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Tipp
Zum Katalog: Coding for Fun





 Coding for Fun


 Buchempfehlungen
Zum Katalog: Objektorientierte Programmierung





 Objektorientierte
 Programmierung


Zum Katalog: Einstieg in Eclipse 3.4






 Einstieg in
 Eclipse 3.4


Zum Katalog: Java 6 lernen mit Eclipse






 Java 6 lernen
 mit Eclipse


Zum Katalog: NetBeans Platform 6






 NetBeans
 Platform 6


Zum Katalog: Java und XML






 Java und XML


Zum Katalog: Visual C# 2008






 Visual C# 2008


Zum Katalog: IT-Handbuch für Fachinformatiker






 IT-Handbuch für
 Fachinformatiker


Zum Katalog: C++ von A bis Z






 C++ von A bis Z


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Galileo Press 2009
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Galileo Computing]

Galileo Press, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, info@galileo-press.de