Java中static的特色

前两天面试时被问到静态的特色,当时回答地不是很好,如今来总结一下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中怎么用?作用域

 

  • static是一个修饰符,用于修饰成员(成员变量和成员函数)。
  • 当成员被静态修饰后,就多了一个调用方式,除了能够被对象调用外,还能够直接被类名调用:类名.静态成员。
 
三、 static 有那些特色和使用的“局限”?
(一)特色
  • 静态成员随着类的加载而加载;
  • 静态成员优先于对象存在;
  • 静态成员被全部对象所共享;
  • 静态成员多了一个中调用方式,能够被类名直接调用。
(二)利弊
利:
  • 对对象的共享数据进行单独空间的存储,节省空间,没有必要每个对象中都存储一份;
  • 能够直接被类名调用。
弊:
  • 生命周期过长;
  • 访问出现局限性,只能访问静态。
(三)注意事项
  • 静态方法只能访问静态成员, 非静态方法既能够访问静态又能够访问非静态;
  • 静态方法中不能够定义this,super关键字;(由于this表明是对象,而静态存在时,有可能没有对象,且静态优先于对象存在。因此静态方法运行时,this是没有任何对象表明的。 简单说,先进内存的数据不能够访问后进内存的数据,但是后进内存数据能够访问先进内存的数据)
  • 主函数是静态的
 
四、当成员变量被静态修饰后,和非静态成员变量的区别?
  • 静态变量也称为类变量,也就是直接能够被类名调用的变量,这个变量是所属于类的;
        非静态变量称为成员变量,或者实例变量,是被对象调用的,是所属具体对象的。
  • 静态变量随着类的加载而加载,也意味着随着类的消失而消失,生命周期最长; 
        实例变量,随着对象的建立而加载,随着对象的消失而消失,按照对象的生命周期而存在。
  • 静态变量存储在方法区的静态区中;
        实例变量存在于对象所属的堆内存中。
  • 静态变量数据,被全部对象所共享;
        实例变量是对象中的特有数据。
相关文章
相关标签/搜索