黑马程序员技术交流社区

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

作者: 夜班心桥    时间: 2015-3-19 22:08
标题: 静态成员变量和非静态成员变量的区别
【1】所属对象:
静态成员变量属于其所在的类,而非静态成员变量属于所在的对象;
【2】内存位置:
静态成员变量存放在方法区中的静态区,而非静态成员变量跟随对象存储在堆内存中;
【3】生命周期:
静态成员变量随着类的加载而加载,随着类的消失而消失,生命周期相对较长;
非静态成员变量跟着对象的加载而加载,随着对象的消失而消失。生命周期相对较短;
【4】调用方式不同:
静态成员变量可以用“类名.”来调用,也可以用“对象名.”来调用;
而非静态成员变量只能用“对象名.”来调用;
【5】使用不同
静态成员变量是类的所有对象的共享数据,而非静态成员变量是对象的特有数据。

作者: lwj123    时间: 2015-3-19 22:14
补充:
非静态成员变量的赋值只能在3个地方赋值:
1、定义时赋值2、在非静态代码块中赋值3、在构造方法中赋值
通过javap -c 类名可以知道3种赋值方式原理是一样的,赋值语句的实现都会被抽取到构造方法中赋值

静态成员变量的赋值只能在2个地方赋值:
1、定义时赋值2、在静态代码块中赋值
通过javap -c 类名可以知道3种赋值方式原理是一样的,赋值语句的实现都会被抽取到静态代码块中赋值
作者: cq280309216    时间: 2015-3-19 22:46
学习下。。。
作者: Grady    时间: 2015-3-19 23:09
学习下      
作者: 关山明月    时间: 2015-3-19 23:24
lwj123 发表于 2015-3-19 22:14
补充:
非静态成员变量的赋值只能在3个地方赋值:
1、定义时赋值2、在非静态代码块中赋值3、在构造方法中赋 ...

弱弱的问句,非静态代码块是不是就是构造代码块?




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