Рубрики
Без рубрики

Область действия переменной в Java

Узнайте о областях, в которых допустимы переменные Java

Автор оригинала: baeldung.

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 {
    List listOfNames = 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 .