Gültigkeitsbereich < Java < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 02:47 Mi 04.05.2011 | Autor: | Physy |
public class Blatt3a5{
static int j = 0;
public static void main(String[] args){
int i;
{
i = 3;
int j = 4;
}
i = j;
System.out.println(i);
}
}
kann mir jemand erklären wie genau sich das mit dem j verhält? warum kann ich j nochmal neu definieren und intialisieren? Hat das etwas mit static zu tun?
Vielen Dank im Voraus
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 13:49 Mi 04.05.2011 | Autor: | BarneyS |
> public class Blatt3a5{
> static int j = 0;
> public static void main(String[] args){
> int i;
> {
> i = 3;
> int j = 4;
> }
> i = j;
> System.out.println(i);
> }
> }
>
> kann mir jemand erklären wie genau sich das mit dem j
> verhält? warum kann ich j nochmal neu definieren und
> intialisieren? Hat das etwas mit static zu tun?
>
> Vielen Dank im Voraus
Hallo,
ich kann die Frage nicht 100% beantworten, ich schreibe einfach mal meinen Gedanken dazu.
Ich weiß nicht, ob es Sinn macht, das jetzt so auseinander zu dröseln, denn sowas sollte man schlichtweg vermeiden, da es offensichtlich leicht zu Missverständnissen beim Warten des Codes kommen kann.
Anscheinend kann man in einer Methode oder Funktion Variablen deklarieren, die wie ein Attribut der Klasse heißen dürfen. Innerhalb der Methode ist dann nur die neu deklarierte Variable sichtbar.
Wenn du diese Deklaration allerdings, wie in deinem Beispiel, in einem Anweisungsblock machst, ist diese Sichtbarkeit nur auf diesen Anweisungsblock beschränkt. Ausserhalb des Blocks kennt die Funktion dann nur das Attribut der Klasse.
Ich wusste ehrlich gesagt auch nicht, dass das geht. Aber wie gesagt, ich würde es vermeiden. Ich kann mir nicht vorstellen, in welchem Fall dies sinnvoll wäre...
Ich hoffe, ich konnte dir damit ein bisschen helfen... ? :)
Grüße^^
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 17:10 Mi 04.05.2011 | Autor: | felixf |
Moin,
> denn sowas sollte man schlichtweg vermeiden,
> da es offensichtlich leicht zu Missverständnissen beim
> Warten des Codes kommen kann.
dem stimme ich zu!
> Ich wusste ehrlich gesagt auch nicht, dass das geht.
Es geht schon. In einer Funktion darf die Variable aber nur einmal gleichzeitig deklariert werden. Was trotzdem verwirrend werden kann -- das hier ist z.B. ok:
1: |
| 2: | public class t
| 3: | {
| 4: | int j;
| 5: | public void test()
| 6: | {
| 7: | {
| 8: | int j;
| 9: | }
| 10: | {
| 11: | int j;
| 12: | }
| 13: | }
| 14: | }
|
Das hier dagegen nicht:
1: |
| 2: | public class t
| 3: | {
| 4: | int j;
| 5: | public void test()
| 6: | {
| 7: | int j;
| 8: | {
| 9: | int j;
| 10: | }
| 11: | }
| 12: | }
|
In C++ geht's noch schlimmer, da ist das hier auch ok:
1: |
| 2: | int j = -1;
| 3: |
| 4: | int main()
| 5: | {
| 6: | int j = 0;
| 7: | {
| 8: | int j = 1;
| 9: | }
| 10: | }
|
> Aber wie gesagt, ich würde es vermeiden. Ich kann mir nicht
> vorstellen, in welchem Fall dies sinnvoll wäre...
Gut ist es nicht. Aber manchmal ist es schon praktisch, wenn es geht
LG Felix
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 17:04 Mi 04.05.2011 | Autor: | felixf |
Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
Moin!
> kann mir jemand erklären wie genau sich das mit dem j
> verhält? warum kann ich j nochmal neu definieren und
> intialisieren? Hat das etwas mit static zu tun?
Mit static hat das nicht direkt was zu tun (static braucht man, damit man es aus der static-Methode main benutzen kann).
> public class Blatt3a5{
> static int j = 0;
> public static void main(String[] args){
> int i;
Hier ist j gleich dem j aus der Klasse, da in der Funktion keine Variable j deklariert wurde
> {
> i = 3;
> int j = 4;
In diesem Block -- bis zum }Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)
-- ist j jetzt eine neue Variable. Die alte Variable gibt es weiterhin, aber sie ist nicht mehr sichtbar.
> }
Jetzt ist der Block vorbei, die neue Variable verschwindet aus dem Sichtfeld, und das alte j ist wieder sichtbar.
(Der Wert von i ist aber immer noch 3.)
> i = j;
Jetzt hat i den Wert 0, da das momentan sichtbare j den Wert 0 hat.
LG Felix
|
|
|
|