globale und lokale Variablen

Status
Nicht offen für weitere Antworten.

babuschka

Top Contributor
Hallo Community,
könnt ihr mir vielleicht anhand einer beispiel zeigen wie eine lokale und globale variable aussieht?Kann mir das so leider nicht so ganz vorstellen :( Danke im Voraus.
 

babuschka

Top Contributor
public class Main{
public static void main(String [] args){

int b=5; (Globale Variable??)
System.out.println(b);

for(Bedingung){
int a=3; (Lokale Variable???)
System.out.println(a);
}
}

Habe die mir so vorgestellt.Stimmen die so? Oder sieht das total anderst aus?
 
Zuletzt bearbeitet von einem Moderator:

hdi

Top Contributor
Globale Variablen sind alle Variablen, die "lose" im Klassen-Rumpf
stehen, und nicht in einer Methode/Konstruktor. "Stehen" ist vllt schlampig gesagt, genauer meint es "deklariert werden".
Alles andere sind lokale Variablen.

Bsp:

Code:
public class Auto{

   private int ps; // global

   public void eineMethode(){
          int eineLokaleVariable;
   }
}

Lokale Variablen haben eine "Lebensspanne" nur innerhalb
des Rumpfes, in dem sie deklariert wurden.
zB gibt es die Variable "eineLokaleVariable" wirklich nur in der Methode
"eineMethode". In einer weiteren Methode könntest du darauf nicht
zugreifen, die Variable "stirbt" sobald die Methode verlassen wird.

Ein "Rumpf" ist alles zwischen einem { und }. Das ist also nicht unbedingt eine ganze Methode:

Code:
public void andereMethode(){
     int x = 5; // ab hier ist x sichtbar
     if(x == 5){
            String s = "hallo"; // ab hier ist s sichtbar
            System.out.println(s);
     } // ab hier ist s wieder weg
     int y = 2; // ab hier ist y sichtbar
} // ab hier sind x und y wieder weg

Gloable Variablen allerdings sind überall in der Klasse sichtbar:
In jeder Methode, sowie im Konstruktor. Sie "sterben" auch erst,
wenn das Objekt zerstört wird. Solange das Objekt aber "lebt"
(ich hoffe du weisst überhaupt was ein "Objekt" ist) gibt es diese
Variable, und ihr Wert bleibt auch solange gleich bis er geändert wird.
Und ist ansonsten immer und überall der selbe, egal wie oft man
irgendwas mit dem Objekt tut.
 
Zuletzt bearbeitet:

0x7F800000

Top Contributor
Einspruch, euer Ehren...
Code:
   private int ps; // "global"?   "private Membervariable" trifft's hier um einiges besser.

Gloable Variablen allerdings sind überall in der Klasse sichtbar
private member vars sind nun mal wirklich nicht überall in der klasse sichtbar... Dein Beispiel ist total irreführend.


Was ich mir in Java unter einer "globalen variable" vorstellen würde, wäre sowas:
Code:
class Math{
  ...
  public static final double PI=3.2;
  ...
}
Die ist wirklich überall dort sichtbar, wo auch die Klasse sichtbar ist, im Fall von Math ist das überall...

"Lokale" Variablen kann man nicht so toll "lokalisieren", weil es grob geschätzt ~2^16 verschiedene Verschachtelungsebenen geben kann. Ich würde eine Member-Variable nicht in diese ganze "lokal-global"-Sprechweisen reinquetschen. Wozu auch, wenn man genau spezifizieren kann, wo die Variable sichtbar ist, dazu gibt's in Java ja zum Glück genug Schlüsselwörter...
 

hdi

Top Contributor
"Lokale" Variablen kann man nicht so toll "lokalisieren"
Wie? Eine lokale Variable existiert innerhalb eines Rumpfes, in der sie
deklariert wurde. Keine Ausnahme, wieso nicht toll lokalisieren? Ist doch total
klar, egal wie krass du das verschachtelst.
Sei wird geboren mit dem { und stirbt mit dem dazugehörigen }.

private member vars sind nun mal wirklich nicht überall in der klasse sichtbar... Dein Beispiel ist total irreführend.
Das wär mir neu!? Klar sind private Member vars überall in dieser Klasse
sichtbar. Es geht hier nicht um Inner-Classes, es geht um die eigene Klasse.
Und das hat mit statisch oder public auch nix am Hut.

Oder hab ich hier wieder falsche Bezeichnungen gelernt? Global, so lernt ich es,
heisst eben nur, dass die Variable lose in der Klasse steht.
Ob nun Member oder nicht, public oder nicht, hat damit doch nix zu tun.
"Global" ist ein ortsbezogener Ausdruck, der doch nur von der Verfügbarkeit einer Variable redet.
Hier gebe ich dir Recht: Das Wort "sichtbar" hätte ich vllt nicht verwenden sollen, sondern eben "verfügbar", im Sinne
von innerhalb der Klasse sichtbar.

(Bsp, wo eine private member var nicht sichtbar ist in ihrer Klasse?)

EDIT: und komm mir nicht mit Überschatten, das hat nix mit den Definitionen von global/lokal zu tun
 
Zuletzt bearbeitet:

0x7F800000

Top Contributor
Wie? Eine lokale Variable existiert innerhalb eines Rumpfes, in der sie
deklariert wurde. Keine Ausnahme, wieso nicht toll lokalisieren? Ist doch total
klar, egal wie krass du das verschachtelst.
Sei wird geboren mit dem { und stirbt mit dem dazugehörigen }.
Okay, gut, eine lokale Variable lebt seit der Deklaration bis zum Ende des umgebenden Blocks {} das ist schon äußerst genau, ich wollte halt nur drauf hinweisen, dass man das beliebig krass verschachteln kann.
Das wär mir neu!? Klar sind private Member vars überall in dieser Klasse
sichtbar.
...
(Bsp, wo eine private member var nicht sichtbar ist in ihrer Klasse?)
Njaain. Das kann man doch so nicht sagen...

Code:
class A{
   private int x;
   public A(int _x){ x=_x; }
   public void f(A a){
      System.out.println(this.x); //geht
      System.out.println(a.x); //geht natürlich auch, genau das meinst du doch?
   }
}
Aber da kann man doch nicht sagen dass die Variable "überall in der Klasse sichtbar" wäre... Wenn ein Objekt vom Typ A (etwa dieses a) von außen an irgendeine Methode der Klasse A übergeben wird, dann gewährt er einen uneigeschränkten Zugriff auf all seine "Innereien", auch auf die Variable x;

Aber jetzt mal folgendes Beispiel:
Code:
class Blackhole{
   private List<Object> content;
   public Blackhole(){
      content=new LinkedList<Object>();
   }
   public void eat(Object o){
      content.add(o);
   }
   //keinerlei getter...
}
und nun zusammen mit der Klasse A:
Code:
public class Main{
public static void main(String... _){
   Blackhole supermassive=new Blackhole();
   supermassive.eat(new A(123456789));
}
}
so, und jetzt sag ich dir, dass mir die höchstgeheime Zahl 123456789 extrem wichtig ist. Du kannst in deiner Klasse A machen was du willst: ohne Reflection-hacks holst du die Zahl 123456789 niemals aus dieser "verschluckten" Instanz raus, obwohl die Instanz wohlauf ist und vom GC nicht eingesammelt wurde, sondern sicher im Blackhole verstaut wird.

Sowas ist doch in keiner Weise "global"... Versuch mal das PI von jemanden so zu verstecken, ohne gleich die ganze Math-Klasse rauszuladen oder sonswas.
 

hdi

Top Contributor
Hm okay ich sehe wir haben einfach wieder verschiedene Definitionen gelernt.
Ich meine mit lokal/global nur: Wo kann ich eine Variable innerhalb der eigenen
Klasse, im Sinne vom Quell-Code dieser Klasse, ansprechen?
Wo ist sie "bekannt", wo nicht?

Sprich: Wo kommt ein "cannot find symbol" Fehler innerhalb des Quell-Codes
der Klasse? Bei globalen (nach meiner Definition): Nirgends. Unabhängig
von jeglichen Settings wie final, public, static usw.

Bei lokalen: Überall, wo es ausserhalb der {} im Quell-Code ist.

Was nun wieder die "richtigen" Definitionen sind? Hm.. ich erhebe keinen
Anspruch drauf, dass meine richtig sind. Es ist nur so wie ich es kenne,
das sage ich halt wenn man mich fragt: Was ist der Unterschied zwischen
lokalen/globalen Variablen?
Und das, was ich gesagt habe, will zB die Uni hören, und bringt einem die Uni
bei.
 

0x7F800000

Top Contributor
Hm okay ich sehe wir haben einfach wieder verschiedene Definitionen gelernt.
Ich meine mit lokal/global nur: Wo kann ich eine Variable innerhalb der eigenen
Klasse, im Sinne vom Quell-Code dieser Klasse, ansprechen?
Wo ist sie "bekannt", wo nicht?

Sprich: Wo kommt ein "cannot find symbol" Fehler innerhalb des Quell-Codes
der Klasse? Bei globalen (nach meiner Definition): Nirgends. Unabhängig
von jeglichen Settings wie final, public, static usw.
Okay. Das wäre doch auch mal eine imho zwar etwas unübliche, aber sinnvolle Definition.

Ich verstehe unter einer "globalen Variable" eine Variable, die überall aus jeder Stelle im Code erreichbar ist, unabhängig von irgendwelchen Klassen oder Methoden (aber zwangsläufig immer anhängig von imports...). Das trifft auf Membervariablen natürlich fast nirgends zu, deswegen hat's in meine Definition nicht gepasst.
 

babuschka

Top Contributor
Was nun? :D bin durcheinander gekommen

Globale Variable: werden außerhalb einer Methode definiert und stehen im ganzen Programm für alle Blöcke zur Verfügung.

Lokale Variable: werden innerhalb einer Methode definiert oder als Parameter übergeben. Sie sind innerhalb der {} Klammern gültig.

Stimmen die definitionen?

Ist es also nicht:

public class Main {
int zahl=4; // Lokale da es außerhalb einer Methode definiert wird

public static void main(String[] args) {
int g=3; // Lokale Variable? ist nur innerhalb der Methode gültig (nicht oben)

System.out.println(g);
}
 
Zuletzt bearbeitet von einem Moderator:

Fu3L

Top Contributor
Was nun? :D bin durcheinander gekommen

Globale Variable: werden außerhalb einer Methode definiert und stehen im ganzen Programm für alle Blöcke zur Verfügung.

Lokale Variable: werden innerhalb einer Methode definiert oder als Parameter übergeben. Sie sind innerhalb der {} Klammern gültig.

Stimmen die definitionen?

Ist es also nicht:
Code:
public class Main {
int zahl=4; // Lokale da es außerhalb einer Methode definiert wird

public static void main(String[] args) {
int g=3; // Lokale Variable? ist nur innerhalb der Methode gültig (nicht oben)

System.out.println(g);
}

Da haste dich, glaub ich, verschrieben: zahl is nach hdi's Definition natürlich "global". Eine Membervariable von Main...
 

Fu3L

Top Contributor
also dann genau umgekehrt?

3 ist lokal 4 ist global?

g (3) ist lokal, weils innerhalb einer Methode definiert wurde und dort, und zwar nur dort, komplett gültig.

zahl (4) ist eine Membervariable von Main und daher aus allen nicht-statischen Methoden von Main erreichbar (also nach hdi's Definition "global").

Edit: Also Antwort auf die Frage: Ja ;)
 
Zuletzt bearbeitet:
S

Spacerat

Gast
Wenn man's weniger "schlampig" ;-) ausdrücken möchte...

Eine Variable ist "global", wenn sie mit "private", "public" usw. modifiziert werden kann, was nur innerhalb von Klassen-Definitions-Blöcken, ausserhalb von Methoden funktioniert. Lokale Variablen existieren dagegen nur in Anweisungs-Blöcken wie Methoden-Rümpfe, try / catch Blöcken und Schleifen.

"private int sonstwas" ist demnach auch global, jedoch stark in der Sichtbarkeit eingeschränkt.

Der einzige Modifizierer, der auf lokale Variablen angewendet werden kann ist "final"
 

hdi

Top Contributor
synchronized?

Ist nicht getestet aber ich überleg mir ich starte innerhalb einer Methode
2 Threads (inner classes!) zum Hochzählen einer lokalen Variable.
Geht das nicht? final sychronzied?

edit: ok saudaummes beispiel ;)
 
S

Spacerat

Gast
ist synchronized 1. ein Modifier, oder 2. mehr 'ne Anweisung einen Monitor zu "aquirieren"? Sicher bin ich mir nicht, aber ich tippe mal auf 2.
 

Marco13

Top Contributor
Ich finde ja, dass es "globale" Variablen in Java nicht gibt. Eine Variable ist immer an eine Klasse oder eine Instanz gebunden. Wie und wo man sie sieht, hat damit IMHO nichts zu tun. Ist aber nur meine subjektive Sicht.

Synchronized ist zwar einerseits ein modifier, andererseits kann man auch schreiben
Code:
void foo()
{
    synchronized (bar)  { ... }
}
und DORT ist es sicher KEIN Modifier.... Das allgemeinste, was mir einfallen würde: Synchronized ist ein "Schlüsselwort".... :rolleyes:
 

hdi

Top Contributor
Bevor es wieder losgeht kann ja einer in die JLS kucken.
Stichwort global/lokal und synchronized/modifier.

Aber ich geb mir das sicherlich nich ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Globale Maus Allgemeine Java-Themen 7
Tommy Nightmare Klassen Globale Klassen erstellen Allgemeine Java-Themen 7
M Generische Methoden mit Java und globale Variablen Allgemeine Java-Themen 9
B Globale Hotkeys Allgemeine Java-Themen 6
N suche globale Tastenabfrage Allgemeine Java-Themen 6
L "globale" properties Datei Allgemeine Java-Themen 4
H globale Variable wird nicht überall erkannt Allgemeine Java-Themen 3
P globale Varibalen verwenden? Allgemeine Java-Themen 13
H lokale Variable bei Optional verwenden Allgemeine Java-Themen 11
C Abstrakte Klasse, lokale Variable-Problem Allgemeine Java-Themen 1
X Bild -> lokale Variable -> DB -> lokale Variable Allgemeine Java-Themen 3
F JavaMail - Lokale eMail-Datei einlesen und parsen? Allgemeine Java-Themen 9
C Webstart: Zugriff auf lokale Dateien? Allgemeine Java-Themen 2
M Lokale Maxima und Minima in Wertereihe Allgemeine Java-Themen 15
M java.awt. Desktop browse lokale datei aus jar Allgemeine Java-Themen 4
R in einem neuen Runnable() eine lokale Varibale verwenden Allgemeine Java-Themen 2
F Warum lokale Konstanten klein schreiben? Allgemeine Java-Themen 4
W Zugriff auf lokale serielle Schnittstelle via Applet Allgemeine Java-Themen 3
flashfactor Bin. Bild aus SAP in eine lokale Datei speichern Allgemeine Java-Themen 5
C Erste Schritte Variablen in abhängigkeit von Git branch Allgemeine Java-Themen 7
Fabiator Variablen Variablen Zählen Allgemeine Java-Themen 3
S Mit Methoden kann man definieren für was <T> steht. Geht das auch irgendwie für Variablen? Allgemeine Java-Themen 12
berserkerdq2 Labels in IJVM sind keine lokalen Variablen oder? Allgemeine Java-Themen 2
O Fehler bei Variablen Allgemeine Java-Themen 2
N File Path mit Variablen angeben Allgemeine Java-Themen 1
nonickatall Methoden Kann man Klassen/Methoden aus Variablen heraus aufrufen? Allgemeine Java-Themen 6
R Geometry erstellen die abhängig von Variablen ist Allgemeine Java-Themen 6
O Formatierte String ausgabe bei vier Variablen in einer Zeile Allgemeine Java-Themen 1
P static Blocks und variablen Allgemeine Java-Themen 41
S Klassen Einfügen von unbekannter menge an Variablen in eine Klasse mithilfe von ASM Allgemeine Java-Themen 5
V Datentypen Graphikrechner 2/Strings und Variablen in Doubles umwandeln Allgemeine Java-Themen 6
S Kann man Variablen oder Felder definieren deren Typ zwei Interfaces ist..? Allgemeine Java-Themen 9
M Wie kann man eine void Methode mit Variablen von zwei verschiedenen Objekten ausführen? Allgemeine Java-Themen 15
B Übernommene Variablen(werte) aus der Main-Klasse ändern? Allgemeine Java-Themen 9
D BlueJ, Variablen die mehrfach vorkommen gleichzeitig umbenennen Allgemeine Java-Themen 3
C Variablen Variablen mit unendlichem Wert Allgemeine Java-Themen 22
J Variablen Mehrere int-variablen in txt abspeichern und danach wieder auslesen Allgemeine Java-Themen 1
T Maximale Felder maximale Variablen Allgemeine Java-Themen 2
W Lebendige Variablen herauslesen Allgemeine Java-Themen 1
K Summierung einer Variablen Allgemeine Java-Themen 5
B Gibt es eine Funktion die den Datentyp einer Variablen ermittelt? Allgemeine Java-Themen 8
X Threads Externe Variablen in Run Methoden verändern Allgemeine Java-Themen 4
Messoras Klassen Sämtliche Variablen einer Klasse übernehmen Allgemeine Java-Themen 6
K Static Variablen verbieten Allgemeine Java-Themen 10
I Problem beim Aufrufen, von Objektmethoden/ -variablen Allgemeine Java-Themen 6
J Text lesen und in Variablen speichern Allgemeine Java-Themen 3
A Best Practice Variablen vertauschen - Performance Allgemeine Java-Themen 1
F Variablen Variablen schachteln Allgemeine Java-Themen 6
7 6 int variablen vergleichen Allgemeine Java-Themen 34
C Threads Variablen in einem Thread Aktualisieren Allgemeine Java-Themen 17
M Variablen Variablen in Text einbinden Allgemeine Java-Themen 5
K Überschreiben von Variablen bei rekursivem Funktionsaufruf Allgemeine Java-Themen 2
R Übergreifende Variablen? Allgemeine Java-Themen 10
OnDemand Input/Output Variablen in Datei Speichern um sie wieder auszulesen Allgemeine Java-Themen 4
D Variablen zur Laufzeit global speichern (Registry Pattern?) Allgemeine Java-Themen 6
iB0T "goto" Befehl aus Batch in Java und Variablen wert immer wieder neu setzen Allgemeine Java-Themen 4
D ClassLoader für Variablen einer Klasse setzen Allgemeine Java-Themen 24
B Methoden Alle Methoden und Variablen aus Java-Dateien auslesen. Allgemeine Java-Themen 7
D Alle Variablen final setzen ? Allgemeine Java-Themen 26
C Kapselung Warum graift man auf Variablen nur über Methoden und nich direkt zu? Allgemeine Java-Themen 10
C Classloading und statische Variablen Allgemeine Java-Themen 2
K Variablen speichern Allgemeine Java-Themen 2
S Variablen bei Aufruf zurücksetzen Allgemeine Java-Themen 4
faetzminator statische Variablen in Interface - Vererbung? Allgemeine Java-Themen 9
V Gibt es einen Variablen Cast? Allgemeine Java-Themen 8
K Mehrere JVMs die auf eine Klasse mit statischen Variablen zugreift Allgemeine Java-Themen 19
D Wann sollte ich statische Methoden und Variablen benutzen? Allgemeine Java-Themen 44
J Statische Variablen, Threadübergreifend. Allgemeine Java-Themen 4
E Variablen anderer Klassen auslesen (nur Name bekannt) Allgemeine Java-Themen 4
P Variablen in einer anderen Klasse auf Änderungen überwachen Allgemeine Java-Themen 12
V Typargument einer Variablen erfragen Allgemeine Java-Themen 4
B Rechnen mit mehreren Variablen Allgemeine Java-Themen 2
G Thread variablen Sichtbarkeit Allgemeine Java-Themen 15
J Java Pfad nicht mehr in Path Variablen??? Allgemeine Java-Themen 2
T Mit JNI finale Variablen überschreiben Allgemeine Java-Themen 14
T JNI -> auf Java-Variablen etc zugreifen Allgemeine Java-Themen 6
M Bezeichnung für Component-Variablen Allgemeine Java-Themen 6
M Variablen an Java-Programm übergeben Allgemeine Java-Themen 3
Airwolf89 dynamischer Zugriff auf Variablen/ Objekte Allgemeine Java-Themen 4
A Überschreibung von Variablen Allgemeine Java-Themen 3
A JavaCC: Variablen zaehlen Allgemeine Java-Themen 12
G referenz von variablen Allgemeine Java-Themen 9
O getRuntime().Exec() - Environment - Variablen setzen? Allgemeine Java-Themen 2
S XML-Parsing / public-Member-Variablen / Design-Frage Allgemeine Java-Themen 8
M Variablen Speicher wieder freigeben ? Allgemeine Java-Themen 9
N Variablen eines Objektes (instanz) in einen Array lesen Allgemeine Java-Themen 7
S In Subklasse auf private Variablen zugreifen Allgemeine Java-Themen 4
S Variablen und ihre Tücken. Allgemeine Java-Themen 7
C Binärbereich einer Variablen abfragen Allgemeine Java-Themen 8
J Zugriff auf den Namen einer Variablen Allgemeine Java-Themen 7
J Überschreiben von Variablen Allgemeine Java-Themen 3
C dynamische variablen Namen! Allgemeine Java-Themen 4
M Int und String Variablen verändern Allgemeine Java-Themen 10
H zwei Date Variablen überschreiben sich Allgemeine Java-Themen 2
G Taushen der Input variablen einer method Allgemeine Java-Themen 14
P Objekt- Variablen Allgemeine Java-Themen 16
K Environment Variablen per java -D weitergeben Allgemeine Java-Themen 9
D in class-Dateien nach variablen suchen! Allgemeine Java-Themen 5
F Werte von Member-Variablen erst im Konstruktor setzen? Allgemeine Java-Themen 7
T Größe eine Variablen in Bytes? Allgemeine Java-Themen 22

Ähnliche Java Themen

Neue Themen


Oben