2-static详解

参考文章
static可用于修饰变量与函数,控制存储方式与可见性

修饰对象

修饰局部变量

函数内部的局部变量,编译器分配于栈空间,函数执行结束时,将释放该局部变量,导致该局部变量的数值没法保存到下一次调用。
解决方案是,使用全局变量与static,全局变量改变了变量的可见性,static通过改变变量的存储方式(存储于全局区),延长局部变量的生命周期。
static 修饰的静态局部变量只执行初始化一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放。

修饰函数

static所修饰的函数将限制该函数只能够在该源文件中使用。

修饰类的成员变量

在 C++ 类中,当需要一个数据对象为整个类而非某个对象服务,同时又力求不破坏类的封装性,即要求此成员隐藏在类的内部,对外不可见时,可将其定义为静态数据。

  1. 静态数据成员可以实现多个对象之间的数据共享,它是类的所有对象的共享成员,它在内存中只占一份空间,如果改变它的值,则各对象中这个数据成员的值都被改变。
  2. 静态数据成员是在程序开始运行时被分配空间,到程序结束之后才释放,只要类中指定了静态数据成员,即使不定义对象,也会为静态数据成员分配空间。
  3. 静态数据成员可以被初始化,但是只能在类体外进行初始化,若未对静态数据成员赋初值,则编译器会自动为其初始化为 0。
  4. 静态数据成员既可以通过对象名引用,也可以通过类名引用。
修饰类的成员方法

静态成员方法,可以直接通过类名调用静态成员方法。
不能通过类名来调用类的非静态成员函数。(使用双冒号::,静态方法)
类的对象可以使用静态成员函数和非静态成员函数。
类的静态成员函数中只能引用静态成员,不能引用非静态成员。
类的非静态成员函数可以调用用静态成员函数,但反之不能。
类的静态成员变量在使用前必须先初始化。

  1. 静态成员函数和静态数据成员一样,他们都属于类的静态成员,而不是对象成员。
  2. 非静态成员函数有 this 指针,而静态成员函数没有 this 指针。
  3. 静态成员函数主要用来访问静态数据成员而不能访问非静态成员。
静态成员小结

静态资源是类初始化的时候加载的,而非静态资源是类实例化对象的时候加载的。 类的初始化早于类实例化对象,比如 Class.forName(“xxx”) 方法,就是初始化了一个类,但是并没有实例化对象,只是加载这个类的静态资源罢 了。所以对于静态资源来说,它是不可能知道一个类中有哪些非静态资源的;但是对于非静态资源来说就不一样了,由于它是实例化对象出来之后产生的,因此属于类的这些东西它都能认识。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值