java静态变量特点_Java中static的特点
前两天⾯试时被问到静态的特点,当时回答地不是很好,现在来总结⼀下
在了解某样东西的时候我们通常会从它是什么,为什么,和怎么样在三⽅⾯来衡量,对于java中的static,我们也这样讨论下,要明确以下⼏点:
1、 static在java中到底代表什么,为何要⽤它?
2、 static在java中怎么⽤?
3、 static 有那些特点和使⽤的“局限”?
4、当成员变量被静态修饰后,和⾮静态成员变量的区别?
1、 static在java中到底代表什么,为何要⽤它?static修饰的变量
static――静态――“指定位置“
⾸先,我们来看看java的内存:java把内存分为栈内存和堆内存,栈内存⽤来存放⼀些基本类型的变量和数组及对象的引⽤变量,⽽堆内存主要是来放置对象的。
⽤ static的修饰的变量和⽅法,实际上是指定了这些变量和⽅法在内存中的“固定位置”-static storage。既然要有“固定位置”那么他们的 “⼤⼩”似乎就是固定的了,有了固定位置和固定⼤⼩的特征了,在栈中或堆中开辟空间那就是⾮常的⽅便了。如果静态的变量或⽅法在不出其作⽤域的情况下,其引⽤句柄是不会发⽣改变的。
我们常看到:static变量有点类似于C中的全局变量的概念;静态表⽰的是内存的共享,就是它的每⼀个 实例都指向同⼀个内存地址。把static拿来,就是告诉JVM它是静态的,它的引⽤(含间接引⽤)都是指向同⼀个位置,在那个地⽅,你把它改了,它就不会变成原样,你把它清理了,它就不会回来了。
注:java的主类中main()⽅法本⾝就是⼀个static的,所以main⽅法的执⾏就是在没有产⽣新的实例的情况。
2、 static在java中怎么⽤?
static是⼀个修饰符,⽤于修饰成员(成员变量和成员函数)。
当成员被静态修饰后,就多了⼀个调⽤⽅式,除了可以被对象调⽤外,还可以直接被类名调⽤:类名.静态成员。
3、 static 有那些特点和使⽤的“局限”?
(⼀)特点
静态成员随着类的加载⽽加载;
静态成员优先于对象存在;
静态成员被所有对象所共享;
静态成员多了⼀个中调⽤⽅式,可以被类名直接调⽤。
(⼆)利弊
利:
对对象的共享数据进⾏单独空间的存储,节省空间,没有必要每⼀个对象中都存储⼀份;
可以直接被类名调⽤。
弊:
⽣命周期过长;
访问出现局限性,只能访问静态。
(三)注意事项
静态⽅法只能访问静态成员, ⾮静态⽅法既可以访问静态⼜可以访问⾮静态;
静态⽅法中不可以定义this,super关键字;(因为this代表是对象,⽽静态存在时,有可能没有对象,且静态优先于对象存在。所以静态⽅法运⾏时,this是没有任何对象代表的。 简单说,先进内存的数据不可以访问后进内存的数据,可是后进内存数据可以访问先进内存的数据)
主函数是静态的
4、当成员变量被静态修饰后,和⾮静态成员变量的区别?
静态变量也称为类变量,也就是直接可以被类名调⽤的变量,这个变量是所属于类的;
⾮静态变量称为成员变量,或者实例变量,是被对象调⽤的,是所属具体对象的。
静态变量随着类的加载⽽加载,也意味着随着类的消失⽽消失,⽣命周期最长;
实例变量,随着对象的创建⽽加载,随着对象的消失⽽消失,按照对象的⽣命周期⽽存在。
静态变量存储在⽅法区的静态区中;
实例变量存在于对象所属的堆内存中。
静态变量数据,被所有对象所共享;
实例变量是对象中的特有数据。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。