Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
also, was ist eigentlich der vor/nachteil von statischen variablen und methoden?
ist es nicht einfacher wenn alles statisch sind..dann muss man ja in der aufrufenden klasse keine neuen Instanzen (objekte) mehr anlegen.. der aufruf erfolgt mit klassenname.methode1....
Vorteil:
- man hat von überall Zugriff auf statische Elemente
Das kann das Leben wirklich einfacher machen. Besonders wenn man irgendwelche kleinen Hilfs-Methoden benötigt (Math.max...).
Nachteil:
- man hat von überall Zugriff auf statische Elemente
Das kann der Modularität entgegenlaufen. Wenn von überall her zufällig Aufrufe kommen, kann man das statische Element später schlecht ändern/auswechseln/verbessern/löschen/...
- Man ist limitiert auf ein Objekt
Statisch meint meistens "Singleton". Und dann ist die Frage, wann ein Singleton angemessen ist. Da die wenigsten Menschen in die Zukunft schauen können, sollte man eher den sicheren Weg wählen. Und der lautet: vielleicht wird man ein Objekt mehrmals benötigen, und setzt lieber kein Singleton ein.
...womit man OOP aufgibt und nur noch prozedural programmiert...
wer es sich antun möchte: bitte schön. Dann macht es aber nicht allzuviel sinn Java zu benutzen, dann wär C sicherlich angebrachter
Quark, wenn man etwas mit statischen Operationen gepflegt lösen kann, wie Math.max(), dann spricht nix dagegen und ein Objekt wäre nur unnötiger Ballast
Objekte kommen nur aus zwei Gründen ins Spiel:
1. Daten vorhalten
personObjekt.getName() ist sinniger als AnyClass.getNameOf(Person-Record) früher
(edit: mehrfache Daten)
Quark, wenn man etwas mit statischen Operationen gepflegt lösen kann, wie Math.max(), dann spricht nix dagegen und ein Objekt wäre nur unnötiger Ballast
sry für meine schwachen deutschkenntnisse, aber "Quark" hört sich in diesem Kontext so an, als wolltest du irgendeiner vorangegangenen Aussage widersprechen ???:L aber Beni hats doch auch als Vorteil beschrieben :bahnhof: :
Beni hat gesagt.:
Vorteil:
- man hat von überall Zugriff auf statische Elemente
Das kann das Leben wirklich einfacher machen. Besonders wenn man irgendwelche kleinen Hilfs-Methoden benötigt (Math.max...).
wobei ich überhaupt nicht nachvollziehen kann warum hier überhaupt von "Vorteilen und Nachteilen" gesprochen wird... als ob ihr am Beispiel "Wasser vs. Luft für Homo Sapiens Sapiens" über Vorteile und Nachteile diskutieren würdet. Es sind zwei paar schuhe, und ohne beides ist geht es halt nun mal nicht...
ne, das hab ich keineswegs gesagt. :bae: du hast einfach einen teil der aussage durchgelesen, ohne das schlüsselwort "alle" davor zu berücksichtigen, ich habs nämlich so gemeint:
Code:
alles statisch => keine OOP
denn die diskussion fing ja damit an:
ist es nicht einfacher wenn alles statisch sind..dann muss man ja in der aufrufenden klasse keine neuen Instanzen (objekte) mehr anlegen..
naja worauf ich auf meine frage hinaus will ist..z.B ich hab eine Klasse die Daten aus der DB holt. die Daten werden in ArrayList reingeschrieben. z.B ArrayList KundenID und ArrayList KundenName...
so ist es jetzt besser diese ArrayListe statisch zu setzen oder nicht..
somit kann ich in jeder klasse auf die Listen zugreifen ohne eine Instanz anzulegen... ist das so üblich? oder wählt man eher den anderen weg wo ich sag, ja es muss immer ein Objekt angelegt werden bevor "du" meine Daten kriegst...
Ein statisches Feld welches nicht final ist ist noch lange kein Singleton.
Bsp:
Bevor es enums gab wurde zB mit static häufig enums nachgebildet, welche letztendlich seit Java 1.5 genauso funktionieren wie ihre Vorfahren.
Code:
class Animal {
public static final Animal HORSE = new Animal("HORSE");
public static final Animal DOG = new Animal("DOG");
private String type = null;
private Animal(String s) {
this.type = s;
}
public String toString() {
return type;
}
}
@scrubs
Sowas wird üblicherweise nicht static gemacht.
Könnte ja sein, dass deine Anwendung plötzlich mehrbenutzerfähig oder sogar mit mehreren Threads zurechtkommen soll. Spätestens dann funktioniert dein Ansatz nicht mehr.
ein x-beliebiges Feld in einem Singleton-Objekt ist selber auch noch kein Singleton
die ganze Klasse Animal ist eine Art Singleton, eine einmalige Ansammlung von Informationen,
okok, streng nach Lehrbuch gibts bestimmte Kriterien, die nicht erfüllt sind, geschenkt,
dem Zweck/ der Anwendung nach ist eine statische Informationsansammlung aber ein Singleton
naja, ein singleton ist ja trotzdem ein Objekt mit Objektvariablen... welches man referenzieren kann, übergeben, zurückgeben etc. außerdem kann ein singleton im viel größeren sinn mit vererbung arbeiten... ein singleton-thread oder sowas
während eine klasse mit statischen methoden und statischen variablen mehr sowas wie ein global-player ist, der von überall ansprechbar ist und immer nur klassenvariablen zur verfügung hat.
außerdem wird ein singleton und dessen referenzvariablen immer erst beim aufrug erstellt wohinggegen klassenvariablen schon bei programmstart instanziert werden.(hoff ich irr mich jetz nicht *g*)
naja worauf ich auf meine frage hinaus will ist..z.B ich hab eine Klasse die Daten aus der DB holt. die Daten werden in ArrayList reingeschrieben. z.B ArrayList KundenID und ArrayList KundenName...
so ist es jetzt besser diese ArrayListe statisch zu setzen oder nicht..
wenn du dir absolut sicher bist, dass du niemals zwei gleichartige instanzen dieser klasse erzeugen willst, die auf verschiedene datenbanken zugreifen, wäre so eine statische liste eigentlich vertretbar... :roll:
singletons brauchst du, wenn du eine konkrete instanz eines objektes brauchst, aber 100% sicher sein willst, dass es nur ein einziges mal erzeugt wird. Wenn dich deine klasse mit den ganzen datenbankverbindungen als ein instanziiertes objekt an sich nirgendwo interessiert, brauchst du das imho nicht...
ps: jo, ich plappere hier auch nur so ein bisschen rum, vielleicht ist es für den op beruhigend zu wissen, dass der nicht der einzige ist, der keine ahnung hat
noch eine frage zu static...
bin jetzt irgendwie durchs programmieren, draufgekommen, dass wenn eine statische methode aufgerufen wird, den standard konstruktor und die variablen von der klasse auch mit aufgerufen werden...
kann das stimmen?
Nein, das kann nicht stimmen. Der Konstruktor von welchem Objekt soll denn aufgerufen werden, die statische Methode gehört ja zu keinem... Du erzeugst dir allenfalls aus Versehen irgendwo ein neues Objekt :wink: