Переменная, которая объявляется внутри метода, доступна только в пределах этого метода — ее так называемая область видимости ограничена данным методом, в котором она объявлена.
Это означает, что в другом методе можно объявить переменную с точно таким же име-нем без какого-либо конфликта.
Давайте мы с вами создадим программу постепенно, где увидите что и как используется:
1. Создайте новую программу с именем Scope, содержащую стандартный метод main.
1 2 3 |
class Scope { public static void main(String[] args) { } } |
2. Внутри фигурных скобок главного метода объявите и проинициализируйте локальную строковую переменную, а затем выведите ее значение.
1 2 |
String txt = "Это локальная переменная метода main"; System.out.println(txt); |
3. После главного метода перед последней фигурной скобкой класса добавьте еще один метод с именем sub.
1 |
public static void sub() { } |
4. Внутри фигурных скобок метода sub объявите и проинициализируйте локальную строковую переменную с тем же именем, что и переменная в главном методе.
1 2 |
String txt = "Это локальная переменная метода sub"; System.out.println(txt); |
5. Добавьте вызов метода sub в конец метода main.
1 |
sub(); |
6. Сохраните программу под именем Scope.java, затем скомпилируй-те и запустите. Код должен выглядеть так:
1 2 3 4 5 6 7 8 9 10 11 12 |
class Scope { public static void main(String[] args) { String txt = "Это локальная переменная метода main"; System.out.println(txt); sub(); } public static void sub() { String txt = "Это локальная переменная метода sub"; System.out.println(txt); } } |
После компиляции получаем:
Ключевое слово static, которое используется в объявлениях метода, указывает, что данный метод является «методом класса» — он доступен из любого другого метода данного класса.
Аналогично, при помощи ключевого слова static может быть объявлена «переменная класса», которая доступна глобально для всего класса. Объявление этой переменной должно быть выполнено перед объявлением главного метода сразу после фигурных скобок, следующих за
объявлением класса.
В программе могут встретиться одноименные глобальная переменная класса и локальная переменная метода. Локальная переменная метода имеет приоритет до тех пор, пока глобальная переменная класса не будет вызвана при помощи точечной записи с использованием имени класса, либо не объявлена локальная переменная с тем же именем.
7. Отредактируйте код в вашем файле Scope.java, добавив глобальную переменную класса с тем же именем, что и локальная переменная метода.
1 |
final static String txt = "Это глобальная переменная класса Scope"; |
8. Добавьте оператор в конец главного метода для вывода значений глобальной переменной класса.
1 |
System.out.println(Scope.txt); |
9. Закомментируйте строку, которая объявляет локальную переменную в методе sub — таким образом, оператор вывода будет теперь обращаться к глобальной переменной с тем же именем.
1 |
//String txt = "Это локальная переменная метода sub"; |
10. Сохраните изменения, затем снова скомпилируйте и запустите программу на выполнение, чтобы увидеть изменения.
Код программы будет следующим:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
class Scope { final static String txt = "Это глобальная переменная класса Scope"; public static void main(String[] args) { String txt = "Это локальная переменная метода main"; System.out.println(txt); sub(); System.out.println(Scope.txt); } public static void sub() { // String txt = "Это локальная переменная метода sub"; System.out.println(txt); } } |
После компиляции получим следующее:
Полезные советы из практики:
- По возможности используйте локальные переменные метода, чтобы избегать конфликтов. Глобальные переменные класса используются в основном для констант.
- Переменная-счетчик, объявленная в цикле for, недоступна снаружи цикла — ее область видимости ограничена блоком операторов цикла.