Stack, Heap

PeterPan400

Mitglied
Es liegen im...
Stack: Methoden und lokale Variablen
Heap: Objekte und Instanzvariablen


Meine Frage zum Stack:
Sind in folgendem Beispiel beide Variablen lokale Variablen?
Wie erkenne ich nicht lokale Variablen?
-------
Java:
public class Test{
static int a1=4;

public void methode1(){
int a2 = 5;
}
}
-------
 
Heißen die lokale Variablen in Java nicht Methoden Variablen? ,weil es gibt ja auch schleifen Variablen die eigentlich auch lokal sind aber sichtbar nur innerhalb einer Schleife,und die classen Variablen(Global?Instanz?).
static a1 ist ja eine Variable die kein Objekt der classe Test braucht um da drauf zugreifen zu können.
Wäre die Variable nicht static sollte mein ein Objekt der Klasse erstellen um da drauf zugreifen zu können.
 
Heißen die lokale Variablen in Java nicht Methoden Variablen?
Nein, sie heißen lokale Variablen. Gibt aber sicher einige, die sie Methoden Variablen nennen.

weil es gibt ja auch schleifen Variablen die eigentlich auch lokal sind aber sichtbar nur innerhalb einer Schleife,
Ja, die Schliefen Variablen sind auch lokale Variablen, wie alle innerhalb eines Blocks deklarierte.
Sichtbar sind sie jeweils lokal in ihrem Block.

und die classen Variablen(Global?Instanz?).
static a1 ist ja eine Variable die kein Objekt der classe Test braucht um da drauf zugreifen zu können.
Klassen oder statische Variable werden die üblicherweise genannt (bzw Feld oder sonstige Begriffe je nach Kontext), global sind die nicht, und Instanzvariablen auch nicht.
 
Hey,
finde das Thema interessant und habe auch noch eine Frage.

Sagen wir mal ein Programm sieht so aus:

Code:
public class Clown {
public static int pi = 3; //statische Variable
int clowncar; //gloabale Variable?
Clown c //Instanzvariable
public static void main(String[] args) {
int n=4; //lokale Variable
for(int i=0;i<n;i++)
System.out.println(i);
}
}

ist eine globale Variable nicht auch eine statische Variable? Klar kann man die Statische Variable auch über Clown.pi von einer anderen Klasse aus aufrufen oder ist das der grund zwischen "statischer" Variable und "globaler" Variable?

LG
 
Das kommt auf deine Definition von global an. Per se gibt es in Java das Konzept von globalen Variablen nicht. Es gibt Klassenvariablen (static) und Instanzvariablen - also die Attribute einer Instanz/Objekt - (das was du hier als global bezeichnest).
 
Hab mal schnell gegooglet also unter C gibt es globale Variablen. Dort gibt es ja keine Klassen so sieht eine Globale Variable dort aus:
C:
#include<stdio.h>

// globale Variable
int counter = 0;

void zaehlen() {
    counter += 1;
}

int main() {
    zaehlen();
    printf("Zaehler: %d\n", counter);
    return 0;
}

Ist eine Variable global, so kann man von jedem Ort aus auf sie zugreifen. Eine Variable wird global, indem man sie nicht in einem Block, sondern außerhalb der Hauptfunktion deklariert.

Könnte man dann sagen das eine Variable
Code:
public static int counter = 0;
in einer Klasse nicht auch eine "Globale" Variable ist? Natürlich ist mir bewusst durch die Klasse nennen wir sie mal Test müsste man dann schreiben Test.counter doch durch public static sollte man von überall drauf zugreifen können. Oder ist das jetzt wieder nur Definitionssache das man es anders nennt FERTIG?

LG
 
Das Thema sollte zwar erledigt sein aber hier nochmal:
  • Klassenvariablen - sind innerhalb einer ganzen Klasse sichtbar. Eine Klassenvariable wird innerhalb einer Klasse mit Hilfe des Schlüsselworts static deklariert:
    static Typname Variablenname;
    Eine solche Variable ist dann auch in jedem Objekt dieser Klasse verfügbar und hat somit insbesondere unabhängig von dem jeweiligen Objekt immer den gleichen Wert;

  • Objektvariablen - sind innerhalb eines Objektes sichtbar. Eine Objektvariable wird wie eine Klassenvariable innerhalb einer Klasse deklariert:
    Typname Variablenname;
    Eine solche Variable kann in jedem Objekt dieser Klasse einen anderen Wert haben. Genau genommen wird für jedes neue Objekt eine neue Variable mit dem gleichen Namen erzeugt;

  • Lokale Variablen - sind innerhalb von Blöcken sichtbar in denen sie deklariert wurden. Ein Block wird dabei durch geschweifte Klammern definiert, d.h. etwa eine Methode;
 
Genau von dort ich wollte gestern Abend da eigentlich noch das Beispiel von unten mit rein Kopieren und dann noch den Link. Dazu bin ich aber nicht mehr gekommen um 21 Uhr war Schluss 😀
Denke damit ist das Thema hier auch durch 🙂

hab das nur nachträglich gemacht als "Zusammenfassung" denn so was finde ich immer gut wenn man dann ein Thema durchschaut muss man nicht jedes Kommentar durchlesen!
 

Neue Themen


Zurück
Oben