Static Attribute in einer Klasse, wie geht das? :O

B

berndoa

Bekanntes Mitglied
Hallo,
in meinem Vorlesungsskript kommt als Beispiel etwas vor a la


Java:
class Block{



   static int az=0;

    Block(int parameter1){
        //....
        az++;
    }
   
   
}

Im Fließtext dazu stand dass hier az letztlich angeben würde
wie viele Instanzen von Block seit Start des Skripts erzeugt worden wären.
Stimmt das wirklich so?
Kann ich dass so immer machen?

Ich verstehe das nicht ganz,
kann mir da Jemand den Ablauf erklären wie das Alles funktioniert?

Existiert diese Variable az unabhängig von Zeit und Raum und unabhängig davon
ob diese Datei Block.java jemals irgendwie benutzt wird?

Also kann ich aus einem anderen Programm heraus einfach Block.az aufrufen ohne je irgendwie das Block progamm je komiliert zu haben oder je ein Block Objekt erschaffen zu haben?

Kann mir das gar nicht so vorstellen :-/

Wie funktioniert sowas?
 
Zuletzt bearbeitet:
B

Barista

Top Contributor
Da fehlt noch das static vor az.

Ansonsten ja, eine static Variable existiert nur einmal in der JVM (wahrscheinlich je ClassLoader) und benötigt keine Instanz.
 
B

berndoa

Bekanntes Mitglied
Lol, schön, wenn im Nachhinein so ein Post editiert wurde - man schaut und wundert sich, dass @mihe7 das static einfach nicht sieht :)
Das tut mir jetzt Leid, dass wegen mir @mihe7 blöd da steht :-(

Dachte, ich fix es noch shcnell bevor sich noch mehr Leute beschweren.

Ja, ich hätte das gerne besser verstanden wie man diese statische variable aus einem anderen programm heraus benutzt oder auch nicht.
Oder wie man die überhaupt benutzt.

Weil irgendwie kann ich mir das nicht so wirklich vorstellen.

Irgendwie scheint mir diese variable ja schon mit 0 initialisiert zu sein rein dadurch dass dieses Programm existiert. oder wird die nur deklariert und erstellt wenn ich das Programm auch ausführe?

Oder kann ich bspw, in einem anderen Programm 2 Block Objekte erzeugen und mir dann sagen lassen was der Wert von az ist (der ja nun 2 sein sollte)?

Ich checke das irgendwie nicht, statisches kram ist mir mehr oder weniger ein Mysterium, gerade wo das Attribut hier innerhalb der selben Klasse vorkommt und im Konstruktor inkrementiert wird o_O
 
kneitzel

kneitzel

Top Contributor
Das tut mir jetzt Leid, dass wegen mir @mihe7 blöd da steht :-(
Da musst Du Dir keine Gedanken machen. Das ist nicht so schlimm und die Welt ist in Ordnung.

Was ich mache, wenn ich etwas nachträglich noch editiere: Ich schreibe unten drunter noch ein Edit: mit Hinweis, was ich geändert habe.

Aber das ist jetzt nichts, wo irgend jemand wirklich böse wäre - siehst Du ja auch am Lacher von @mihe7.
 
F

fhoffmann

Top Contributor
Um noch einmal auf die ursprüngliche Frage zurückzukommen:

Eine Variable (auch static) ist immer nur im laufenden Programm gültig.
Deine Variable "az" wird also bei jedem Neustart des Programmes immer wieder mit 0 initialisiert.
Um eine eindeutige Nummer zu erzeugen (zum Beispiel eine Kundennummer), wird normalerweise eine Datenbank benutzt.

Wenn du "static" nicht verstehst, ist dies gut; denn als Anfänger ist es normalerweise ein Fehler, "static" (außer vor der main) zu benutzen.
 
temi

temi

Top Contributor
Vielleicht mal noch ein paar anschauliche Beispiele dazu.

"Normale" Klassen mit Instanzvariablen oder Instanzmethoden, sind dir ja hinreichend bekannt.
Java:
class Foo {

    public int value; // normalerweise natürlich private

    public void doSomething() {
   
    }
}

Der Zugriff erfolgt, wie gewohnt, über eine Instanz der Klasse:
Java:
Foo foo1 = new Foo();

foo1.value = 42;
foo1.doSomething;

Foo foo2 = new Foo();

foo2.value = 5;

System.out.println(foo1.value); // 42
System.out.println(foo2.value); // 5

Instanzen der Klasse sind, wie man sieht, unabhängig voneinander, "value" existiert in beiden Instanzen (und auch in allen weiteren).

Statische Variablen oder Methoden nennt man dagegen auch Klassenvariablen oder Klassenmethoden.
Java:
class Foo {

    public static int value;

    public static void doSomething() {
   
    }
}

Im Gegensatz zu Instanzvariablen/-methoden können (und sollten) sie über die Klasse aufgerufen werden.
Java:
Foo.value = 42;

Foo foo2 = new Foo(); // das funktioniert weiterhin

System.out.println(Foo.value); // 42
System.out.println(foo2.value); // 42

Wie man sieht, gibt es "value" nur einmal für die Klasse (oder für alle Instanzen dieser Klasse).

Kombinieren kann man das natürlich auch und damit z. B. zählen, wieviele Instanzen erzeugt wurden.

Statische Methoden werden gerne für Utiltity-Klassen (Math) genutzt. Aber auch andere Java-Klassen haben statische Methoden z. B. Integer.parseInt().
 
Zuletzt bearbeitet:
B

berndoa

Bekanntes Mitglied
Vielleicht mal noch ein paar anschauliche Beispiele dazu.

"Normale" Klassen mit Instanzvariablen oder Instanzmethoden, sind dir ja hinreichend bekannt.
Java:
class Foo {

    public int value; // normalerweise natürlich private

    public void doSomething() {
  
    }
}

Der Zugriff erfolgt, wie gewohnt, über eine Instanz der Klasse:
Java:
Foo foo1 = new Foo();

foo1.value = 42;
foo1.doSomething;

Foo foo2 = new Foo();

foo2.value = 5;

System.out.println(foo1.value); // 42
System.out.println(foo2.value); // 5

Instanzen der Klasse sind, wie man sieht, unabhängig voneinander, "value" existiert in beiden Instanzen (und auch in allen weiteren).

Statische Variablen oder Methoden nennt man dagegen auch Klassenvariablen oder Klassenmethoden.
Java:
class Foo {

    public static int value;

    public static void doSomething() {
  
    }
}

Im Gegensatz zu Instanzvariablen/-methoden können (und sollten) sie über die Klasse aufgerufen werden.
Java:
Foo.value = 42;

Foo foo2 = new Foo(); // das funktioniert weiterhin

System.out.println(Foo.value); // 42
System.out.println(foo2.value); // 42

Wie man sieht, gibt es "value" nur einmal für die Klasse (oder für alle Instanzen dieser Klasse).

Kombinieren kann man das natürlich auch und damit z. B. zählen, wieviele Instanzen erzeugt wurden.

Statische Methoden werden gerne für Utiltity-Klassen (Math) genutzt. Aber auch andere Java-Klassen haben statische Methoden z. B. Integer.parseInt().
Statische Methoden verwirren mich nicht allzu sehr,
mich verunsichern eher wie im Eingangs Beispiel statische Attribute , die aber modifiziert werden.

Wie hier scheint ja die static vairable shcon per se zu existieren, wird aber durch jede Konstrukturoaufrufung erneut verändert.

Und ich kann mir geistig einfahc nicht recht klar machen ab wann ein statisches Attribut beginnt zu existieren?

Existiert es schon solange es ein Programm mit einer Klasse mit dem attribut im selben ordner gibt?
Existert es erst wenns kompiliert ist?
Oder erst wenn das Programm auch ausgeführt wurde und dmait die Main methode der Klasse ausgeführt wurde (namentlich 'java Klassenname' in der Konsole)?

Bei Klassen mit nicht-statischen Attributen ist es klar:
Ab Objekterzeugung existiert auch jenes Objekt Attribut.

Aber ein auch bei Nicht-Instanzierung exisiterendes Attribut, wo oder wann beginnt dessen Leben? :O

ich meine, wenn ich bspw. 2 java Programme A und B mit entsprechender Klasse drin habe und A enthält ein statisches Attribut 'static int v=5;, kann ich dann das Programm B ausführen lassen und darin mittels A.v auf das Attribut mit Wert 5 zugreifen obwohl ich weder die Klasse A ausühre noch irgendein objekt dieser Klasse erzeuge im Rahmen meines ausgeführten B Programms?

Ab wann wird überhaupt die variable A.v mit dem Wert 5 initialisiert? Ist sie es von Anfang an? oder wird sie erst definiert und initialisiert wenn an mittels A.v versucht auf sie und ihren Wert zuzugreifen?

Kurzum wann beginnt oder endet der lebensbereich einer Klassenvaraible oder -attributs?
Beim Objekt hängt Alles darin von der lebensdauer des Objekts ab.
Aber bei einer Klasse, die ja im Prinzip keinen durch ein Programm oder Befehl hervorgerufenen Beginn hat?
 
B

Barista

Top Contributor
Und ich kann mir geistig einfahc nicht recht klar machen ab wann ein statisches Attribut beginnt zu existieren?
Mit dem Laden der Klasse.

Java-Klassen werden geladen, wenn Sie im Programm benötigt werden.

Also wenn auf ein static field zugegriffen wird (Ausnahme sind primitive Konstanten die vom Compiler ge-inlined werden)

und

wenn eine Instanz der Klasse oder einer abgeleiteten Klasse erzeugt werden soll.
 
kneitzel

kneitzel

Top Contributor
Das mit dem Lebensbereich ist schwer zu sagen, da es nicht exakt spezifiziert ist.

Bei der normalen Java VM existiert die Variable, sobald die Klasse geladen wird vom Classloader. Also spätestens beim ersten Zugriff auf die Klasse muss der Classloader die Klasse geladen haben. Wenn die Klasse in einem jar File ist, werden in der Regel alle Klassen des JAR Files auf einmal geladen.

Generell gibt es aber auch andere Lösungen. GraalVM z.B. Wenn hier der Java Code in ein native Executable übersetzt wird, dann kann die Variable direkt mit start der Programmes existieren.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Abstrakte Klasse - static Attribute deklarieren Java Basics - Anfänger-Themen 14
M static Attribute und Vererbung Java Basics - Anfänger-Themen 11
NaZuRe Geld(Wert) von der public static void main in die public static void Blackjack Java Basics - Anfänger-Themen 2
H Static Java Basics - Anfänger-Themen 5
K Ausgaben auf der Konsole (static Varible) Java Basics - Anfänger-Themen 9
S public static boolean Java Basics - Anfänger-Themen 4
Vamecruft Compiler-Fehler public static void zu static String ändern Java Basics - Anfänger-Themen 2
L non-static Fehler Java Basics - Anfänger-Themen 16
S Klassenmethode ohne static Java Basics - Anfänger-Themen 2
M (Sehr großes Problem) Listen als static in anderen Klassen verwendet Java Basics - Anfänger-Themen 12
J Fehlermeldung unklar. non-static variable player0 cannot be referenced from a static context Java Basics - Anfänger-Themen 4
D Methoden Scannervariablen in static Methoden Java Basics - Anfänger-Themen 5
P non-static variable cannot be referenced from a static context Java Basics - Anfänger-Themen 6
V the static method should be accessed is a static way Java Basics - Anfänger-Themen 6
NormanPatrickBenner static non-static Java Basics - Anfänger-Themen 82
N Erste Schritte "non-static method" oder "XYZ can not be resolved" Java Basics - Anfänger-Themen 21
B Email versenden, muss Methode static sein? Java Basics - Anfänger-Themen 7
R static in der Methode Java Basics - Anfänger-Themen 2
E Problem mit static Methode Java Basics - Anfänger-Themen 4
H Vererbung Static Scanner Objekt verwenden - von StdIn in einer importierten Klasse lesen Java Basics - Anfänger-Themen 10
M Cannot make a static reference to the non-static method Java Basics - Anfänger-Themen 10
C Methoden Unterschied zwichen public int, public static int und public static void Java Basics - Anfänger-Themen 2
J Frage zu: public static void main (String[]args) Java Basics - Anfänger-Themen 1
T Datentypen enum static Chaos (blutiger anfänger) Java Basics - Anfänger-Themen 5
D Das leidige Thema static.... Java Basics - Anfänger-Themen 15
Aprendiendo Interpreter-Fehler "non-static variable this cannot be referenced from a static context" Java Basics - Anfänger-Themen 2
T Problem mit static Java Basics - Anfänger-Themen 6
T static String Variable wird nur beim ersten aufruf durch eine Funktion geändert. Java Basics - Anfänger-Themen 16
S Vererbung Zugriff auf Methode funktioniert nicht (static/non-static) Java Basics - Anfänger-Themen 3
snipesss Was kann 'static'? Java Basics - Anfänger-Themen 4
H Variablen error: non-static variable cannot be referenced from a static context Java Basics - Anfänger-Themen 4
M public static int in ActionListener Java Basics - Anfänger-Themen 6
J static verschachtelte Klassen und innere Klassen Java Basics - Anfänger-Themen 1
H Nicht Static Funktion ohne Objekt aufrufen? Java Basics - Anfänger-Themen 6
E Objekte und static Java Basics - Anfänger-Themen 2
K Methoden Methoden in Methoden -> static oder nicht? Java Basics - Anfänger-Themen 7
D Erklärung static boolean Java Basics - Anfänger-Themen 6
L Was genau macht "public static void" ? Java Basics - Anfänger-Themen 12
U Erste Schritte cannot be referenced from a static context Java Basics - Anfänger-Themen 1
B ja ja schon wieder einer mit einer public static void main(string[] args) Frage... Java Basics - Anfänger-Themen 8
J Java: static bei Vererbung Java Basics - Anfänger-Themen 5
O Zu viel static im Projekt Java Basics - Anfänger-Themen 9
F Static final Klasse Java Basics - Anfänger-Themen 0
N static und Objekt kombiniert?!? Java Basics - Anfänger-Themen 3
O Wann nutzt man static? Java Basics - Anfänger-Themen 19
B Klassen Eigene "non static" Klasse in Main verwenden! Java Basics - Anfänger-Themen 12
D neue public static class variablen in array speichern? Java Basics - Anfänger-Themen 6
A Static variablen --- Anwendungsbereich Java Basics - Anfänger-Themen 11
B Erste Schritte Wie komme ich aus Static raus?!! Java Basics - Anfänger-Themen 4
V Static Methods Java Basics - Anfänger-Themen 5
W Compiler-Fehler "non-static method cannot be referenced"-Problem Java Basics - Anfänger-Themen 6
S OOP Klasse mit static-Eigenschaften - HashMap füllen Java Basics - Anfänger-Themen 6
3 OOP static class in einer Klasse Java Basics - Anfänger-Themen 6
B static individuell "vererben"? Java Basics - Anfänger-Themen 8
B Erkennen, wann static oder nicht? Java Basics - Anfänger-Themen 7
T Static Fehler Java Basics - Anfänger-Themen 1
R public static void Rückgabe Java Basics - Anfänger-Themen 5
P Compiler-Fehler public static void main, Grundloses Problem Java Basics - Anfänger-Themen 4
A Cannot make a static reference to the non-static field Java Basics - Anfänger-Themen 6
W Variablen Automatisch static? Java Basics - Anfänger-Themen 3
O Warum muss ich static? Java Basics - Anfänger-Themen 6
O Static Java Basics - Anfänger-Themen 15
E non-static method und static context Java Basics - Anfänger-Themen 15
B non static interface Methode Java Basics - Anfänger-Themen 16
J KeyListener,MouseListener,MouseMotionListener und static Java Basics - Anfänger-Themen 7
S Static void Methode Java Basics - Anfänger-Themen 12
Q Unterschied zwischen static und keinem Modifier Java Basics - Anfänger-Themen 15
O Main-Methode static modifier umgehen Java Basics - Anfänger-Themen 10
J Variablen non-static variable Java Basics - Anfänger-Themen 2
P Erste Schritte public oder static oder wie? Java Basics - Anfänger-Themen 7
J static - Methoden Java Basics - Anfänger-Themen 22
X Erste Schritte Methode ohne Static Java Basics - Anfänger-Themen 4
B Classpath static block - Verwirrung Java Basics - Anfänger-Themen 2
S Methoden Warum ist sleep static? Java Basics - Anfänger-Themen 9
K static, non-static Krise Java Basics - Anfänger-Themen 4
R Schlüsselworte static Methoden und Imports Java Basics - Anfänger-Themen 10
M Methoden "Non-static method xy cannot be referenced from a static context" Java Basics - Anfänger-Themen 20
J Probleme mit static generische Klasse Java Basics - Anfänger-Themen 6
S Aufruf Einer Methode aus einer anderen Klasse - Static Fehler Java Basics - Anfänger-Themen 4
W Methodenaufruf innerhalb einer Klasse - static vs. this Java Basics - Anfänger-Themen 3
K Objekt erstellen - error: non-static variable this cannot be referenced from a static context Java Basics - Anfänger-Themen 17
H non-static method cannot be referenced from a static context Java Basics - Anfänger-Themen 2
Y Gebrauch von static Java Basics - Anfänger-Themen 29
L Cannot make a static reference to the non-static method Java Basics - Anfänger-Themen 6
T getClass() im static Kontext Java Basics - Anfänger-Themen 12
S Frage zu public static Java Basics - Anfänger-Themen 29
M Problem mit Static Method Java Basics - Anfänger-Themen 8
H Methoden Static ? Java Basics - Anfänger-Themen 10
K Erste Schritte Zugiff ohne static Java Basics - Anfänger-Themen 5
X Static char Problem Java Basics - Anfänger-Themen 11
H static final vs. final static Java Basics - Anfänger-Themen 3
K Variablen Cannot make a static reference to the non-static field time Java Basics - Anfänger-Themen 6
A Compiler-Fehler static Array Wert hinzufügen Java Basics - Anfänger-Themen 8
E Methoden public static void main(String[] args) Java Basics - Anfänger-Themen 9
P Objekte übergeben Parameter vs. Static Methode Java Basics - Anfänger-Themen 7
B Static in der Anwendungsklasse Java Basics - Anfänger-Themen 8
P Compiler-Fehler Cannot make a static reference to the non-static field process Java Basics - Anfänger-Themen 3
N Übungsaufgabe mit static Wert Java Basics - Anfänger-Themen 27
M Class will alle Variablen als static haben Java Basics - Anfänger-Themen 11
H .class und static Block ? Java Basics - Anfänger-Themen 4

Ähnliche Java Themen


Oben