1. Обзор
В Java, как и в любом языке программирования, каждая переменная имеет область действия. Это сегмент программы, в котором переменная может использоваться и является допустимой.
В этом уроке мы представим доступные области в Java и обсудим различия между ними.
2. Область действия класса
Каждая переменная, объявленная внутри скобок класса ( {} ) с модификатором private access, но вне любого метода, имеет область действия класса. В результате эти переменные могут использоваться везде в классе, но не за его пределами :
public class ClassScopeExample { private Integer amount = 0; public void exampleMethod() { amount++; } public void anotherExampleMethod() { Integer anotherAmount = amount + 4; } }
Мы видим, что Class ScopeExample имеет переменную класса amount , доступ к которой можно получить в методах класса.
Если мы не используем private , он будет доступен из всего пакета. Проверьте статью модификаторы доступа для получения дополнительной информации.
3. Область применения метода
Когда переменная объявлена внутри метода, она имеет область действия метода, и она будет действительна только внутри того же метода:
public class MethodScopeExample { public void methodA() { Integer area = 2; } public void methodB() { // compiler error, area cannot be resolved to a variable area = area + 2; } }
В methods мы создали переменную метода с именем area . По этой причине мы можем использовать область внутри методов , но мы не можем использовать его где-либо еще.
4. Область действия цикла
Если мы объявим переменную внутри цикла, она будет иметь область действия цикла и будет доступна только внутри цикла:
public class LoopScopeExample { ListlistOfNames = Arrays.asList("Joe", "Susan", "Pattrick"); public void iterationOfNames() { String allNames = ""; for (String name : listOfNames) { allNames = allNames + " " + name; } // compiler error, name cannot be resolved to a variable String lastNameUsed = name; } }
Мы видим, что метод итерация Имен имеет переменную метода с именем name . Эта переменная может использоваться только внутри цикла и недопустима вне его.
5. Объем кронштейна
Мы можем определить дополнительные области в любом месте, используя скобки ( {} ):
public class BracketScopeExample { public void mathOperationExample() { Integer sum = 0; { Integer number = 2; sum = sum + number; } // compiler error, number cannot be solved as a variable number++; } }
Переменная number допустима только в скобках.
6. Области видимости и переменное затенение
Представьте, что у нас есть переменная класса, и мы хотим объявить переменную метода с тем же именем:
public class NestedScopesExample { String title = "Baeldung"; public void printTitle() { System.out.println(title); String title = "John Doe"; System.out.println(title); } }
В первый раз , когда мы печатаем title , он напечатает “Baeldung”. После этого объявите переменную метода с тем же именем и присвоите ей значение “John Doe “.
Переменная метода title переопределяет возможность повторного доступа к классу переменной title . Вот почему во второй раз он напечатает “Джон Доу “ .
Сбивает с толку, верно? Это называется затенение переменных и не является хорошей практикой. Лучше использовать префикс this для доступа к переменной класса title , например this.title .
7. Заключение
Мы изучили различные области, которые существуют в Java.
Как всегда, код доступен на GitHub .