当前位置: 首页 > article >正文

static成员变量的本质?静态变量?静态类有什么意义?全局变量?类函数?

static成员变量的本质

面向对象编程语言喜欢将全局变量转移到类内部变成static变量,看起来不像全局变量。事实上,编译器会将static成员变量和全局变量看做的一样的,编程语言的写法减少程序员随意操作全局变量的可能,虽然事实上它们就是全局变量。ObjC类不支持static变量,可以用C语言全局变量的方式来实现static变量。

静态变量

静态变量一般位于程序全局data区,只是编程语言根据它所在的scope做语言级别访问限制。

静态变量和全局变量

  • 可以在C语言一个函数中定义static变量,并比较和全局变量的地址差异。
  • C系语言使用static关键字标示静态变量。
  • PHP使用大写的STATIC关键字标示静态变量。

静态类有什么意义?

静态类可包含静态方法和静态/非静态成员(不能是外部非静态成员),而非静态类是可以访问外部非静态成员。静态类不需要关注实例化,因为它没有实例化。并不是所有语言都支持静态类,因为它有很多可替代品。

  • C/ObjC/C++/Swift/JS均不支持静态类
  • Java只有静态内部类(Static Nested Class), C#也支持静态类,但没有内部类的限制。

全局变量

每个省出生的人口最终会算到全国的出生人口。

不同语言的全局变量

  • C语言在函数之外定义的变量是全局变量,C++除此之外,在类里面定义的static变量也是类全局变量。
  • Java/C#的类static变量和C++比较像。
  • PHP全局变量一样是定义在最外级别,用GLOBAL关键字指示使用的是全局变量。

全局变量、局部变量覆盖

  • C/C++默认局部变量同名覆盖全局变量,C++有特例,是用域作用符::指定访问全局变量。
  • PHP必须明确用GLOBAL指示操作全局变量,否则同名变量会当成局部变量处理。另,PHP提供了GLOCALS数组指示操作全局变量。

类函数

函数其实都很像,只是放在类里面的被约束了一些。

类函数的不同形式

  • 大部分会以点运算符指代选择某个类函数, <obj>.<func>. C++语言有指针,->用于指代指针对象的类函数。
  • ObjC设计来源于Smalltalk, 不是采用点号,而是用方括号 [] 指代函数消息发送。

类静态函数和成员函数

  • 和类的成员分为静态成员和实例成员一样,函数也被分成静态和成员两种。
  • 大部分面向对象编程语言的类静态函数本质是独立于类对象,类成员函数是和类对象息息相关。比如C++/Java/C#等。
  • Python把静态函数又分成类方法和静态方法两种,可以认为它和类完全绑定关系,主要为了提供给外部模块调用,而类方法就和其他面向对象语言理解上一样。
    • 类静态方法用@staticmethod修改,类方法用@classmethod修饰,有默认参数cls.
    • 类静态方法不能访问任何类属性或类方法,当然也不能访问实例属性和方法; 类方法可以访问类属性。


若文章对您有帮助,欢迎关注 程序员小迷 。助您在编程路上越走越好!

微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是 程序员小迷 (致力于C、C++、C#、Android、iOS、Java、Kotlin、Objective-C、Swift、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。


http://www.kler.cn/a/532824.html

相关文章:

  • STM32单片机学习记录(2.2)
  • JavaScript系列(57)--工程化实践详解
  • [蓝桥杯 2024 省 B] 好数
  • C++:结构体和类
  • 【LeetCode 刷题】回溯算法-棋盘问题
  • Linux环境下的Java项目部署技巧:安装 Mysql
  • DeepSeek最新图像模型Janus-Pro论文阅读
  • 落地 dnn对象检测
  • 【BUUCTF杂项题】面具下的flag
  • MTGNN论文解读
  • Electron使用WebAssembly实现CRC-8 MAXIM校验
  • CompletableFuture
  • 2. 【.NET Aspire 从入门到实战】--理论入门与环境搭建--.NET Aspire 概览
  • Docker使用指南(一)——镜像相关操作详解(实战案例教学,适合小白跟学)
  • C 语言 | 入门 | 先导课程
  • asp.netcore 有关jwt的依赖包介绍
  • 鸿蒙Harmony-双向数据绑定MVVM以及$$语法糖介绍
  • DeepSeek-V3:开源多模态大模型的突破与未来
  • 【力扣题解】922. 按奇偶排序数组 II
  • 蓝桥与力扣刷题(141 环形链表)
  • 鼠标拖尾特效
  • BUU17 [RoarCTF 2019]Easy Calc1
  • 游戏引擎学习第87天
  • P3078[USACO13MAR] Poker Hands S
  • leetcode——多数元素(java)
  • 使用mockttp库模拟HTTP服务器和客户端进行单元测试