Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему переопределять поле в инициализаторе можно. а в блоке внутри метода - нельзя / 10 сообщений из 10, страница 1 из 1
09.05.2014, 14:55
    #38637413
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему переопределять поле в инициализаторе можно. а в блоке внутри метода - нельзя
Постарался задать свой вопрос в сабже, но получилось довольно мозгодробительно ИМХО.

Собственно код:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
public class Test {
    int k;
    {
        int k; // it is valid variant
    }
    public static void main(String[] args) {
        int k;
        {
            int k; // NOT VALID.java: variable k is already defined in method main(java.lang.String[])
        }
    }
    public void method (int var){
           int var;//NOT VALID.java: variable var is already defined in method method(int)

    }
}



Вопрос в том почему 1 вариант допустим, а второй и третий - нет.

В чем принципиальная разница то?
...
Рейтинг: 0 / 0
09.05.2014, 15:16
    #38637418
DEVcoach
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему переопределять поле в инициализаторе можно. а в блоке внутри метода - нельзя
redwhite90,
Первый случай - вы сначала определили поле класса, а потом определили локальное поле внутри скобок. Локальное поле может сосуществовать вместе с полем класса, это валидная ситуация. Просто локальное поле "перекроет" поле класса.
Второй - вы сначала определили локальное поле, а потом еще раз определили локальное поле с таким же именем. Так делать нельзя.
Третий - аналогичен второму, попытка одним локальным полем перекрыть другое локальное поле, запрещено.
...
Рейтинг: 0 / 0
09.05.2014, 15:24
    #38637422
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему переопределять поле в инициализаторе можно. а в блоке внутри метода - нельзя
DEVcoach,

ммм....ну да, вы описали, то что говорит компилятор.

А в чём принципиальная то разница. почему в одном случае запрещено, а в другом - нет
...
Рейтинг: 0 / 0
09.05.2014, 15:33
    #38637426
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему переопределять поле в инициализаторе можно. а в блоке внутри метода - нельзя
DEVcoach,

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
public class Test {
   int k;
    {
        int k;
        {
            int k;  //java: variable k is already defined in instance initializer of class Test
        }
    }
}
...
Рейтинг: 0 / 0
09.05.2014, 15:33
    #38637427
petalvik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему переопределять поле в инициализаторе можно. а в блоке внутри метода - нельзя
redwhite90,

причина в том, что в тех языках, где такое переопределение разрешено, иногда возникали из-за этого проблемы. Нечасто, но возникали. Вместо одной переменной использовалась другая. И компилятор не мог это выявить.
...
Рейтинг: 0 / 0
09.05.2014, 15:40
    #38637430
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему переопределять поле в инициализаторе можно. а в блоке внутри метода - нельзя
petalvik,

можете привести чуть больше деталей
...
Рейтинг: 0 / 0
09.05.2014, 20:34
    #38637498
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему переопределять поле в инициализаторе можно. а в блоке внутри метода - нельзя
this.k <> k в валидном случае.
...
Рейтинг: 0 / 0
09.05.2014, 22:31
    #38637530
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему переопределять поле в инициализаторе можно. а в блоке внутри метода - нельзя
wadman,

а можно всю мысль целиком?
...
Рейтинг: 0 / 0
09.05.2014, 22:59
    #38637540
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему переопределять поле в инициализаторе можно. а в блоке внутри метода - нельзя
redwhite90
Код: java
1.
2.
3.
4.
5.
6.
public class Test {
    int k;
    {
        int k = 1; // it is valid variant
	this.k = k;
    }


Так понятнее?
...
Рейтинг: 0 / 0
09.05.2014, 23:14
    #38637548
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Почему переопределять поле в инициализаторе можно. а в блоке внутри метода - нельзя
wadman,

непонятно только на какой вопрос Вы отвечаете.

так то да, код валидный конечно.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему переопределять поле в инициализаторе можно. а в блоке внутри метода - нельзя / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]