精华内容
下载资源
问答
  • 外部变量和static内部变量的区别等C语言知识讲解。
  • 因为内部和外部局部变量生命周期不一样,外部类方法执行完该局部变量可能会被释放掉,但该方法中的内部类可能还在执行(如线程),还要使用该变量,所以外部变量设置为final,变成常量,使用时候内部类...

    1.内部类引用外部类局部变量时,外部类的局部变量一定要用final修饰。
    因为内部类和外部类的局部变量生命周期不一样,外部类方法执行完该局部变量可能会被释放掉,但该方法中的内部类可能还在执行(如线程),还要使用该变量,所以外部类变量设置为final的,变成常量,使用的时候内部类可以复制一个副本过去,相当于就不使用该局部变量了。

    我们还可以从JVM的角度去解释这个现象,在编译期的时候,所有的类都会被编译成Class文件。内部类也会被编译成Class文件。但是上面的例子的内部类编译会和我们所知道的普通类编译方式会有些不同。
      大多数的类在编译的时候,需要知道每个方法需要为其所有的局部变量分配多少内存。所以它会去检查方法内定义的变量,从而确定此方法到真正运行的时候需要在栈中开辟多少内存。但这只是计算需要多少内存,真正分配内存是在运行期。
      所以当内部类使用外部类的局部变量时,在编译期也会给它分配额外的内存,并给它赋与外部类相等的值,但是此变量已经不是外部的局部变量了。在内存的角度上看,匿名内部类的i实际上不是外部的i,它们使用的内存空间都不同,只是它们的值相同。
      其实本质上来说,完全可以当作两个不同的变量去使用,但是Java的设计人员可能想要保持一致性,因为Java的初学者在不了解其中真正的机制的时候,会以为他们就是同一个变量,所以干脆就把变量强制定义为final,这样变量就不能被重新赋值,营造一种他们是同一个变量的“假象”。
      2.内部类引用外部类的成员变量时,成员变量不一定要用final修饰,因为它不需要像上面说的那样要需在栈中重新开辟一个空间,而是内部类持有外部类的引用,可以使用外部类类名.this.变量名的方式。

    展开全文
  • 在了解静态变量之前,读者需要知道什么是全局变量和局部变量。局部变量直至定义在函数内部的变量,在函数调用结束后,局部变量将消失。全局变量是指在函数体外定义变量,它生命期随着程序结束而结束。 对于...

    一、静态变量:

    在了解静态变量之前,读者需要知道什么是全局变量和局部变量。局部变量直至定义在函数内部的变量,在函数调用结束后,局部变量将消失。全局变量是指在函数体外定义的变量,它的生命期随着程序的结束而结束。

    对于静态变量读者可以简单粗暴地理解为全局变量,但是二者又有区别。如果定义一个静态的局部变量,它的生命期在函数调用结束后依然存在,在下次调用函数时,会依然保存上一次函数调用结束之后的值。并且,对于静态变量只执行一次初始化(无论函数调用多少次)。在 C++中静态变量是使用 static 关键字来定义的。

    void Invoke()
    {
        static int s_nNum = 0;  //定义静态局部变量
        cout << s_nNum << endl;
        s_nNum++;
    }
    
    int main()
    {
        for(int i = 0; i < 10; i++)
            Invoke();
        return 0;
    }
    
    

    注:对于普通的局部变量,在函数调用时每次都会执行初始化操作,并且在函数调用结束后被销毁。对于全局变量来说,不仅能够够在当前文件中使用,而且还可以在其他文件中被使用。但是全局静态变量则不同,它的作用域是当前定义全局静态变量处到当前文件的结束,不能够在其他文件中访问全局静态变量。

    二、静态数据成员

    在类中使用 static 关键字将数据成员定义为静态成员。静态成员与静态变量是两个完全不同的概念,静态数据成员能够被同一个类的所有对象共享,可以作用于类上,通过类名来访问,简单的说,就是静态数据成员是属于这个类的全局变量。

    #include <iostream>
    using namespace std;
    
    class CUser
    {
    private:
        char m_Username[128];
        char m_Password[128];
    public:
        static int m_nCount;  //静态数据成员
        CUser()              //默认构造函数
        {
            strcpy(m_Username, "MR");
            strcpy(m_Password, "KJ");
        }
    };
    
    int CUser::m_nCount = 10;  //静态成员初始化,不需要在前边加 static
    
    int main()
    {
        CUser User;
        cout << "User 静态成员:" << User.m_nCount << endl;
        CUser defUser;
        defUser.m_nCount = 1;
        cout << "defUser 静态成员:" << defUser.m_nCount << endl;
        cout << "User 静态成员:" << User.m_nCount << endl;
        return 0;
    }
    /*=====output=======
    User 静态成员:10
    defUser 静态成员:1
    User 静态成员:1
    ==================*/

    注:对于 VC++的工程来说,静态数据成员的使用,必须现在 .h 文件中声明 static 变量,然后在对应的 .c 文件头的下方初始化静态数据成员,方可使用,否则会出现编译错误。如果在本类中调用静态数据成员,则只需要object.static;如果想要在其他类中调用另一个类的静态成员,不需要进行额外的任何操作,只需要在调用处成员变量前边加上类名::即可,例如 class::static。

    三、外部变量

    外部变量用于告诉编译器在其他文件的全局区域存在一个全局变量,目的是在当前文件中能够访问这个全局变量。外部变量的生命需要使用 extern 关键字。例如,在应用程序中,如果在一个文件中定义了一个全局变量,例如 m_nCount,为了在其他文件中能够访问全局变量 m_nCount,那么在其他文件中需要声明一个与 m_nCount 同名的外部变量。

    extern int m_nCount;

    四、自动变量

    (1)C++98 中 auto 特性

    自动变量是指变量的生命期在变量的声明时开始,在离开变量的作用域时结束,它仅限于在函数内使用。不可申明为全局的。自动变量用 auto 来声明。

    (2)C++11 中 auto 特性

    auto可以在声明变量的时候根据变量初始值的类型自动为此变量选择匹配的类型,详见另一位博主的文章

    https://www.cnblogs.com/QG-whz/p/4951177.html

     

    展开全文
  • 下面代码在一个Js文件中,我需要初始化全局变量inputMath,但是为了防止function ini()中局部变量重名, 我不得不将局部变量命名为inputMath1,很麻烦,请问有好方法吗? 谢谢! //----------------...
  • python全局变量和局部变量的区别全局变量和局部变量的区别在于作用域,全局变量在整个py文件中声明,全局范围内可以使用;局部变量是在某个函数内部声明的,只能在函数内部使用,如果超出使用范围(函数外部),则会...

    python全局变量和局部变量的区别

    全局变量和局部变量的区别在于作用域,全局变量在整个py文件中声明,全局范围内可以使用;局部变量是在某个函数内部声明的,只能在函数内部使用,如果超出使用范围(函数外部),则会报错。#!/usr/bin/python3

    # -*- coding: utf-8 -*-

    A = 100 # 全局变量一般用大写字母表示

    def func():

    a = 50 # 局部变量一般用小写字母表示

    print(a+A)

    func()

    print(A)

    print(a) # 报错信息NameError: name 'a' is not defined

    #!/usr/bin/python3

    # -*- coding: utf-8 -*-

    A = 100

    def func():

    A=250

    print(A)

    print(A) # 打印全部变量

    func() # 局部变量

    如果想在函数内部改变全局变量,需要在前面加上global关键字,在执行函数之后,全局变量值也会改变。#!/usr/bin/python3

    # -*- coding: utf-8 -*-

    A = 100

    def func():

    global A

    A = 200

    print(A)

    print(A) # 打印全局变量

    func() # 局部变量

    print(A) # 改变后的全局变量

    如果全局变量是列表类型,可以通过list的列表方法去对列表进行修改,并且可以不用global来声明。list_1 = [1,2,56,"list"]

    def changeList():

    list_1.append("over")

    print(list_1)

    changeList()

    print(list_1)

    在函数内部,如果局部变量与全局变量变量名一样,则优先调用局部变量。

    众多python视频教程,尽在PHP中文网,欢迎在线学习!

    展开全文
  • 详细内容python全局变量和局部变量的区别全局变量和局部变量的区别在于作用域,全局变量在整个py文件中声明,全局范围内可以使用;局部变量是在某个函数内部声明的,只能在函数内部使用,如果超出使用范围(函数外部)...

    详细内容

    python全局变量和局部变量的区别

    全局变量和局部变量的区别在于作用域,全局变量在整个py文件中声明,全局范围内可以使用;局部变量是在某个函数内部声明的,只能在函数内部使用,如果超出使用范围(函数外部),则会报错。

    推荐:Python教程#!/usr/bin/python3

    # -*- coding: utf-8 -*-

    A = 100 # 全局变量一般用大写字母表示

    def func():

    a = 50 # 局部变量一般用小写字母表示

    print(a+A)

    func()

    print(A)

    print(a) # 报错信息NameError: name 'a' is not defined

    #!/usr/bin/python3

    # -*- coding: utf-8 -*-

    A = 100

    def func():

    A=250

    print(A)

    print(A) # 打印全部变量

    func() # 局部变量

    如果想在函数内部改变全局变量,需要在前面加上global关键字,在执行函数之后,全局变量值也会改变。#!/usr/bin/python3

    # -*- coding: utf-8 -*-

    A = 100

    def func():

    global A

    A = 200

    print(A)

    print(A) # 打印全局变量

    func() # 局部变量

    print(A) # 改变后的全局变量

    如果全局变量是列表类型,可以通过list的列表方法去对列表进行修改,并且可以不用global来声明。list_1 = [1,2,56,"list"]

    def changeList():

    list_1.append("over")

    print(list_1)

    changeList()

    print(list_1)

    在函数内部,如果局部变量与全局变量变量名一样,则优先调用局部变量。

    众多python视频教程,尽在少侠科技,欢迎在线学习!

    展开全文
  • 成员变量和局部变量的区别 作用域 成员变量:针对整个类有效。 局部变量:只在某个范围内有效。(一般指的就是方法,语句体内) 存储位置 成员变量:随着对象的创建而存在,随着对象的消失而消失,存储在堆内存中。...
  • 局部变量和成员变量的定义和区别

    千次阅读 多人点赞 2018-06-23 15:38:07
    局部变量和成员变量的区别和定义 局部变量 成员变量 定义位置: 方法或方法的内部 类的内部,方法的外部 默认值: 无默认值 字面值,(与数组相同)的默认值 使用范围: 从定义行到...
  • 局部变量和成员变量的区别 1.定义位置不同 局部变量:在方法的内部。 成员变量:在方法的外部,直接写在类当中。 public class Student { private String name;//成员变量 private int age;//成员变量 public ...
  • 也称外部变量,在函数体外定义。 全局变量分为外部全局变量和静态全局变量。区别:使用static存储类别全局变量只能在被定义源程序文件中使用,而使用extern存储类别全局变量不仅可以在被定义源程序文件中...
  • 成员变量和局部变量的区别: 作用域 成员变量:针对整个类有效。 局部变量:只在某个范围内有效。(一般指的就是方法,语句体内) 存储位置 成员变量:随着对象的创建而存在,随着对象的消失而消失,存储在堆内存中...
  • 那局部变量和成员变量的区别到底在哪里呢? 1.定义的位置不一样【重点】 局部变量:在方法的内部 成员变量:在方法的外部,直接写在类当中 2.作用范围不一样【重点】 局部变量:只有方法当中才可以使用,出了方法就...
  • python全局变量和局部变量的区别 全局变量和局部变量的区别在于作用域,全局变量在整个py文件中声明,全局范围内可以使用;局部变量是在某个函数内部声明的,只能在函数内部使用,如果超出使用范围(函数外部),则...
  • Java成员变量和局部变量的区别(五点)1.定义位置不一样2.作用范围不一样3.默认值不一样4.内存位置不一样5.生命周期不一样 1.定义位置不一样 局部变量:在方法内部 成员变量:在方法外部,直接写在类当中 2.作用范围...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 688
精华内容 275
关键字:

外部变量和内部变量的区别