В чем разница между областью и блоком?
Я увидел фрагмент кода в книге, который выглядит следующим образом:
x = 10;
if(x ==10) { // start new scope
int y = 20; // known only to this block
x = y * 2;
}
Являются ли и область действия, и блок одинаковыми?
Ответы
Ответ 1
область, где вы можете ссылаться на переменную.
блок определяет block scope
переменная, определенная внутри блока, будет определена только внутри этого блока, и вы не сможете ссылаться на нее после окончания блока.
поэтому в этом коде, если вы попробуете что-то вроде:
x = 10;
if(x ==10) { // start new scope
int y = 20; // known only to this block
x = y * 2;
}
y = 5; // error y is out of scope, not it is not defined
потому что то, что у вас здесь, является локальной областью
другие виды области видимости в java - это class scope
(например), член класса имеет класс, поэтому он доступен в любом месте внутри класса.
основными правилами для области являются:
- Объем объявления параметра - это тело метода в
который появляется в декларации.
- Область объявления локальной переменной - это точка, в которой
объявление появляется до конца этого блока.
- Область объявления локальной переменной, которая отображается в
секция инициализации заголовка for for - это тело
оператор for и другие выражения в заголовке.
- Область методов или полей - это весь объект класса. Эта
позволяет нестатические методы класса использовать поля и другие
методы класса.
Ответ 2
Из Спецификация языка Java:
14.2. Блоки:
Блок представляет собой последовательность операторов, локальных деклараций классов и локальные инструкции объявления переменных в фигурных скобках.
6.3. Сфера применения Декларации
Объем декларации - это область программы, в рамках которой субъект, объявленный декларацией, может быть отнесен к использованию простое имя, если оно видно (§6.4.1).
В блоке вы можете объявлять переменные. Область определяет область, в которой вы можете получить доступ к объявленной переменной по ее простому имени.
Ответ 3
когда дело доходит до условий и циклов, если вы не укажете {}, то непосредственный следующий оператор - это единственный оператор, который будет принадлежать определенному условию или циклу
например.
x = 10;
if(x ==10)
{
int y = 20;
x = y * 2;
}
both lines get executes only if condition returns TRUE
x = 10;
if(x ==10)
int y = 20;
x = y * 2; // this is not belong to if condition. therefore it will execute anyway
Ответ 4
Они в основном одинаковы.
Блок - это некоторый код, окруженный {и}. Область - это часть программы, в которой видна определенная вещь. Насколько я знаю, все блоки создают области - все, что определено в блоке, не видно за пределами блока. Обратное неверно.
Вот несколько областей без блоков:
for(int k = 0; k < 10; k++) { // k<10 and k++ are in a scope that includes k, but not in a block.
System.out.println(k); // this is in a block (the {})
}
for(int k = 0; k < 10; k++) // k<10 and k++ are in a scope that includes k, as above
System.out.println(k); // but there no block!
class Test {
// this is a scope but not a block. Not entirely sure about this one.
int x = 2;
int y = x + 1; // I can access x here, but not outside the class, so the class must be a scope.
}
Ответ 5
Согласно определению Block
Блок представляет собой группу из нуля или более операторов между сбалансированными фигурными скобками и может использоваться везде, где допускается одно утверждение.
So
{ //block started
} //block ended
Что бы ни объявляли переменные внутри блока, область, ограниченная этим блоком.
Это смысл?
Ответ 6
Документы oracle определяют блок как
Блок представляет собой группу из нуля или более операторов между сбалансированными фигурными скобками и может использоваться везде, где разрешен один оператор
@Mhd.Tahawi уже рассказал, что такое область действия.
Одна вещь, которую я должен указать,
switch(something){
case somethin1:
line1
line2
break;
case someting2:
line3
line4
break;
}
line {1,2,3,4} находятся в той же области действия, что и блок, потому что я не начинал и не заканчивал каждый случай фигурными скобками. В отличие от python, отступ не подразумевает блок
Ответ 7
Scope
относится к visibility of variables
. Другими словами, какие части вашей программы могут видеть или использовать ее. Обычно каждая переменная имеет глобальную область видимости. После определения каждая часть вашей программы может получить доступ к переменной.
Очень полезно иметь возможность ограничить область переменных одним function/block
. Переменная будет иметь ограниченную область действия. Таким образом, изменения внутри function/block
не могут повлиять на основную программу неожиданными способами.
Ответ 8
Для языков программирования в целом область действия блока (также называемая областью действия блока) является всего лишь одним видом области действия; смотрите https://en.wikipedia.org/wiki/Scope_(computer_science)#Levels_of_scope.
Некоторые языки, такие как Python, не имеют ни блоков, ни областей видимости (но вместо этого имеют области функций, глобальные области и т.д.).