Java中变量的范围

作者: Arvin Chen 分类: Java 来源: Break易站(www.breakyizhan.com)
  •   Java 变量

    变量的范围是变量可访问的程序的一部分。与C / C ++一样,在Java中,所有标识符都是词法(或静态)范围,变量的iescope可以在编译器时间确定并独立于函数调用堆栈。
    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() 
        {
           //局部变量(方法级别范围)
           int x;
        }
    }
    

    注意:方法执行结束后,局部变量不存在。
    这里是方法范围的另一个例子,除了这次变量作为参数传入方法之外:

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

    上面的代码使用这个关键字this来区分本地变量和类变量。

    作为练习,预测下列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
    tx:22
    ty:33
    y:44
    

    循环变量(块范围)

    在方法中的一对括号“{”和“}”内声明的变量只有括号的范围。

    public class Test
    {
        public static void main(String args[])
        {
            {
                // The variable x has scope within
                // brackets
                int x = 10;
                System.out.println(x);
            }
            
            // Uncommenting below line would produce
            // error since variable x is out of scope.
     
            // 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);
            }
     
            // Will produce error
            System.out.println(x);
        }
    }
    

    输出:

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

    正确的做法是,

    // Above program after correcting the error
    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

    作为练习,预测下列Java程序的输出。

    class Test
    {
        public static void main(String args[])
        {
            {
                int x = 5;
                {
                    int x = 10;
                    System.out.println(x);
                }
            }
        }
    }
    

    Java中变量作用域的一些要点:

    • 通常,一组大括号{}定义一个范围。
    • 在Java中,我们通常可以访问变量,只要它是在与我们正在编写的代码相同的括号集内定义的,或者是在定义变量的大括号内的任何大括号内定义的。
    • 任何方法之外的类中定义的任何变量均可用于所有成员方法。
    • 当一个方法和成员有相同的局部变量时,这个关键字可以用来引用当前的类变量。
    • 对于要在循环结束后读取的变量,必须在循环体之前声明它。
  •   Java 变量
  •   本文标题:Java中变量的范围 - Break易站
    转载请保留页面地址:https://www.breakyizhan.com/java/3780.html
      微信返利机器人
      免费:淘宝,京东,拼多多优惠券
      腾讯,爱奇艺,优酷的VIP视频免费解析,免费看
      即刻扫描二维码,添加微信机器人!

    发表笔记

    电子邮件地址不会被公开。 必填项已用*标注