[Этот ответ адресован широкой начинающему аудитории]
В рамках метода, набор деклараций и заявлений, приложенном { }
брекет является составной оператор, также называется оператор блока или просто блок. Он создает новую область, вложенную в текущую область видимости внутри тела метода.
Это используется все время в конструкциях, для которых требуется выполнить несколько операций в качестве единицы. Например:
if (a > b)
{ // Block
int tmp = a; // 'tmp' is local to this block
a = b;
b = tmp;
}
Синтаксис блока может показаться необычным, однако, когда используется сам по себе без контрольного заявления:
// Bare block with no controlling if/else/for/while/do/switch
{
int t = frob(b);
b = frob(a);
a = flub(t, a);
}
Такого рода вещи, как правило, делается, чтобы изолировать сложный кусок кода в пределах своей собственной области, особенно если он использует множество локальных переменных, которые не нужны нигде внутри родительского метода.
Этот синтаксис может быть чрезмерно используется, конечно:
void froodle(int a, int b)
{{
if (a < 0 || a < b)
{{
frob(-a, b);
frob(b, 0);
}}
}}
Хотя {{ }}
двойные фигурные скобки выглядят необычно, они просто определить блок вложен в другой блок. В приведенном выше коде весь тело метода содержит один оператор, который сам является блоком.Для наглядности это можно переписать в виде:
void froodle(int a, int b)
{
{
if (a < 0 || a < b)
{
{
frob(-a, b);
frob(b, 0);
}
}
}
}
Блок синтаксис представляет собой особый случай, когда он появляется в определении класса, но не в теле метода. В этих случаях это инициализатор класса , т. Е. Блок кода, который выполняется, когда класс загружается и инициализируется первым. Это как если бы блок был телом специальной неназванной функции, которая запускается во время загрузки класса.
class Bar
{
static Foo myFoo;
// Class initializer
static
{
myFoo = new Foo(100);
myFoo.freeble(200);
}
...
}
Добавление
Обратите внимание, что блок инициализации класса требует static
ключевое слово, предшествующее его (который я добавлен в примере кода выше). Также обратите внимание, что код может обращаться только к static
членам и методам в классе.
Используется для определения области действия. Переменные, объявленные внутри блока, будут неизвестны вне блока. Поэтому j нельзя использовать вне блока. – alexbt
его просто блок и 'int j = 3;' является локальным для него, этот 'j = 3' недоступен вне, который показан значением' k.' –
Блок локализует область действия переменной j '. Внутри блока 'j' относится к переменной, объявленной' int j = 3; '. Вне блока 'j' ссылается на статическое поле, объявленное' int j = 0; '. Помимо локализации переменных, фигурные скобки здесь не имеют никакого эффекта. – khelwood