0

0

static,何时用,何时不用

php中文网

php中文网

发布时间:2016-07-30 13:30:32

|

2367人浏览过

|

来源于php中文网

原创

学完static以后,同学们都觉得用static修饰的成员特别方便,不用创建对象就可以使用,而不用static修饰的成员倒显得麻烦了,非得创建对象才能使用,但我们平时定义方法时又很少使用static。为什么呢,那什么时候用static,又什么时候不用static呢?

我们抛开static成员使用的特点,理解一下static修饰成员的意义。

类的一个成员被static修饰后,该成员就属于类的成员了,被所有对象共享,如果成员是成员变量,那么该成员以及该成员的值就被所有对象所共享;如果成员是成员方法,那么该方法就被所有对象共享;相反如果成员没有用static修饰,那么每个对象就有自己的成员,这时可以说,每个对象的成员是他私有的,注意这和权限控制里的私有权限是两码事。可以想象,共享的方法只能访问共享的成员,是无法访问对象私有的成员的,而对象私有的成员方法是可以访问共享的成员的。打个比方,就像我们给公家干活肯定花的是公家的钱,绝不会花私人的钱,而给自己干活时,却可以花公家的钱,只要公家不追究。这也就是为什么static修饰的成员只能访问static修饰的成员,如static修饰的成员方法,static修饰的初始化块还有static修饰的内部类均如此。也有的人把static理解为静态的或全局的,其实差不多,因为静态的对应者动态的,全局的对应着局部的,看你从哪个角度去理解。

在实际开发中,之所以给类定义成员变量,就是因为该类有不同状态的对象,比如我们定义人这个类,一般会定义年龄、姓名等属性,然后不同的人(这里就是人这个类的对象了)虽然都有年龄和姓名,但各有各的年龄,各有各的姓名,这就是上面说的每个对象的成员是该对象私有的。如果把年龄和姓名定义成static的,那就导致所有的人都有相同的年龄和姓名,显然这没有意义。

现在回答什么时候使用static修饰成员方法。

Build AI
Build AI

为您的业务构建自己的AI应用程序。不需要任何技术技能。

下载

       我个人的理解很简单,只要该成员方法不需要与非static的成员打交道,就可以使用static。换句话说,只要该方法的执行与对象本身的状态没有关系,就可以使用static(这个结论可能过于草率)。这类方法通常只对传入的参数作处理,执行过程和自身状态毫无关系,比如我们熟知的IntegerString

                     Integer.toBinaryString(10);

String.valueOf(12);

IntegerString虽然都有非static的成员,但是这两个方法都不与非static的成员打交道,所以可以定义成static的。

通常,我们在定义一个工具类时,一般把它的方法定义成static的,因为这种类只用作工具,只关注他的行为,不关注他的状态,所以不需要定义成员变量。使用这种工具类的方法时无需创建对象,既简单又节省资源。创建对象来调用反而麻烦且浪费资源,所以这种类被设计出来后就干脆不允许创建对象,因为其构造方法被设计成private权限了。比如我们用的MathArrays,还有Collections。这三个类时我们java中最常见的三个工具类。

       static在实际开发中有很多巧妙的用法,只有理解了static的意义,我们才能领略其中的巧妙。

以上就介绍了static,何时用,何时不用,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

相关专题

更多
云朵浏览器入口合集
云朵浏览器入口合集

本专题整合了云朵浏览器入口合集,阅读专题下面的文章了解更多详细地址。

0

2026.01.20

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

20

2026.01.20

PS使用蒙版相关教程
PS使用蒙版相关教程

本专题整合了ps使用蒙版相关教程,阅读专题下面的文章了解更多详细内容。

62

2026.01.19

java用途介绍
java用途介绍

本专题整合了java用途功能相关介绍,阅读专题下面的文章了解更多详细内容。

87

2026.01.19

java输出数组相关教程
java输出数组相关教程

本专题整合了java输出数组相关教程,阅读专题下面的文章了解更多详细内容。

39

2026.01.19

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

10

2026.01.19

xml格式相关教程
xml格式相关教程

本专题整合了xml格式相关教程汇总,阅读专题下面的文章了解更多详细内容。

13

2026.01.19

PHP WebSocket 实时通信开发
PHP WebSocket 实时通信开发

本专题系统讲解 PHP 在实时通信与长连接场景中的应用实践,涵盖 WebSocket 协议原理、服务端连接管理、消息推送机制、心跳检测、断线重连以及与前端的实时交互实现。通过聊天系统、实时通知等案例,帮助开发者掌握 使用 PHP 构建实时通信与推送服务的完整开发流程,适用于即时消息与高互动性应用场景。

19

2026.01.19

微信聊天记录删除恢复导出教程汇总
微信聊天记录删除恢复导出教程汇总

本专题整合了微信聊天记录相关教程大全,阅读专题下面的文章了解更多详细内容。

160

2026.01.18

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
深入剖析redis教程
深入剖析redis教程

共55课时 | 8.1万人学习

Redis中文开发手册
Redis中文开发手册

共0课时 | 0人学习

麦子学院深入浅出 redis 视频教程
麦子学院深入浅出 redis 视频教程

共20课时 | 4.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号