黑马程序员技术交流社区
标题: 对于static的认识 [打印本页]
作者: chniccs 时间: 2015-4-20 01:01
标题: 对于static的认识
之前对这个了解很少,最近看了毕老师的视频,感觉讲的很详细,把自己的笔记分享给大家。哈哈,大神就不要看了,如果有跟我一样的小白,可以一起看看。:lol
static:
用于修饰成员(成员变量、成员函数),被修饰的成员叫作,静态的成员变量或者类变量。
当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调用。格式:类名.静态成员
特点:
1、随着类的加载而加载(也就是说,静态会随着类的消失而消失,说明它的生命周期最长。)
2、优先于对象存在。
明确一点:静态先存在。对象后存在。
3、被所有对象所共享。
4、可以直接被类名所调用。
实例变量(成员变量)和类变量的区别:
1、存放位置:
类变量随着类的加载而存在于方法区(共享区、数据区)中。
实例变量随着对象的建立而存在于堆内存中。
2、生命周期。
静态变量随着类加载而加载,成员变量随着对象建立而存在。静态变量生命周期最长。
静态使用注意事项:
1、静态方法只能访问静态成员
2、非静态方法既可以访问静态也可以访问非静态。
3、静态方法中不可以定义this、super关键字。
4、主函数是静态的。(因为主函数需要随着类的加载而存在,以便jvm找到它,并作为程序的入口)
静态有利有弊
利处:对对象的共享数据进行单独空间的存储,节省内存空间。没有必要每个对象中都存储一份。
可以直接被类名调用。不用需要实例化对象。
弊端:生命周期过长。
访问出现局限性。(静态虽好,只能访问静态)
什么时候使用静态?
当对象中出现共享数据时, 该数据被静态所修饰。
对象中的特有数据要定义成非静态存在于堆内存中。
当一个功能被很多对象调用时,可以将此功能封装成一个静态的函数,并且放在一个特定的类中,以便不需要实例化对象就可以使用该方法。(为了更加严谨,可以使用private对该类的构造函数进行私有化。)
什么时候定义静态函数?
当功能内部没有访问到非静态数据(对象的特有数据 ),那么该功能可以定义成静态的。
静态代码块
优先于主函数执行。随着类的加载而执行。
只执行一次(因为类只会被加载到内存中一次)
作者: cyr 时间: 2015-4-20 09:56
总结得不错。我也刚刚看了毕老师关于面向对象的视频。一起加油。
作者: 一个好人 时间: 2015-4-20 09:57
我这部分没看 刚好补习一下 挺好的
作者: chniccs 时间: 2015-4-20 10:10
:D嘿嘿,大家一起分享喽
作者: 907888614 时间: 2015-4-20 11:45
学习了。
作者: chniccs 时间: 2015-4-20 12:57
:P。一起学习,一起进步
作者: YQliang 时间: 2015-4-20 13:14
多谢分享!
作者: 小feng 时间: 2015-4-20 17:20
很详细!!
作者: 燕赵之风 时间: 2015-4-20 18:22
不错,写博客上
作者: 不存在的奇迹 时间: 2015-4-20 19:28
学习了! 谢谢
作者: 有你好看 时间: 2015-4-20 20:34
6666666666666666
作者: itheima_llt 时间: 2015-4-20 20:58
这个贴不错!
作者: chniccs 时间: 2015-4-20 21:00
:#多谢大神夸奖
作者: 王善辉 时间: 2015-4-20 22:43
有复习了一次
作者: 邓士林 时间: 2015-4-20 23:08
赞一个,加油
作者: chniccs 时间: 2015-4-20 23:16
:P。。谢谢大神,加油
作者: lclxjzz 时间: 2015-4-20 23:34
刚好复习了···
作者: wanglulu 时间: 2015-4-20 23:46
学习了!!
作者: chniccs 时间: 2015-4-21 00:20
哈哈哈:lol
作者: 海贼王019 时间: 2015-4-21 01:02
看了又忘啊 纠结啊
作者: chniccs 时间: 2015-4-21 09:02
哈哈哈。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |