javabbs开源论坛系统

功能强大、开源、代码通俗易懂、注释详细、面向二次开发友好!

FreeCMS团队又一力作!打造更好的中国开源jsp java 论坛系统!

javabbsV1.2已发布!



在线演示 立即购买 下载用户手册
客服QQ: 124812878 联系电话: 18339991503 Email: freeteam@foxmail.com
点击查看FreeCMS商业版开源CMS系统 点击查看shop4j开源java商城系统

静态和非静态 - 神绮H亚里亚

加入收藏夹】     【打印】     【关闭】 来源: 日期:2017-06-26 04:00:05 点击量: 收藏

 

在语法定义上的区别:静态变量前要加static关键字,而实例变量(下面的变量包括一切静态【变量,方法,静态内部类】)前则不加。

 

在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。

上面这些事官方翻译过来的解释,很多人进入了一个误区,那就是静态方法和变量越多,程序运行占用的内存越大,程序效率越低,但实际上却不是这样

静态变量上面还有一个东西,叫做类,不知道大家有没有试过静态类


从上面可以看出,静态对类的修饰是非法的
,除非是内部类,内部类其实也可以看做是顶级类的一个变量

我们可以看出,静态的东西其实都是依附于普通类而存在的,系统为静态变量分配内存之前必须先为类分配一个内存

有些人都认为java会在一开始就为所有的类分配一个内存,但其实并不是这样

大家想想,我们做一个项目,第三方的jar包有多少,如果真的一开始就为所有的类分配一个内存的话那还得了?

那么何时为内分配内存呢?

在编程语言之中(汇编除外)都有引用这么一个概念,只有当我们引用这个类的时候jvm才会为该类分配内存,如import关键字,还有我们用类名.方法名(变量名)的时候

静态和非静态最大的区别其实还是在于内存分配上,静态变量从引用的时候开始分配内存,jvm至始至终都只会为静态成员分配一个内存空间,而一般成员则是在类加载的时候加载内存,因此并不是静态成员越多程序越垃圾。

在java之中的单例模式就是采用静态实例化的方式。

当然,也并非静态成员越多越好,因为静态成员的生命周期是从加载开始,当整个程序,所有的地方都没有引用他们的指针时才会被jvm回收,而非静态成员则有自己固定的生命周期,能够及时释放内存

一些不常用的东西,我们没有必要让他一直占着内存,但偏偏object之中finalize方法并不能被我们手动调用释放内存,

这个方法其实只是告诉我们有这么一个东西,并不能被我们所掌控

因此在java之中,我们应该看情况使用静态还是非静态,合理利用内存,




上一条

下一条

相关新闻
自定义表单