前两天面试时被问到静态的特点,当时回答地不是很好,现在来总结一下

在了解某样东西的时候我们通常会从它是什么,为什么,和怎么样在三方面来衡量,对于java中的static,我们也这样讨论下,要明确以下几点:

1、 static在java中到底代表什么,为何要用它?

2、 static在java中怎么用?

3、 static 有那些特点和使用的“局限”?

4、当成员变量被静态修饰后,和非静态成员变量的区别?

1、 static在java中到底代表什么,为何要用它?

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、当成员变量被静态修饰后,和非静态成员变量的区别?
  • 静态变量也称为类变量,也就是直接可以被类名调用的变,这个变量是所属于类的;

非静态变量称为成员变量,或者实例变量,是被对象调用的,是所属具体对象的。

  • 静态变量随着类的加载而加载,也意味着随着类的消失而消失,生命周期最长;

实例变量,随着对象的创建而加载,随着对象的消失而消失,按照对象的生命周期而存在。

  • 静态变量存储在方法区的静态区中;

实例变量存在于对象所属的堆内存中。

  • 静态变量数据,被所有对象所共享;

实例变量是对象中的特有数据。

Java中static的特点的更多相关文章

  1. java中static关键字的作用

    java中static关键字主要有两种作用: 第一:为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关. 第二,实现某个方法或属性与类而不是对象关联在一起 简单来说,在Java语言中,s ...

  2. Java中static的用法,初始化块

    使用 Arrays 类操作 Java 中的数组语法: Arrays.sort(数组名); 可以使用 sort( ) 方法实现对数组的排序,只要将数组名放在 sort( ) 方法的括号中,就可以完成对该 ...

  3. Java中static块执行时机

    Java中static块执行时机 演示例子 在使用static进行初始化的操作,怎么也执行不了!代码如下: public class StaticDemo { public static final ...

  4. Java学习笔记十七:Java中static使用方法

    Java中static使用方法 一:Java中的static使用之静态变量: 我们都知道,我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,互相独立.然而在某些时候,我们更希望该类所有的 ...

  5. java中static变量和方法的总结

    转自:http://blog.csdn.net/haobo920/article/details/5921621 java中static变量和方法的总结 java中一切皆是对象 一个类中对象的定义一般 ...

  6. Java中static final 与 final 的区别(转载)

    转自:http://advance0683.iteye.com/blog/1107732 Java中static final 与 final 的区别: 例子: Java代码 import java.u ...

  7. Java中static修饰类的问题

    Java中static修饰类的问题 众所周知,Java中static关键字可以修饰方法与变量: 修饰变量的时候,这个变量属于类变量,可以直接通过类名.变量名来引用. 修饰方法的时候可以直接通过类名.方 ...

  8. Java 中 static 的作用

    static 关键字的作用 在 Java 中 static 关键字有4种使用场景,下面分别进行介绍: 1.static 成员变量 public class Student { // 静态成员变量 pr ...

  9. 关于java中static的应用及一种常见错误

    JAVA中的static的应用 在web项目的开发中,遇到了类中的static方法不奏效. 在开发过程中,我定义了一个静态方法初始化数组,但是在创建类的对象后,访问该数组是全为null.我一直以为st ...

  10. Java中static的用法

    static静态,作为修饰符,最初是由c引入,一开始static表示退出一个块后依然存在的局部变量.随后,static表示不能被其他文件访问的全局变量和函数.到了C++和java,static表示属于 ...

随机推荐

  1. 关于Task的一点思考和建议

    前言 本打算继续写SQL Server系列,接下来应该是死锁了,但是在.NET Core项目中到处都是异步,最近在写一个爬虫用到异步,之前不是很频繁用到异步,当用到时就有点缩手缩尾,怕留下坑,还是小心 ...

  2. 《JAVASCRIPT高级程序设计》DOM扩展

    虽然DOM为XML及HTML文档交互制定了一系列的API,但仍然有几个规范对标准的DOM进行了扩展.这些扩展中,有很多是浏览器专有的,但后来成了事实标准,于是其他浏览器也提供了相同的实现:浏览器开发商 ...

  3. WebForm 内置对象、数据增删改、状态保持

    一.内置对象 1.Response对象:响应请求 Response.Write("<script>alert('添加成功!')</script>"); → ...

  4. BOM数据基础 - Mobox物料编码管理及实现

    1 企业现状 在企业日常经营过程中会产生大量的文档,如设计图纸.变更单.计算书.设计方案等,如果是制造企业还会产生大量的产品.组成产品的零部件等物料,这些数据在进入信息系统前都需要有一个唯一的标识,也 ...

  5. Express之get,pos请求参数的获取

    Express的版本4.X Get query参数的获取 url假设:http://localhost:3000/users/zqzjs?name=zhaoqize&word=cool& ...

  6. ECJTUACM16 Winter vacation training #4 题解&源码

    A......................................................................................... 题目链接→Code ...

  7. uml的图与代码的转换——类图

    Uml是我们经常使用的统一建模语言或称标准建模语言.它的图是如何和代码对应的呢?下面我们就来就这个问题讨论一下: 首先是类:uml中的类图是这样的 在这个图中,我们可以看出,这个类图总共分了三行,第一 ...

  8. jQuery中.bind() .live() .delegate() .on()的区别 和 三种方式写光棒事件 动画

    地狱的镰刀 bind(type,[data],fn) 为每个匹配元素的特定事件绑定事件处理函数. $("a").bind("click",function(){ ...

  9. 一次MySQL死锁问题解决

    一次MySQL死锁问题解决 一.环境 CentOS, MySQL 5.6.21-70, JPA 问题场景:系统有定时批量更新数据状态操作,每次更新上千条记录,表中总记录数约为500W左右. 二.错误日 ...

  10. 【转】构建基于CXF的WebService服务

    构建基于CXF的WebService服务 Apache CXF = Celtix+ XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF.C ...