Каждая переменная видима внутри блока и внутри вложенных блоков в которых она объявлена. Блок это часть кода между { и }. Фигурные скобки используются в if, switch, в циклах, функциях. Если переменная объявлена внутри функции то после закрывающей фигурной скобки она больше не существует уже. Объявление переменной происходит при первом написании переменной, когда сначала пишется тип и затем имя переменной.
int somevar = 10; - объявление переменной.
int second = somevar + 20; - использование переменной.
В следующем примере кода приводится более подробный пример области видимости переменных:
public class MainActivity extends AppCompatActivity {
// Переменная test объявленная внутри класса видима для
// всех блоков кода и функций (методов) внутри данного класса
TextView test;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// В строке ниже переменной текст присвоена ссылка на виджет с id text в файле макета
test = findViewById(R.id.text);
// Виджету TextView присвоено новое значение для атрибута text
test.setText("Hello");
// Переменная sum и diff объявлены внтури функции onCreate и она видима
// только для этой функции и всех блоков внутри данной функции
int sum = 10 + 20;
float diff = 0;
if (sum > 10) {
diff = 20 - 10;
}
for (int i = 0; i < 10; i++) {
// Объявление переменной внутри цикла for
// означает что переменную невозможно использовать
// после окончания тела цикла
int abc = 10;
if (i % 2 == 0) {
abc = 20;
}
}
// Если написать тут abc = 30; это выдаёт ошибку, потому что переменная abc тут уже недоступна, так как она объявлена внутри тела цикла и после цикла уже удаляется с памяти
int a = 2;
// Switch case используется для сравнения переданной переменной
// и в зависимости от значения переменной выполнить определенный код
// в соответствующем блоке case
switch (a) {
case 10:
Toast.makeText(MainActivity.this, "A = " + a, Toast.LENGTH_SHORT).show();
break;
case 2:
Log.i("TAG", "A = 2");
break;
// default выполняется если нет никаких совпадений в блоке,
// его использовать необязательно
default:
Log.i("TAG", "Нет совпадений");
}
// Блок if else if ниже по функциональности похож на блок switch case выше
if (a == 10) {
// То же самое что и case 10
Toast.makeText(MainActivity.this, "From if A = " + a, Toast.LENGTH_SHORT).show();
} else if (a == 2) {
// То же что и case 2
Log.i("TAG", "A = 2");
} else {
// То же что и default
Log.i("TAG", "Нет совпадений");
}
Log.i("TAG", diff + "");
}
@Override
public void onStop() {
super.onStop();
test.setText("Minimized");
// Переменная объявленная здесь доступна только для функции onStop
String message = "Some message";
Log.i("TAG", message);
}
@Override
public void onStart() {
super.onStart();
test.setText("Maximized");
}
}
Реклама