Variablen dekleration + reset

Leon_2001

Aktives Mitglied
Hallo,

folgende Frage: Wann werden Variablen resettet/ wie kann ich das komplett verhinden?

Ich weiß, dass Variablen immer an der Stelle initialisiert werden, wo es im Code stehe. Daher im Konstruktor immer wenn ein Objekt erstellt wird, in einer for schleife jeden Durchgang.
Wie sieht es mit Variablen am Anfang einer Klasse aus?

Beispiel Statistik: Wie oft wurde das Programm ausgeführt? Wie erstelle ich eine Variable, die nicht jedes mal auf den Anfangswert (hier: 0) gesetzt wird beim ausführen.

zweite Frage: Macht eine Dekleration von Variablen am Anfang Sinn? Sollte man grundsätzlich die Variable immer am Anfang deklarieren? auch dort initialisieren?

gehen wir mal von dem Fall aus, dass es grundsätzlich egal ist, wo man die Variable deklariert d.h. die variablen werden nicht an der einen Stelle irgendwann wieder resettet oder erhöht oder sonstiges und anderer Stelle nicht.

Grüße Leon
 

mrBrown

Super-Moderator
Mitarbeiter
folgende Frage: Wann werden Variablen resettet/ wie kann ich das komplett verhinden?
Gar nicht, einen "reset" gibt es nicht.

Ich weiß, dass Variablen immer an der Stelle initialisiert werden, wo es im Code stehe. Daher im Konstruktor immer wenn ein Objekt erstellt wird, in einer for schleife jeden Durchgang.
Wie sieht es mit Variablen am Anfang einer Klasse aus?
Äh, was? Instanz-Variabeln werden mit dem jeweiligen 0-Wert initialisiert. Aber was haben for-schleifen damit zu tun?

Beispiel Statistik: Wie oft wurde das Programm ausgeführt? Wie erstelle ich eine Variable, die nicht jedes mal auf den Anfangswert (hier: 0) gesetzt wird beim ausführen.
static dürfte dafür das Stichwort sein, die gehören zu Klasse und gibt es dementsprechend nur einmal im Programm.

zweite Frage: Macht eine Dekleration von Variablen am Anfang Sinn? Sollte man grundsätzlich die Variable immer am Anfang deklarieren? auch dort initialisieren?
Jein, so spät wie nötig deklarieren und so früh wie möglich initialisieren
 

BadBat

Aktives Mitglied
Code:
package test;

public class Blub {
    private int x = 5; // sichtbar in Instanzmethoden und ein unikat für jedes Objekt deiner Klasse
 
    private static int y = 10; // static Sichtbarkeit im kompletten Klassenrumpf und für alle Objekte deiner  Klasse gleich

 
 
    public int getX() {
        return x;
    }

    public int getY() {
        return y;
    }


    public void setX(int x) {
        this.x = x;
    }

    public void setY(int y) {
        Blub.y = y;
    }


    public Blub(int x) {
        this.x = x;
    }

    public void instanzMethode1(){
        int eineVariableZ = 33;
        System.out.println(eineVariableZ);
    }
 

  // funktioniert nicht da eineVariableZ hier nicht bekannt ist die sichtbarkeit ist auf instanzMethode1 beschränkt
    public void instanzMethode2(){
        System.out.println(eineVariableZ);
    }
 

    public static void main(String[] args) {
        Blub objekt1 = new Blub(5);
        Blub objekt2 = new Blub(23);
     
        // Jeder hat sein eigenes x
        System.out.println(objekt1.getX()); //---> 5
        System.out.println(objekt2.getX()); //---> 23
     
        // Aber alle das gleiche y
        System.out.println(objekt1.getY());// --->10
        System.out.println(objekt2.getY());// --->10

        //Wenn y geändert wird dann ist diese änderung für alle sichtbar
        //y wird über objekt1 geändert und über objekt2 abgerufen
        objekt1.setY(50);
        System.out.println(objekt2.getY());// ---> 50
     
    }

}
Deine Variablen haben unterschiedliche Sichtbarkeiten und Gültigkeitsbereiche.
 

Leon_2001

Aktives Mitglied
Mit "reset" meinte ich eben, wann eine Variable wieder auf den Anfangswert zurückgesetzt wird.
Als Beispiel eine for schleife
Java:
for(int i = 0; i < 3;  i++){
     int x = 0;   //x wird in jedem Durchgang auf 0 gesetzt ("resettet")
     x++; 
}

static:

Java:
public class Statistik{
     static int zähler1 = 0;
               int zähler2 = 0;
   public static void main (String[] args){

        zähler1++;
        zähler2++;
       System.out.println(zähler1 + " " + zähler2);
   }
}

Durchgang eins: 1 1
Code erneut ausgeführt: 2 1
Code erneut ausgeführt: 3 1

Daher: static Variable wird nie auf 0 zurückgesetzt, auch wenn ich mehrmals den Code asuführe? Wenn ich nun will, dass die statistic wieder auf 0 gesetzt wird (einmalig nicht als methode) muss ich dann die 0 löschen und nochmal da hinsetzen? Das kommt mir komisch vor:confused:
 

mrBrown

Super-Moderator
Mitarbeiter
Durchgang eins: 1 1
Code erneut ausgeführt: 2 1
Code erneut ausgeführt: 3 1

Daher: static Variable wird nie auf 0 zurückgesetzt, auch wenn ich mehrmals den Code asuführe? Wenn ich nun will, dass die statistic wieder auf 0 gesetzt wird (einmalig nicht als methode) muss ich dann die 0 löschen und nochmal da hinsetzen? Das kommt mir komisch vor:confused:

Der Code kann so nicht funktionieren.
Wenn du willst, dass eine Variable auf 0 gesetzt wird, dann musst du sie einfach auf 0 setzten. Da passiert weder automatisch was, noch musst du irgendwas doppelt machen.

BTW, was heißt für dich mehrmal? Mehrmal innerhalb eines Programmdurchlaufs, oder über mehrere unabhängige Durchläufe?
 

BadBat

Aktives Mitglied
???????
Durchgang eins: 1 1
Code erneut ausgeführt: 2 1
Code erneut ausgeführt: 3 1

Code:
public class Statistik{
     static int zähler1 = 0;
               int zähler2 = 0;
   public static void main (String[] args){

        zähler1++;
        zähler2++;
       System.out.println(zähler1 + " " + zähler2);
   }
}

zähler2 ist in der main garnicht bekannt.
Code:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
    Cannot make a static reference to the non-static field zähler2
    Cannot make a static reference to the non-static field zähler2
 

Leon_2001

Aktives Mitglied
Du hast eine java IDE und drückst auf Run ... Nach den Kontrollstrukturen wird alles von oben durchgelaufen. Das heißt, auch alle Variablen werden auf den Wert gesetzt, wie es beim initialisieren eben im Code steht.
Nun möchte ich aber eine Variable erstellen, die zählt, wie oft ein Code durch betätigen des "Run" Buttons, daher kompilieren und ausführen, ausgeführt wurde. Eine Statistik ... Wie eben bei einem Spiel, wenn man gewinnt soll ein Zähler für die Siege um eins erhöht werden.(Was vermutlich nicht geht?) Könnte man ein neues Spiel einfach durch eine Methode starten, wäre das ganze kein Problem ... nur weiß ich nicht, wie ich so etwas realisiere...

Wenn ich in in der Main ein Scanner Objekt habe, was irgendwas entgegennimmt, dann kann es das ja (ohne das Programm mit "run" erneut auszuführen, nur einmal ... den es steht ja nur einmal die Zeile da, in der etwas durch eingabe auf der Tastatur entgegen genommen wird).

Das heißt, es muss eine Möglichkeit geben, wie das Programm startet und der Benutzer selber kann beliebig oft Methoden wie eine neuesSpiel() Methode durch Eingabe in die Konsole aufrufen?

Jein, so spät wie nötig deklarieren und so früh wie möglich initialisieren

Das hat mir nicht so ganz geholfen.

Entschuldigt bitte für das Beispiel oben. Das war nur zu Veranschaulichung, wie ich denke, dass das mit static funktioniert ... habe ich vermutlich missverstanden.
 

mrBrown

Super-Moderator
Mitarbeiter
Nun möchte ich aber eine Variable erstellen, die zählt, wie oft ein Code durch betätigen des "Run" Buttons, daher kompilieren und ausführen, ausgeführt wurde. Eine Statistik ... Wie eben bei einem Spiel, wenn man gewinnt soll ein Zähler für die Siege um eins erhöht werden.(Was vermutlich nicht geht?) Könnte man ein neues Spiel einfach durch eine Methode starten, wäre das ganze kein Problem ... nur weiß ich nicht, wie ich so etwas realisiere...
Das klappt nur, wenn du beim beenden den Wert in einer Datei schreibst und ihn beim Starten wieder ausliest.
Wenn ich in in der Main ein Scanner Objekt habe, was irgendwas entgegennimmt, dann kann es das ja (ohne das Programm mit "run" erneut auszuführen, nur einmal ... den es steht ja nur einmal die Zeile da, in der etwas durch eingabe auf der Tastatur entgegen genommen wird).
Da fehlt ein Teil des Satzes?

Das heißt, es muss eine Möglichkeit geben, wie das Programm startet und der Benutzer selber kann beliebig oft Methoden wie eine neuesSpiel() Methode durch Eingabe in die Konsole aufrufen?
Joa, das geht ziemlich einfach mit einer Schleife, wo ist dabei das Problem?
 

BadBat

Aktives Mitglied
Sobald dein Programm beendet ist sind alle Daten weg.... Wenn du es neustartest ist es jedes mal jungfräulich wie beim ersten start. Es werden keine Daten einfach so übernommen!
Wenn du willst das einige Zeilen mehrfach ausgeführt werden nutze eine Schleife
Code:
int i = 0;
while(i >  4){
System.out.println(i++);
}
Der Code innerhalb der Schleife wird 3 mal ausgeführt.
 

mrBrown

Super-Moderator
Mitarbeiter
Hast du recht aber ne for hatte er oben schon und die scheint er ja auch nicht verstanden zu haben wenn er das Programm mehrfach ausführen möchte um bestimmte Zeilen mehrfach auszuführen.
Wenn er an einer for-schleife scheitert, versteht er das sichern nicht (abgesehen davon, dass den Rückgabewert von ++ nutzen verboten gehört :p )
 

Leon_2001

Aktives Mitglied
Hast du recht aber ne for hatte er oben schon und die scheint er ja auch nicht verstanden zu haben wenn er das Programm mehrfach ausführen möchte um bestimmte Zeilen mehrfach auszuführen.

jetzt übertreib aber mal nicht;)
Ich weiß sehr wohl wie eine for-schleife funktioniert, genauso auch alle anderen absoluten Basic Sachen.

Ich weiß, wie ich einen Code mehrmals ausführen lasse, nur eben nicht "unendlich oft" ... heißt auf Wunsch des Nutzers. Eine Zeile immer vorhanden(Kommandozeile) und der Nutzer kann von dort aus die Methoden aufrufen, so oft er will. Wie eben auch bei richtigen Programmen... der Nutzer kann die Anwendung schließen und wieder öffnen und neu ausführen usw. ohne, dass die Daten verloren geht(= Das Programm darf quasi nicht geschlossen werden).

Ich habe bisher hauptsächlich Methoden geschrieben, während die main Methode entweder nicht vorhanden war (weil BlueJ) oder sie schon vorgefertigt war ... eingaben sind sowieso neu für mich.

Ums kurz zu machen:

Wie schreibe ich ein Programm in Eclipse, dass eine variable hat. Diese wird durch Eingabe des Benutzers von erhöhe() um einen Wert erhöht. Die Methode erhöhe soll der Nutzer zu jeder Zeit in seiner Konsole in Eclipse eingeben können (auch wenn Eclipse zwischenzeitlich geschlossen wurde), so oft er will.

Immer wenn System.in(erhöhe()) führe erhöhe() aus. Geht das irgendwie umzusetzen ohne eine externe Datei, wo die Variable immer gespeichert wird, wie oben von mrBrown der Vorschlag kam?

Vorraussetzung: Der Nutzer kompiliert natürlich das Programm nie (bzw. nur einmal am Anfang).Denn dann wäre die Variable ja wieder "jungfräulich".
 

mrBrown

Super-Moderator
Mitarbeiter
Vorraussetzung: Der Nutzer kompiliert natürlich das Programm nie (bzw. nur einmal am Anfang).Denn dann wäre die Variable ja wieder "jungfräulich".
Da besteht ein Verständnissproblem - nicht das kompilieren macht es "Jungfräulich", sondern das starten. Ob man vor jedem Start neu kompiliert macht keinen Unterschied.
 

JStein52

Top Contributor
Wie schreibe ich ein Programm in Eclipse, dass eine variable hat. Diese wird durch Eingabe des Benutzers von erhöhe() um einen Wert erhöht. Die Methode erhöhe soll der Nutzer zu jeder Zeit in seiner Konsole in Eclipse eingeben können (auch wenn Eclipse zwischenzeitlich geschlossen wurde), so oft er will.
Du hast doch oben schon gelesen dass das nicht geht. Und ich dachte mir schon dass du von BlueJ kommst. Das gehört absolut verboten !
 

Leon_2001

Aktives Mitglied
Du hast doch oben schon gelesen dass das nicht geht. Und ich dachte mir schon dass du von BlueJ kommst. Das gehört absolut verboten !

Ja so halb. Es wurde geschrieben, dass man relativ einfach ein Programm schreiben kann, in der man beliebig oft durch eine Eingabe Methoden aufrufen kann. Ich denke aber, da gab es ein Missverständnis.
Auch das mit BlueJ muss ich nochmal etwas korrigieren. Davon kommen tue ich eig nicht, ich habe angefangen mit Eclipse und CodeOcean ... BLueJ wurde mir in der Schule aufgezwungen.

Ich denke dennoch, dass BlueJ seine Vorteile hat, aber das gehört in einen anderen Thread in dem ich mich auch schon dazu geäußert habe.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
O Welcher Object-Lock-Pool bei static Variablen? Java Basics - Anfänger-Themen 3
T variablen klassen übergreifend Java Basics - Anfänger-Themen 12
T Variablen Java Basics - Anfänger-Themen 1
N Verständnis Frage zu Variablen Java Basics - Anfänger-Themen 3
M Aufsummieren von variablen Wertegrößen Java Basics - Anfänger-Themen 17
M Mehrere Daten/ Variablen Speichern Java Basics - Anfänger-Themen 9
J Speichern von zwei Variablen durch Auslesen aus einem Numberfield Java Basics - Anfänger-Themen 2
ashi Variablen aufrufen Java Basics - Anfänger-Themen 17
U Warum kann ich, auf private Variablen zugreifen, wenn ich ein Objekt in der Klasse, die private Variablen hat erstelle und dort drauf zugreifen will? Java Basics - Anfänger-Themen 7
B Konkatenieren eines Strings und inkremtierenden Zahl zu einer INT Variablen Java Basics - Anfänger-Themen 7
A 2 Strings vergleichen in einer methode wenn man mit Globalen variablen arbeitet Java Basics - Anfänger-Themen 12
C Konstruktoren und Variablen Java Basics - Anfänger-Themen 42
F Auf Variablen eines Konstruktors zugreifen Java Basics - Anfänger-Themen 4
N Variable aus anderen Variablen in statischer Klasse berechnen/abspeichern? Java Basics - Anfänger-Themen 4
M Wie kann ich bei int-Variablen im exception handler auf bestimmte Strings reagieren? Java Basics - Anfänger-Themen 5
M Warum dürfen Objekte einer Klasse auf statische Variablen dieser Klasse referenzieren? Java Basics - Anfänger-Themen 10
B Variablen Variablen übertragen ohne Klassen Java Basics - Anfänger-Themen 5
B Methoden Methoden haben kein Zugriff auf variablen Java Basics - Anfänger-Themen 4
T Java Swing - Dreieck zeichnen mit verschiedenen Variablen Java Basics - Anfänger-Themen 8
Arif Vererbung Methodenvererbung mit finalen Variablen Java Basics - Anfänger-Themen 1
M Wie kann ich ein Objekt erstellen, wenn sich der Klassenname in einer Variablen befindet? Java Basics - Anfänger-Themen 10
S Variablen Variablen in einer Schleife erstellen lassen Java Basics - Anfänger-Themen 11
J Ich brauche Hilfe bei einem Code (Variablen speichern) Java Basics - Anfänger-Themen 29
F Variablen Werte einer Klasse überschreiben Java Basics - Anfänger-Themen 4
N Speichern von Werten in Variablen nach Schließen des Programms Java Basics - Anfänger-Themen 3
J Frage dazu Variablen klassenübergreifend zu verändern Java Basics - Anfänger-Themen 22
M Java Instanz-Variablen ? Java Basics - Anfänger-Themen 3
B Variablen von Methoden übertragen Java Basics - Anfänger-Themen 2
M Variablen umbenennen Java Basics - Anfänger-Themen 1
T Körper Brechnung - Lokale Variablen in Methoden übergeben Java Basics - Anfänger-Themen 10
P Zugriff auf Variablen anderer Klassen in Greenfoot Java Basics - Anfänger-Themen 1
mars90 Fehler in der Variablen Deklaration Java Basics - Anfänger-Themen 8
E Variablen in formatierter Ausgabe Java Basics - Anfänger-Themen 15
V Schleife für das Einlesen von Werten für int Variablen, die Bestandteil von Arrays sein sollen Java Basics - Anfänger-Themen 16
M Komisches Verhalten der Variablen Java Basics - Anfänger-Themen 6
H Variablen Multiplikation einer inkrementierten Variablen Java Basics - Anfänger-Themen 5
scratchy1 Variablen vertauschen wenn Bedingung "umgedreht" wird Java Basics - Anfänger-Themen 40
J Variablen mit einer anderen Klasse bekannt machen Java Basics - Anfänger-Themen 7
C Methoden Problem beim Speichern von Variablen Java Basics - Anfänger-Themen 1
A Übergreifende Variablen Java Basics - Anfänger-Themen 17
A Variablen Verständnisfrage bzgl. Variablen/Referenzen Java Basics - Anfänger-Themen 3
H Variablen Methode zum Abfragen von Variablen aus Subklassen Java Basics - Anfänger-Themen 9
P Variablen Variablen voneinander abhängig Java Basics - Anfänger-Themen 54
F Liste nach einer Variablen sortieren Java Basics - Anfänger-Themen 6
L Variablen in anderen Klassen nutzen Java Basics - Anfänger-Themen 6
M For-Schleife durch zwei versch. Variablen begrenzen Java Basics - Anfänger-Themen 27
J Klassen Variablen in andere Klassen oder Methoden übernehmen Java Basics - Anfänger-Themen 1
P Liste auslesen und in Variablen speichern Java Basics - Anfänger-Themen 7
temi Redundante Variablen Java Basics - Anfänger-Themen 29
Aprendiendo Zweifel mit versteckter Variablen Java Basics - Anfänger-Themen 16
L Variablen einmal nur zu weisen Java Basics - Anfänger-Themen 62
D Statische Variablen/Methoden Java Basics - Anfänger-Themen 3
R Abfrage von Variablen in Unterklassen einer ArrayList Java Basics - Anfänger-Themen 9
M Listener für Button - Wert von Variablen verändern Java Basics - Anfänger-Themen 14
S Vererbung Variablen klassenübergreifend nutzen Java Basics - Anfänger-Themen 42
R Auf Variablen einer anderen Klasse zugreifen? Java Basics - Anfänger-Themen 1
D Fehlermeldung obwohl Variablen bereits deklariert sind? Java Basics - Anfänger-Themen 14
E 2 Probleme - Datum & private finale Variablen Java Basics - Anfänger-Themen 5
Aruetiise Variablen JFrame und Variablen Java Basics - Anfänger-Themen 3
T Übernahme einer Variablen im ActionListener/ActionEvent Java Basics - Anfänger-Themen 2
D Kapselung final Variablen mit Getter? Java Basics - Anfänger-Themen 2
C Variablen von einem JFrame in einen anderen übertragen Java Basics - Anfänger-Themen 3
P Interface Variablen-Inhalte werden nicht übergeben Java Basics - Anfänger-Themen 3
C Variablen in Schleifen außerhalb verwenden Java Basics - Anfänger-Themen 2
S Variablen Flexible Variablen Namen Java Basics - Anfänger-Themen 3
R Erste Schritte 3 Variablen hochzählen lassen Java Basics - Anfänger-Themen 1
RowdyN Variablen Variablen beliebig benennen? Java Basics - Anfänger-Themen 6
S OOP Variablen zwischen mehreren Klassen Java Basics - Anfänger-Themen 11
T Koordinatensystem zeichnen - Variablen merken? Quadratische Funktion zeichnen? Java Basics - Anfänger-Themen 5
H Variablen einer Schleife zwischenspeichern Java Basics - Anfänger-Themen 2
P Klassen Variablen von einer Klasse zur anderen Java Basics - Anfänger-Themen 5
H Objekt überschreibt Variablen vorheriger Objekte Java Basics - Anfänger-Themen 2
P Variablen in Excel speichern Java Basics - Anfänger-Themen 6
S PHP Aufruf mit mehreren Variablen Java Basics - Anfänger-Themen 2
F Variablen unterschiedlicher Datentypen Java Basics - Anfänger-Themen 6
S ActionListener und Statische Variablen Java Basics - Anfänger-Themen 4
Arif Vererbung Vererbung Variablen überschreiben Java Basics - Anfänger-Themen 1
L Vergleich zweier Variablen, mit Abweichung Java Basics - Anfänger-Themen 3
P Variablen einer Methode in andere Method übergeben Java Basics - Anfänger-Themen 6
G Variablen Verwendung von Variablen in anderer Klasse Java Basics - Anfänger-Themen 6
P Textfelder in Variablen speichern Java Basics - Anfänger-Themen 13
K arraygröße durch variablen Konstruktor? Java Basics - Anfänger-Themen 7
J Vererbung Variablen aus Superklasse übernehmen Java Basics - Anfänger-Themen 2
L Variablen aus TXT Datei auslesen und vergleichen. Java Basics - Anfänger-Themen 5
K Welchen Typ haben Variablen in Default-Methoden und in statischen Methoden in Schnittstellen? Java Basics - Anfänger-Themen 4
K Wieso muss man finale statische Variablen sofort oder eben im Konstruktor initialisieren? Java Basics - Anfänger-Themen 2
L zwei Variablen gleichzeitig übergeben Java Basics - Anfänger-Themen 6
J Vererbung privater Variablen Java Basics - Anfänger-Themen 7
D Klassen Verhalten von Klassenvererbung bei Variablen Java Basics - Anfänger-Themen 1
G Alle Objekte und Variablen automatisch ausgeben Java Basics - Anfänger-Themen 7
S OOP Werte von Vektoren mit 3 Variablen ausgeben lassen Java Basics - Anfänger-Themen 3
A Variablen aus einer Schleife gezielt auslesen Java Basics - Anfänger-Themen 11
A Methoden Zugriff auf eingelesene Variablen in der main Methode (ohne Änderung der Parameterliste) Java Basics - Anfänger-Themen 4
K Enigma, variablen übernehmen Java Basics - Anfänger-Themen 6
F Erste Schritte Dynamische Variablen Java Basics - Anfänger-Themen 15
N Variablen zurück casten Java Basics - Anfänger-Themen 3
M Repräsentation von variablen/OOP Java Basics - Anfänger-Themen 2
B Probleme beim einlesen einer short variablen für einen Array Java Basics - Anfänger-Themen 1
S Warum erlaubt ein while-Loop keine Variablen-Declaration wie der for-Loop..? Java Basics - Anfänger-Themen 6
S Variablen Variable erzeugen und Array mit Variablen befüllen Java Basics - Anfänger-Themen 26

Ähnliche Java Themen

Neue Themen


Oben