Java-Schalter: Variablendeklaration und Geltungsbereich

7

Wie behandelt der Java-Compiler den folgenden Switch-Block? Was ist der Umfang der 'b' Variable?

Beachten Sie, dass die Variable 'b' nur im ersten Zweig der switch-Anweisung deklariert ist. Der Versuch, es auch in der zweiten Verzweigung zu deklarieren, führt zu einem Kompilierungsfehler "doppelte lokale Variable".

%Vor%

Hinweis: Der obige Code wird mit einem Java 1.6 Compiler kompiliert.

    
Marius Ion 07.06.2012, 13:38
quelle

7 Antworten

21

Der Bereich wird, wie üblich, durch { und } begrenzt.

    
aioobe 07.06.2012, 13:40
quelle
10

Der Bereich von b ist der Block. Sie haben nur einen Block, der alle case s enthält. Deshalb erhalten Sie einen Kompilierungsfehler, wenn Sie b in Ihrer zweiten case neu deklarieren.

Sie könnten jede case in einen eigenen Block wie

umbrechen %Vor%

aber ich denke FindBugs oder CheckStyle würden sich darüber beschweren.

    
Kai 07.06.2012 13:40
quelle
3

Der Bereich von b ist der Schalterblock - zwischen der Deklaration und dem Begrenzer } -

%Vor%

Sie müssen jedoch wissen, dass Sie, wenn Sie int b in case 1: deklarieren, NICHT auf die Variable b in case 0:

zugreifen können

Um die Frage zu beantworten, die Sie in den Java-Kommentaren stellen, können Sie dieses einfachere Beispiel überprüfen:

%Vor%

Ich hoffe, es hilft.

    
Cacho Santa 07.06.2012 13:41
quelle
3

Sie können den Gültigkeitsbereich mithilfe von {} in Ihrem Fall definieren.

%Vor%     
Sungray 30.11.2015 13:25
quelle
1

in Ihrem Code, wenn a ungleich 0 b ist, wird niemals initialisiert. Sie sollten b vor der switch-Anweisung definieren.

    
hdayi 07.06.2012 13:42
quelle
0

Ihre case Blöcke haben keinen lokalen Gültigkeitsbereich. Es ist keine Serie von if ... else if ... else Blöcken, Java implementiert sie als eine Reihe von GOTO s.

    
Hans Z 07.06.2012 13:41
quelle
0

Der Umfang der in einer switch() -Anweisung definierten Variablen wäre derselbe wie in einem normalen Block, der von { und } umgeben ist.

Daher ist jede in einer switch() -Anweisung definierte Variable für den gesamten Block sichtbar, sobald sie definiert ist.

    
Thkru 07.06.2012 14:02
quelle