Überdecken von Attributen und Sichtbarkeit von Variablen

Status
Nicht offen für weitere Antworten.

chillipalmer

Mitglied
Hi!

Im folgenden Quelltext sollen für jede Variable mit dem Bezeichner a die Zeilen markiert werden in denen sie sichtbar ist. Ich weiß allerdings nicht genau wie das gemeint ist. Ist a in der Class Ueberdecken nicht über all sichtbar, weil sie als static deklariert ist? Kann mir jemand von euch sagen wo a sichtbar ist, oder woran ich erkenne wo sie sichtbar ist?

[HIGHLIGHT="Java"]
class Ueberdecken {

static int a = 7;

static void methode1() {
System.out.println("Methode 1");
System.out.println("a=" + a);
int a = 10;
System.out.println("a=" + a);
}

static void methode2(int a) {
System.out.println("Methode 2");
System.out.println("a=" + a);
a = a + 2;
System.out.println("a=" + a);
}

static int methode3() {
System.out.println("Methode 3");
System.out.println("a=" + a);
a++;
if (a > 7) {
int a = 3;
System.out.println("a=" + a);
}
System.out.println("a=" + a);

return a;
}

public static void main(String[] args) {
methode1();
methode2(a);
a = 1 + methode3();
System.out.println("a=" + a);
}
}

[/HIGHLIGHT]
 

0x7F800000

Top Contributor
Ist a in der Class Ueberdecken nicht über all sichtbar, weil sie als static deklariert ist?
klar ist sie das, aber manchmal müsste man Ueberdecken.a schreiben, um an das statische a zu kommen. Ich würde einfach jedem der hier vorkommenden a's eine farbe bzw nummer zuordnen, den code zeile für zeile durchgehen, und jeweils überlegen, welches a gemeint ist, wenn man da einfach "a" hinschreibt.
 

hdi

Top Contributor
Also gefragt ist ja nach dem statischen a.

In methode1: sichtbar bis zur zeile int a = 10;
in methode2: gar nicht sichtbar
in methode3: überall ausser innerhalb des if-Rumpfes
in der main: überall

Generell gilt: Sobald du innerhalb eines Blocks, also {block}, eine Variable
hast die auch "a" heisst, ist in diesem Block das statische a überschattet,
und nicht mehr erreichbar, ausser mit ihrem vollen Namen ("Verdeckung.a")
(Natürlich erst ab der Zeile, wo das a eintritt, nicht automatisch im ganzen Block)
 
Zuletzt bearbeitet:

chillipalmer

Mitglied
So, hab das jetzt mal schnell probiert, hoffe ich habs richtig verstanden und richtig angewendet. Ich wusste nur nicht, ob die Variablen in den Methoden in main sichtbar sind und ob z.B. a++ oder a = a+ 2 als neue Variable gilt und bei a++ dann in der gleichen Zeile noch die alte sichtbar ist, bin aber mal davon ausgegangen.
Wäre nett, wenn du oder ein anderer da mal drüberschauen könnten, müsst ja nicht alles genau kontrollieren, nur kurz sagen, ob das vom Prinzip her stimmt.

[HIGHLIGHT="Java"]
class Ueberdecken {

static int a = 7; // sichtbar in Zeile 3, 7, 12, 14, 15, 21, 22(?), 33, 34, 35

static void methode1() {
System.out.println("Methode 1");
System.out.println("a=" + a);
int a = 10; // sichtbar in Zeile 8, 9, 33
System.out.println("a=" + a);
}

static void methode2(int a) {
System.out.println("Methode 2");
System.out.println("a=" + a);
a = a + 2; // sichtbar in Zeile 15, 16, 34
System.out.println("a=" + a);
}

static int methode3() {
System.out.println("Methode 3");
System.out.println("a=" + a);
a++; // sichtbar in Zeile 22, 23, 27, 29
if (a > 7) {
int a = 3; // sichtbar in Zeile 24, 25, 35
System.out.println("a=" + a);
}
System.out.println("a=" + a);

return a;
}

public static void main(String[] args) {
methode1();
methode2(a);
a = 1 + methode3(); // sichtbar in Zeile 35, 36
System.out.println("a=" + a);
}
}

[/HIGHLIGHT]
 

chillipalmer

Mitglied
Also gefragt ist ja nach dem statischen a.

In methode1: sichtbar bis zur zeile int a = 10;
in methode2: gar nicht sichtbar
in methode3: überall ausser innerhalb des if-Rumpfes
in der main: überall

Generell gilt: Sobald du innerhalb eines Blocks, also {block}, eine Variable
hast die auch "a" heisst, ist in diesem Block das statische a überschattet,
und nicht mehr erreichbar, ausser mit ihrem vollen Namen ("Verdeckung.a")

Aso, dann war das was ich grade gepostet habe ja mal Müll.:eek:
 

musiKk

Top Contributor
Ja ne. In methode2 wird das "statische a" ja in der main als Parameter übergeben. Darum siehst du es dort quasi. Es ist aber nicht das gleiche a, sondern nur eine Variable, die zufällig auch a heißt. Das kannst du dadurch probieren, dass du in methode2 das a überall durch einen anderen Buchstaben ersetzt. Die Werte bleiben die gleichen.

Wenn du mit den Werten rechnest, wird nichts überdeckt. Das passiert nur bei einer Neudeklaration und die erkennst du daran, dass als erstes in der Zeile ein Typ steht (in diesem Falle int). In den Zeilen 15 und 22 ist das nicht der Fall.
 

hdi

Top Contributor
nein es wird das lokale a ausgegeben. aber da du die methode mit dem wert
des statischen a aufrufst, hat das lokale a eben den gleichen Wert.
Wenn du allerdings nach dem Aufruf der methode2() überprüfst, was das statische
a ist (in der main-methode), wirst du sehen dass sich nix am wert geändert hat,
weil methode2 nur auf einer lokalen variable arbeitet, die gelöscht wird, sobald die
methode verlassen wird.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Designentscheidung von Attributen/Methoden im Falle von Vererbung Java Basics - Anfänger-Themen 8
X Was ist der Unterschied zwischen materialisierten und nichtmaterialisierten Attributen einer Klasse? Java Basics - Anfänger-Themen 1
D Objekterzeugungen mit zur Laufzeit variierenden Attributen Java Basics - Anfänger-Themen 7
P Sortieren von Listen nach Attributen Java Basics - Anfänger-Themen 3
G String mit mehreren Attributen aufteilen Java Basics - Anfänger-Themen 6
JokerBlacky Klassen Klasse Queue Klasse mit Attributen anhängen und auslesen können Java Basics - Anfänger-Themen 4
D Objekte mit verschiedenen Attributen erstellen Java Basics - Anfänger-Themen 3
D Variablen Verwaltung von Attributen Java Basics - Anfänger-Themen 3
C Kunden mit Attributen hinterlegen Java Basics - Anfänger-Themen 6
F Vererbung von Attributen zwischen zwei Klassen Java Basics - Anfänger-Themen 6
O Objekte nach Attributen durchsuchen Java Basics - Anfänger-Themen 10
S Kopierkonstrukter eines Objekts mit final Attributen Java Basics - Anfänger-Themen 6
Y Variable Menge von Objekten erzeugen und mit ihren Attributen rechnen Java Basics - Anfänger-Themen 7
E Initialisierung von Attributen und Konstruktor Java Basics - Anfänger-Themen 0
L Vererbung Attributen der Oberklasse Attribute hinzufügen? Java Basics - Anfänger-Themen 3
H Datentypen Objekt mit wenig-bittigen Attributen Java Basics - Anfänger-Themen 8
F Interface Unterschied von Attributen und Methoden bei abstrakten Klassen und Interfaces Java Basics - Anfänger-Themen 5
D Attributen und Methoden, etwas vergessen? Java Basics - Anfänger-Themen 6
D Klasse erstellen mit vorgebenen Attributen udn methoden Java Basics - Anfänger-Themen 3
D GUI abhängig von den Attributen füllen! Java Basics - Anfänger-Themen 12
P Instanz mit allen Attributen ausgeben Java Basics - Anfänger-Themen 3
G Problem bei der Angabe von Attributen in einer Objekt-Klasse Java Basics - Anfänger-Themen 3
T Vererbung von Attributen und Methoden, Verständnisproblem Java Basics - Anfänger-Themen 4
H Singleton mit Attributen Java Basics - Anfänger-Themen 7
K Sichtbarkeit protected: Attribute trotzdem aufrufbar. Java Basics - Anfänger-Themen 4
A OOP Komposition per Package-Sichtbarkeit Java Basics - Anfänger-Themen 2
melaniemueller Datenkapselung Sichtbarkeit public Java Basics - Anfänger-Themen 4
C Sichtbarkeit in Pakten Java Basics - Anfänger-Themen 2
Y JFrame sichtbarkeit Java Basics - Anfänger-Themen 4
Y Panels sichtbarkeit Java Basics - Anfänger-Themen 3
J Sichtbarkeit und Zugriff Java Basics - Anfänger-Themen 9
A Sichtbarkeit in Methoden/Listen Java Basics - Anfänger-Themen 3
W Sichtbarkeit vom Variablen, Klassen usw. Java Basics - Anfänger-Themen 3
M Sichtbarkeit - Modifier Java Basics - Anfänger-Themen 13
P Klasse mit eingeschränkter Sichtbarkeit Java Basics - Anfänger-Themen 3
J Sichtbarkeit Variable in Schleife Java Basics - Anfänger-Themen 5
C OOP Aufruf von Methoden höherer Sichtbarkeit Java Basics - Anfänger-Themen 10
S Sichtbarkeit Problem Java Basics - Anfänger-Themen 10
J Sichtbarkeit von Objecten in JSP's Java Basics - Anfänger-Themen 7
L sichtbarkeit von checkboxen Java Basics - Anfänger-Themen 2
C OOP Vererbung und Sichtbarkeit Java Basics - Anfänger-Themen 14
B Konstruktoren Sichtbarkeit Java Basics - Anfänger-Themen 2
M Sichtbarkeit von Methoden Java Basics - Anfänger-Themen 7
A Allgemeine Frage zur Sichtbarkeit "private" Java Basics - Anfänger-Themen 5
H2SO3- sichtbarkeit con classen und functionen Java Basics - Anfänger-Themen 8
M Vererbung und Sichtbarkeit von Methoden Java Basics - Anfänger-Themen 7
R Sichtbarkeit von Methoden Java Basics - Anfänger-Themen 14
G konstanten leicht benutzen? (sichtbarkeit) Java Basics - Anfänger-Themen 17
G Deklaration und Sichtbarkeit von Variablen Java Basics - Anfänger-Themen 2
H statische methoden und sichtbarkeit Java Basics - Anfänger-Themen 13
B Sichtbarkeit von Variablen Java Basics - Anfänger-Themen 2
F Sichtbarkeit von Buttons un Frame Java Basics - Anfänger-Themen 7
M Sichtbarkeit von private Java Basics - Anfänger-Themen 2
G Sichtbarkeit von Variablen Java Basics - Anfänger-Themen 4
J protected und Standard Sichtbarkeit Java Basics - Anfänger-Themen 2
P Sichtbarkeit Java Basics - Anfänger-Themen 5
R Sichtbarkeit bei Vererbung Java Basics - Anfänger-Themen 2
K Sichtbarkeit von Komponenten prüfen Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben