Member 12785791 Ответов: 1

Когда статический блок помещается в программу, является ли статический блок локальной частью области конструктора ?


класс "темп"
{
int x;
{
это. x=100;
Системы.из.код println("init-инициализация блока");
}
Температура()
{
это(20);
Системы.из.println(х);
Системы.из.код println("по умолчанию");
}
Temp(int x)
{
Системы.из.println(х);
Системы.из.println(х);
}
public static void main(String...a)
{
Температура Т = новый темп();
}
}
// выход
Блок Init
20
20
100
по умолчанию

почему не приходит выход

блок init
100
100
100
по умолчанию

Что я уже пробовал:

класс "темп"
{
int x;
{
это. x=100;
Системы.из.код println("init-инициализация блока");
}
Температура()
{
это(20);
Системы.из.println(х);
Системы.из.код println("по умолчанию");
}
Temp(int z)
{
Системы.из.код println("блок значение init" +з);
Системы.из.код println("значение конструктор" +х);
}
public static void main(String...a)
{
Температура Т = новый темп();
}
}
// Нет затенения данных, проблема возникает при использовании затенения данных

Suvendu Shekhar Giri

так в чем же здесь вопрос?

Member 12785791

при инициализации блока конструктора. Является ли переменная x локальной частью конструктора или нет, если ее локальная часть, то почему она печатает 100 вместо печати 20.

Member 12785791

потому что местный приоритет всегда высок и эта штука сбивает меня с толку

Member 12785791

да это моя опечатка прошу прощения

1 Ответов

Рейтинг:
12

Richard MacCutchan

Ваш конструктор выведет это значение параметра x Не значение экземпляра x. Если вы хотите последнее, то вам нужно использовать this Префикс, чтобы устранить его двусмысленность, таким образом:

System.out.println(this.x);


Member 12785791

Благодарю вас сэр за то что развеяли мои сомнения

Richard MacCutchan

То, что у вас есть, - это не статический блок, это инициализатор.

Member 12785791

да, это моя опечатка, прошу прощения.