zoukankan      html  css  js  c++  java
  • 九天学会Java,第六天,变量作用域

    • 变量和数据类型,赋值和输出
    • 算术运算
    • 选择结构
    • 循环结构
    • 函数定义,函数调用
    • 变量作用域 <--
    • 栈,程序运行的基石
    • 面向对象
    • 异常处理
    • 语言提供的公用包

    经过前面的学习,我们发现变量有时候定义在main函数里,有时候写在循环里,有的时候又写在自定义函数里,那么什么的变量的作用域呢

    首先作用域是由花括号的位置决定的。

    从函数看局部变量作用域

    函数内定义的变量被称为局部变量。

    局部变量的作用范围从声明开始,直到包含它的块结束(块就是{}内的代码)。

    函数的参数范围涵盖整个方法。参数实际上是一个局部变量。

    public class SixthScopeLesson {
        /**
         * a在整个函数内都是可见的
         * b在定义之后,直到 } 号之前都是可见的
         * @param a
         */
        public static void foo(int a) {
            System.out.println(a);
            int b = 10;
            System.out.println(b);
        }
    
        public static void main(String[] args) {
            foo(10);
            /**
             * 在main函数里,就访问不到foo(int a)里的a
             * 以及foo函数里定义的b
             */
        }
    }
    

    从for循环看局部变量作用域

    for循环的初始化部分声明的变量,其作用范围在整个循环。

    但循环体内声明的变量其适用范围是从它声明到循环体结束。它包含如下所示的变量声明:

    for(int i = 0; i < 10; i++ /*这里也能访问i,但是不能访问j*/) {
        int j = i + 1;   /* 从这里到 } 都能访问到j */
        System.out.println(i);
        System.out.println(j);
    }
    /**
    * 出了 } 之后,i和j都不能再访问
    */
    

    image

    嵌套代码块看变量作用域

    int i = 3;
    if (i >= 3) { /* 进入代码块 */
        int j = 10; /* j从这里到 } 都能访问 */
        System.out.println(i); /* 可以访问到i,因为i在上一级代码块 */
        System.out.println(j);
    }
    System.out.println(i); /* 可以访问到i,处于同一个代码块 */
    /* 访问不到j */
    

    这说明什么,说明子代码块可以访问上层代码块的变量。

    上层代码块却不能访问子代码块的变量。

    这是为什么,因为程序运行到}符号时,表示离开作用域,
    {}内分配的变量将被JVM回收

    讲到下一节“程序运行基石,栈”时,大家会有更好的理解。

    全局变量

    类的全局变量在类内都能访问到

    public class SixthScopeLesson2 {
        /**
         * 定义全局静态变量
         * 变量名叫val
         * 把10赋值给val
         */
        public static int val = 10;
        
        public static void foo() {
            /**
             * 由于val是全局变量
             * 所以foo函数能访问到
             */
            System.out.println(val);
        }
        
        public static void main(String[] args) {
            /**
             * 由于val是全局变量
             * 所以main函数能访问到
             */
            System.out.println(val);
        }
    }
    
    
  • 相关阅读:
    IfcRoot
    IfcMaterial
    IfcDirection
    IfcAxis2Placement3D
    IfcBeam属性
    osg::Node源码
    不规则形状的Ifc构件顶点坐标获取
    不规则的Ifc构件顶点提取方法
    osg::Group源码
    Qt 图片缩放参数计算
  • 原文地址:https://www.cnblogs.com/eecs/p/8849290.html
Copyright © 2011-2022 走看看