powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Почему переопределять поле в инициализаторе можно. а в блоке внутри метода - нельзя
10 сообщений из 10, страница 1 из 1
Почему переопределять поле в инициализаторе можно. а в блоке внутри метода - нельзя
    #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
Почему переопределять поле в инициализаторе можно. а в блоке внутри метода - нельзя
    #38637418
DEVcoach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
redwhite90,
Первый случай - вы сначала определили поле класса, а потом определили локальное поле внутри скобок. Локальное поле может сосуществовать вместе с полем класса, это валидная ситуация. Просто локальное поле "перекроет" поле класса.
Второй - вы сначала определили локальное поле, а потом еще раз определили локальное поле с таким же именем. Так делать нельзя.
Третий - аналогичен второму, попытка одним локальным полем перекрыть другое локальное поле, запрещено.
...
Рейтинг: 0 / 0
Почему переопределять поле в инициализаторе можно. а в блоке внутри метода - нельзя
    #38637422
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DEVcoach,

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

А в чём принципиальная то разница. почему в одном случае запрещено, а в другом - нет
...
Рейтинг: 0 / 0
Почему переопределять поле в инициализаторе можно. а в блоке внутри метода - нельзя
    #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
Почему переопределять поле в инициализаторе можно. а в блоке внутри метода - нельзя
    #38637427
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90,

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

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

а можно всю мысль целиком?
...
Рейтинг: 0 / 0
Почему переопределять поле в инициализаторе можно. а в блоке внутри метода - нельзя
    #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
Почему переопределять поле в инициализаторе можно. а в блоке внутри метода - нельзя
    #38637548
questioner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman,

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

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


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