Announcement

Collapse
No announcement yet.

Static variable ohne Objekt

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Static variable ohne Objekt

    nur um das sicher zuwissen!

    Ich kann ohne ein Objekt nicht die Staticvariable einer Klasse ändern?

    korrekt ?

    Danke

  • #2
    Sicher kannst du das
    Christian

    Comment


    • #3
      Doch! Genau das ist der Sinn von static. Zugriff darauf über Klassenname.Variablenname. Oder kann es sein, dass Du das mit "final" verwechselst?
      http://www.winfonet.eu

      Comment


      • #4
        Doch! Genau das ist der Sinn von static. Zugriff darauf über Klassenname.Variablenname. Oder kann es sein, dass Du das mit "final" verwechselst?
        Der sinn (dacht ich immer) ist das Objekte untereinander kommunizieren können...

        Was macht denn das bitte für einen Sinn eine Variable in einer Klasse zu verändern wenn es garkeit objekt gibt das darauf zurückgreift ?

        Cracker0dks

        Comment


        • #5
          Originally posted by cracker0dks View Post
          Was macht denn das bitte für einen Sinn eine Variable in einer Klasse zu verändern wenn es garkeit objekt gibt das darauf zurückgreift ?
          Da gibt es viele. z.B. um globale Einstellungen zu merken. Bei Java/.NET hätte man gar keine andere Möglichkeit dazu als static-Methoden.

          Comment


          • #6
            Mit dem Schlüsselwort static drückst Du aus, dass es einen Wert gibt, der global für alle Instanzen dieser Klasse gültig sein soll.

            Dies wird dazu genutzt, z.B. Konstanten zu definieren. Z.B. so:
            Code:
            public class Constants {
              public static final int MAX_ANZAHL = 10;
            }
            Damit machst Du klar: "Ich will einen Wert definieren, der global zugreifbar ist. Die konkrete Instanz ist mir dabei völlig egal." Dieser Wert ist aber natürlich nicht änderbar und Deine Frage damit noch nicht beantworted. Also weiter im Text.

            Jetzt ein anderes Beispiel, um den Unterschied zwischen Instanzvariable (ohne static) und Klassenvariable (mit static) zu verdeutlichen.
            Code:
            public class Buch {
            
              private static int bestand;
            
              private final String titel;
            	
              public Buch (final String titel) {
                this.titel = titel;
                bestand++;
              }
            
              public static int getBestand() {
                return bestand;
              }
              public String getTitel() {
                return this.titel;
              }
            }
            ...
            Buch hdr = new Buch("Herr der Ringe");
            Buch bib = new Buch("Bibel");
            Hier siehst Du, dass die Variable titel eine Instanzvariable ist. Ist auch logisch. "Herr der Ringe" ist ein anderes Buch als Bibel. Die Variable "bestand" widerrum ist eine Klassenvariable, die immer hochgezählt wird, wenn Du ein neues Buch erzeugst. Sie ist für alle Klassen Buch gleich. Du willst ja den Bestand an Büchern insgesamt wissen dazu wäre es Quatsch, sich erst eine Instanz von Buch zu holen und die dan abzufragen (obwohl das auch ginge).

            Für Deine beschriebenen Fall einer Klassenvariable, die völlig ohne Erzeugung von Instanzen verändert wird, fallen mir tatsächlich nicht sehr viele Anwendungsfälle ein. Vielleicht sowas wie ne globale Konfiguration oder so...
            Zuletzt editiert von ngomo; 03.09.2010, 17:54.
            http://www.winfonet.eu

            Comment


            • #7
              Ich denke soweit es geht sollte man einen großen Bogen um static machen soweit es geht. Oder zumindest sehr vorsichtig damit umgehen. Für Konstanten oder Hilfsfunktionen ist das ok. Aber nicht zur Steuerung vom Programm oder zur Kommunikation von irgendwelchen Programmteilen miteinander.

              Comment


              • #8
                Originally posted by fanderlf View Post
                Ich denke soweit es geht sollte man einen großen Bogen um static machen soweit es geht. Oder zumindest sehr vorsichtig damit umgehen. Für Konstanten oder Hilfsfunktionen ist das ok. Aber nicht zur Steuerung vom Programm oder zur Kommunikation von irgendwelchen Programmteilen miteinander.
                Mann sollte halt wissen was man macht. Aber bei Factory oder Singleton-Pattern sind static-methoden schon sinnvoll zu verwenden.

                Comment


                • #9
                  Singleton Enum

                  @fanderlf: Ja stimmt, den Bestandszähler in meinem Beispiel würe ich wohl auch eher so machen, das ich irgendwo eine Collection von Büchern habe und deren size ausgeben würde. War halt nur, um den Unterschied zwischen Inszanz- und Klassenvariable zu verdeutlichen.

                  @Bernhard: Singletons kann man seit Java 5 mit mit einem enum umsetzen, das ein einziges Element enthält.
                  http://www.winfonet.eu

                  Comment


                  • #10
                    ok danke an alle...

                    Comment


                    • #11
                      Originally posted by Bernhard Geyer View Post
                      Mann sollte halt wissen was man macht. Aber bei Factory oder Singleton-Pattern sind static-methoden schon sinnvoll zu verwenden.
                      Mir ist das auch klar, aber viele Programmierer verwenden static einfach viel zu oft. Vor allem als tolle globale Variablen (was anderes ist es ja im Endeffekt nicht). Aber vor allem die Testbarkeit leidet bei so etwas sehr. Deswegen sollte man sich genau überlegen ob man mit static arbeitet oder nicht.

                      Comment


                      • #12
                        @ngomo

                        DU hast die Staticvariable jetzt aber nur inerhalb des Objekts verändert (also über eine Methode (dazu muss ja jetzt bereits ein Objekt exsistieren)

                        Die deklaration ist für mich keine änderung sondern ehere definition.

                        Kann ich von auserhalb der Klasse "Buch" die Variable "bestand" schon ändern, befor ich ein Objekt davon erzeug ? also zb von 10 auf 20 setzten ?

                        Danke

                        Comment


                        • #13
                          also zb von 10 auf 20 setzten ?
                          Lies doch mal, was man dir schreibt:

                          Zugriff darauf über Klassenname.Variablenname
                          Christian

                          Comment


                          • #14
                            jo sry, habs überlesen... danke

                            Comment


                            • #15
                              Code:
                              public class Main
                              {
                              public static void main(String[] args)
                                  {
                                  Test.NUMMER=4;
                                  System.out.println(Test.NUMMER);
                                  }
                              }
                              Code:
                              public class Test
                              {
                              public static int NUMMER ;
                              }
                              Christian

                              Comment

                              Working...
                              X