黑马程序员技术交流社区

标题: 静态成员和非静态成员的区别 [打印本页]

作者: xwh    时间: 2012-9-10 23:54
标题: 静态成员和非静态成员的区别
静态变量使用static修饰符声明,不带有static修饰符声明的变量时非静态变量,这两者有什么区别呢?
作者: 杨千里    时间: 2012-9-11 01:06
实例变量和类变量
1,存放位置
        类变量随着类的加载而加载 存放在方法区中
                实例变量随着对象的建立而建立,存在于堆内存中
2,生命周期
        类变量的生命周期最长,随着类的消失而消失
                实例变量的生命周期随着对象的消失而消失
静态的使用注意事项:
1,静态方法只能访问静态成员
       非静态方法既可以访问静态也可以访问非静态
2,静态方法中不可以定义this,super关键字
        因为静态优先于对象存在,所以静态方法中不可以出现this
当对象中出现共享数据时。该数据被静态所修饰,
对象中的特有数据要定义成非静态,存在于堆内存中
作者: mjbtdym    时间: 2012-9-11 02:53
静态变量与非静态变量的区别如下:

  1、内存分配

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

  2、生存周期

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

  3、调用方式

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

  4、共享方式

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

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

  5、访问方式

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

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

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

作者: 李京    时间: 2012-9-11 08:04
前面加 Static的就是静态的

可以通过下面的理解下

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

作者: iamheima    时间: 2012-9-11 09:18
我一直这样理解,静态成员是属于类的,而非静态成员是属于某个实例化了的对象的。
这样就很好理解那些访问方式、生命周期等上的区别了。
作者: 班志国    时间: 2012-9-11 10:16
静态的要先于对象进入内存  可以直接用类名调用    static 一般修饰共享 数据的 但不建议频繁视频 因为垃圾回收机制清理不掉  望采纳
作者: 王海舟    时间: 2012-9-11 11:47
静态成员使用static关键字修饰。

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

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





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2