В чем разница между областью и блоком?

Я увидел фрагмент кода в книге, который выглядит следующим образом:

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, не имеют ни блоков, ни областей видимости (но вместо этого имеют области функций, глобальные области и т.д.).