Рубрики

Объем переменных в Java

Область действия переменной — это часть программы, в которой переменная доступна. Как и C / C ++, в Java все идентификаторы имеют лексическую (или статическую) область видимости, то есть область видимости переменной может быть определена во время компиляции и не зависит от стека вызовов функций.
Java-программы организованы в виде классов. Каждый класс является частью какого-то пакета. Правила области видимости Java можно отнести к следующим категориям.

Переменные-члены (область действия класса)

Эти переменные должны быть объявлены внутри класса (вне любой функции). К ним можно получить прямой доступ в любом месте в классе. Давайте посмотрим на пример:

public class Test
{
    // All variables defined directly inside a class 
    // are member variables
    int a;
    private String b
    void method1() {....}
    int method2() {....}
    char c;
}
  • Мы можем объявить переменные класса в любом месте класса, но вне методов.
  • Доступ к указанным переменным-членам не влияет на их область видимости в классе.
  • Переменные-члены могут быть доступны вне класса по следующим правилам
    Modifier      Package  Subclass  World
    
    public          Yes      Yes     Yes
    
    protected       Yes      Yes     No
    
    Default (no
    modifier)       Yes       No     No
    
    private         No        No     No
  • Локальные переменные (область уровня метода)

    Переменные, объявленные внутри метода, имеют область действия уровня метода и не могут быть доступны вне метода.

    public class Test
    {
        void method1() 
        {
           // Local variable (Method level scope)
           int x;
        }
    }
    

    Примечание. Локальные переменные не существуют после завершения выполнения метода.
    Вот еще один пример области действия метода, за исключением того, что на этот раз переменная была передана в качестве параметра в метод:

    class Test
    {
        private int x;
        public void setX(int x)
        {
            this.x = x;
        }
    }

    Приведенный выше код использует это ключевое слово, чтобы различать локальные переменные и переменные класса.

    В качестве упражнения предскажите вывод следующей программы Java.

    public class Test

    {

        static int x = 11;

        private int y = 33;

        public void method1(int x)

        {

            Test t = new Test();

            this.x = 22;

            y = 44;

      

            System.out.println("Test.x: " + Test.x);

            System.out.println("t.x: " + t.x);

            System.out.println("t.y: " + t.y);

            System.out.println("y: " + y);

        }

      

        public static void main(String args[])

        {

            Test t = new Test();

            t.method1(5);

        }

    }

    Выход:

    Test.x: 22
    t.x: 22
    t.y: 33
    y: 44
    

    Переменные цикла (блок-область)
    Переменная, объявленная внутри пары скобок «{» и «}» в методе, имеет область видимости только в скобках.

    public class Test

    {

        public static void main(String args[])

        {

            {

                // переменная x имеет область видимости

                // скобки

                int x = 10;

                System.out.println(x);

            }

              

            // Раскомментирование ниже строки даст

            // ошибка, поскольку переменная x находится вне области видимости.

      

            // System.out.println (x);

        }

    }

    Выход:

    10

    В качестве другого примера рассмотрим следующую программу с циклом for.

    class Test

    {

        public static void main(String args[])

        {

            for (int x = 0; x < 4; x++)

            {

                System.out.println(x);

            }

      

            // выдаст ошибку

            System.out.println(x);

        }

    }

    Выход:

    11: error: cannot find symbol
            System.out.println(x);                           ^
    

    Правильный способ сделать это,

    // Над программой после исправления ошибки

    class Test

    {

        public static void main(String args[])

        {

            int x;

            for (x = 0; x < 4; x++)

            {

                System.out.println(x);

            }

      

           System.out.println(x);

        }

    }

    Выход:

    0
    1
    2
    3
    4

    Давайте посмотрим на хитрый пример области видимости цикла. Прогнозировать вывод следующей программы. Вы можете быть удивлены, если вы обычный программист C / C ++.

    class Test

    {

        public static void main(String args[])

        {

            int a = 5;

            for (int a = 0; a < 5; a++)

            {

                System.out.println(a);

            }

        }

    }

    Выход :

    6: error: variable a is already defined in method go(int)
           for (int a = 0; a < 5; a++)       
                    ^
    1 error
    

    Примечание: — В C ++ он будет работать. Но в Java это ошибка, потому что в Java имя переменной внутреннего и внешнего цикла должно быть разным.

    Аналогичная программа на C ++ работает. Смотрите это .

    В качестве упражнения предскажите вывод следующей программы Java.

    class Test

    {

        public static void main(String args[])

        {

            {

                int x = 5;

                {

                    int x = 10;

                    System.out.println(x);

                }

            }

        }

    }

    Q. Исходя из вышеизложенного, скажите, будет ли работать приведенный ниже код или нет.

    class Test

    {

    public static void main(String args[])

    {

    for(int i = 1; i <= 10; i++)

    {
    System.out.println(i);
    }

    int i = 20;

    System.out.println(i);
    }
    }

    Выход :

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    20
    
    
    

    Да, это будет работать!
    Внимательно просмотрите программу, внутренний цикл завершится до того, как объявлена переменная внешнего цикла. Итак, переменная внутреннего цикла сначала уничтожается, а затем создается новая переменная с тем же именем.

    Некоторые важные замечания о области видимости переменных в Java:

    • В общем, набор фигурных скобок {} определяет область видимости.
    • В Java мы обычно можем получить доступ к переменной, если она была определена в том же наборе скобок, что и код, который мы пишем, или в любых фигурных скобках внутри фигурных скобок, где была определена переменная.
    • Любая переменная, определенная в классе вне любого метода, может использоваться всеми методами-членами.
    • Когда метод имеет ту же локальную переменную, что и член, это ключевое слово может использоваться для ссылки на текущую переменную класса.
    • Чтобы переменная читалась после завершения цикла, она должна быть объявлена перед телом цикла.

    Эта статья предоставлена Rishabh Mahrsee . Если вам нравится GeeksforGeeks и вы хотите внести свой вклад, вы также можете написать статью и отправить ее по почте на contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

    Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

    Рекомендуемые посты:

    Объем переменных в Java

    0.00 (0%) 0 votes