static小结
static:静态的,用来修饰成员变量和函数,不能修饰构造函数;
静态函数:被static关键字修饰的函数就是静态函数;
静态函数的格式:将static关键字写在函数的返回值类型前面
静态函数的特点:
1、和类的对象无关,可以直接通过类名调用
2、只能调用静态函数和静态成员变量,不能使用和类的对象有关的成员(this关键字;super关键字;非静态成员变量;非静态函数;)
原因:非静态函数和非静态成员变量都必须依赖类的对象使用;
而静态函数使用都不需要有对象,所以在静态函数中不能直接调用非静态函数和非静态成员变量;
3、非静态函数可以调用静态函数和非静态函数,也可以使用静态成员变量和非静态成员变量;
原因:非静态函数只能通过类的对象使用;如果可以调用非静态函数,说明此时已经存在对象;
已经存在对象,说明类已经加载完毕;
类已经加载完毕,所以静态函数肯定可以使用;
4、构造函数不能是静态的
因为构造函数是在创建对象的时候用来给对象的成员变量赋值用的;如果构造函数可以是静态的,就不需要对象就能使用,就没有意义;
静态成员变量:被static修饰的成员变量就是静态成员变量;
静态成员变量的格式:将static关键字写在成员变量的数据类型前面;
静态成员变量的特点:
1、和类的对象无关,直接通过类名调用;
2、保存在方法区的静态区域,被该类的所有对象共享;
3、在类加载完成时就完成空间分配和赋值;
什么时候应该使用静态函数和静态成员变量?
不需要对象,和对象无关的时候,就需要定义为静态成员;
(静态成员变量又叫做类变量、类字段;静态函数又叫做类函数、类方法)
什么时候不能将函数定义为静态的?
如果一个函数中使用了非静态成员变量,就不能将其定义为静态的函数;
静态成员变量和非静态成员变量的区别:
1、从保存位置:
a) 静态成员变量:保存在方法区的静态区域
b) 非静态成员变量: 保存在堆内存的对象空间中
2、从书写格式上看:
a) 静态成员变量: 需要使用static关键字修饰,将static关键字直接写在数据类型前面;
b) 非静态成员变量: 不需要使用static关键字修饰;
3、从生命周期上看:
a) 静态成员变量: 类加载的时候就分配空间和赋值;直到这个类被卸载(或者整个程序结束);
b) 非静态成员变量: 创建对象的时候才分配空间和赋值;对象成为垃圾空间被回收的时候;
4、从使用方法上看:
a) 静态成员变量: 可以直接通过类名使用,和类的对象无关;
b) 非静态成员变量: 必须通过类的对象使用;
5、从修改后的影响范围上看:
a) 静态成员变量: 所有对象都收到影响;
b) 非静态成员变量: 只对这一个对象有影响;
本博客文章均已测试验证,欢迎评论、交流、点赞。
部分文章来源于网络,如有侵权请联系删除。
转载请注明原文链接:https://www.cnblogs.com/sueyyyy/p/9268827.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix