A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xwh 中级黑马   /  2012-9-10 23:54  /  2537 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

静态变量使用static修饰符声明,不带有static修饰符声明的变量时非静态变量,这两者有什么区别呢?

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

6 个回复

正序浏览
静态成员使用static关键字修饰。

在对一个类进行实例化之前,就可以调用它的静态成员,即与静态成员相关联的是类本身,而不是对象,所以访问一个类的静态成员使用的是类名而不是实例名。
而与之相对的,要访问一个类的实例成员则必须先实例化一个类,通过实例名(对象名)来访问。

静态成员不能访问非静态成员,因为非静态成员有可能尚未被实例化,尚未存在于内存中。
非静态成员却可以访问静态成员,因为在一个类实例化之前静态成员就已经存在了。

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
静态的要先于对象进入内存  可以直接用类名调用    static 一般修饰共享 数据的 但不建议频繁视频 因为垃圾回收机制清理不掉  望采纳
回复 使用道具 举报
我一直这样理解,静态成员是属于类的,而非静态成员是属于某个实例化了的对象的。
这样就很好理解那些访问方式、生命周期等上的区别了。
回复 使用道具 举报
前面加 Static的就是静态的

可以通过下面的理解下

静态变量使用 static 修饰符进行声明,在类被实例化时创建,通过类进行访问
不带有 static 修饰符声明的变量称做非静态变量,在对象被实例化时创建,通过对象进行访问
一个类的所有实例的同一静态变量都是同一个值,同一个类的不同实例的同一非静态变量可以是不同的值
静态函数的实现里不能使用非静态成员,如非静态变量、非静态函数等

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
静态变量与非静态变量的区别如下:

  1、内存分配

  静态变量在应用程序初始化时,就存在于内存当中,直到它所在的类的程序运行结束时才消亡;而非静态变量需要被实例化后才会分配内存。

  2、生存周期

  静态变量生存周期为应用程序的存在周期;非静态变量的存在周期取决于实例化的类的存在周期。

  3、调用方式

  静态变量只能通过“类.静态变量名”调用,类的实例不能调用;非静态变量当该变量所在的类被实例化后,可通过实例化的类名直接访问。

  4、共享方式

  静态变量是全局变量,被所有类的实例对象共享,即一个实例的改变了静态变量的值,其他同类的实例读到的就是变化后的值;

  非静态变量是局部变量,不共享的。

  5、访问方式

  静态成员不能访问非静态成员;非静态成员可以访问静态成员。

  静态变量在类装载的时候分配内存,以后创建的对象都使用的该内存,相应的操作也就是对这块内存进行操作。也可以看作是另类的全局变量。

  在WebSerivice中想只进行一次初始化,而不用每次都进行初始化这样占用大量资源。还可以对调用的服务进行管理,比如想把每次调用的服务进行排队执行,可以将想应信息放到Arraylist中,静态时钟中排队执行

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
实例变量和类变量
1,存放位置
        类变量随着类的加载而加载 存放在方法区中
                实例变量随着对象的建立而建立,存在于堆内存中
2,生命周期
        类变量的生命周期最长,随着类的消失而消失
                实例变量的生命周期随着对象的消失而消失
静态的使用注意事项:
1,静态方法只能访问静态成员
       非静态方法既可以访问静态也可以访问非静态
2,静态方法中不可以定义this,super关键字
        因为静态优先于对象存在,所以静态方法中不可以出现this
当对象中出现共享数据时。该数据被静态所修饰,
对象中的特有数据要定义成非静态,存在于堆内存中

评分

参与人数 1技术分 +1 收起 理由
郑文 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马