前两天面试时被问到静态的特色,当时回答地不是很好,如今来总结一下java
在了解某样东西的时候咱们一般会从它是什么,为何,和怎么样在三方面来衡量,对于java中的static,咱们也这样讨论下,要明确如下几点:面试
一、 static在java中到底表明什么,为什么要用它?数组
二、 static在java中怎么用?函数
三、 static 有那些特色和使用的“局限”?this
四、当成员变量被静态修饰后,和非静态成员变量的区别?spa
一、 static在java中到底表明什么,为什么要用它?对象
static――静态――“指定位置“
首先,咱们来看看java的内存:java把内存分为栈内存和堆内存,栈内存用来存放一些基本类型的变量和数组及对象的引用变量,而堆内存主要是来放置对象的。
用 static的修饰的变量和方法,其实是指定了这些变量和方法在内存中的“固定位置”-static storage。既然要有“固定位置”那么他们的 “大小”彷佛就是固定的了,有了固定位置和固定大小的特征了,在栈中或堆中开辟空间那就是很是的方便了。若是静态的变量或方法在不出其做用域的状况下,其引用句柄是不会发生改变的。
咱们常看到:static变量有点相似于C中的全局变量的概念;静态表示的是内存的共享,就是它的每个 实例都指向同一个内存地址。把static拿来,就是告诉JVM它是静态的,它的引用(含间接引用)都是指向同一个位置,在那个地方,你把它改了,它就不会变成原样,你把它清理了,它就不会回来了。生命周期
注:java的主类中main()方法自己就是一个static的,因此main方法的执行就是在没有产生新的实例的状况。内存
二、 static在java中怎么用?作用域