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);
}
}
public class Auto{
private int ps; // global
public void eineMethode(){
int eineLokaleVariable;
}
}
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
private int ps; // "global"? "private Membervariable" trifft's hier um einiges besser.
private member vars sind nun mal wirklich nicht überall in der klasse sichtbar... Dein Beispiel ist total irreführend.Gloable Variablen allerdings sind überall in der Klasse sichtbar
class Math{
...
public static final double PI=3.2;
...
}
Wie? Eine lokale Variable existiert innerhalb eines Rumpfes, in der sie"Lokale" Variablen kann man nicht so toll "lokalisieren"
Das wär mir neu!? Klar sind private Member vars überall in dieser Klasseprivate member vars sind nun mal wirklich nicht überall in der klasse sichtbar... Dein Beispiel ist total irreführend.
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.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 }.
Njaain. Das kann man doch so nicht sagen...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?)
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?
}
}
class Blackhole{
private List<Object> content;
public Blackhole(){
content=new LinkedList<Object>();
}
public void eat(Object o){
content.add(o);
}
//keinerlei getter...
}
public class Main{
public static void main(String... _){
Blackhole supermassive=new Blackhole();
supermassive.eat(new A(123456789));
}
}
Okay. Das wäre doch auch mal eine imho zwar etwas unübliche, aber sinnvolle Definition.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.
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);
}
Was nun? 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...
also dann genau umgekehrt?
3 ist lokal 4 ist global?
void foo()
{
synchronized (bar) { ... }
}