локальная область в Java - PullRequest
       1

локальная область в Java

5 голосов
/ 31 августа 2011

Почему фигурные скобки не определяют отдельную локальную область в Java?Я ожидал, что это будет общая функция для основных языков фигурных скобок (C, C ++, Java, C #).

Ответы [ 8 ]

17 голосов
/ 31 августа 2011

Они определяют отдельную локальную область, но вы все равно не можете маскировать локальные переменные из родительской области (но вы, конечно, можете маскировать переменные экземпляра).

Но вы можете определить новые переменные (с разными именами)и их область действия будет ограничена внутри фигурных скобок.

14 голосов
/ 31 августа 2011

В Java запрещается теневое копирование по назначению ( см. Этот ответ ).
Идея состоит в том, что это помогает уменьшить количество ошибок.

3 голосов
/ 31 августа 2011

Они определяют отдельную локальную область, просто ошибка, если локальная переменная скрывает другую.

Попробуйте определить переменную (с уникальным именем) внутри блока, а затем получить доступ извне этого блока кувидеть, что он действительно ограничен блоком и только этим блоком.

3 голосов
/ 31 августа 2011

Скобки действительно охватывают переменную, но все, что находится внутри фигурной скобки, также может «видеть» далее в фигурной скобке. Во всех ваших случаях mine уже определен как fido.

Проще говоря. Дети также относятся к своим родителям, но не наоборот.

2 голосов
/ 31 августа 2011

Он определяет локальную область видимости ... переменные, объявленные внутри фигурных скобок, имеют область видимости фигурных скобок. Однако вы пытаетесь переопределить уже существующую переменную. На мой взгляд, в данном случае не Java, а C ++ за то, что позволяет вам это делать (я полагаю, это то, с чем вы сравнивали это). Тем не менее, даже если язык позволит это сделать, зачем вам это делать? Плохая читаемость и возможные причины ошибок.

2 голосов
/ 31 августа 2011

Блоки определяют локальную область, но не позволяют переопределить переменную с тем же именем, что и другая переменная во внешней локальной области.Если бы это произошло, не было бы никакого доступа к «скрытой» переменной.

0 голосов
/ 01 февраля 2015

Запустите это, и вы получите ошибку, что переменная уже объявлена ​​как int i=5, и ее нельзя переопределить.Итак, Родитель никогда не берет то, что получил его ребенок.Итак, что, если Родитель жертвует и удаляет свое объявление int i=5?

public class Ouch { 
    public static void main(String[] args) { 

        int i=5;

        for(int i=0;i<5;i++);
        for(int i=0;i<5;i++);
    } 
} 

Теперь, Родитель пожертвовал своим объявлением, и оба ребенка наслаждаются, и код успешно выполняется.

public class Ouch { 
    public static void main(String[] args) { 

        //int i=5;

        for(int i=0;i<5;i++);
        for(int i=0;i<5;i++);
    } 
}
0 голосов
/ 24 июня 2012

Это забыто в Java, но я думаю, что Java не так, потому что во ВСЕХ языках с «блочной структурой» это разрешено делать (не только в C ++, но также в Pascal, ADA, C и т. Д.)мы хотим скрыть переменную окружающего блока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...