黑马程序员技术交流社区

标题: 静态变量和实例变量的区别 [打印本页]

作者: 马雨铎    时间: 2011-7-26 11:27
标题: 静态变量和实例变量的区别
静态变量和实例变量的区别?
作者: 詹季春    时间: 2011-7-26 11:31
静态变量--(以static修饰)类属性
实例变量--(不以static修饰)实例属性

类属性:定义一个属性时候使用static修饰的就是类属性,从这个类的准备阶段开始就存在,直到系统完全销毁这个类,类属性的作用域与这个类的生存范围相同
实例属性:从这个类的实力被创建开始存在,直到系统完全销毁这个实例,实例属性的作用域与对应的实例生存范围相同。
如下定义的一个person类,一个实例属性:name,一个类属性:eyeNum[code=java]class Person
{
        //定义一个实例属性
        public String name;
        //定义一个类属性
        public static int eyeNum;
}
public class TestPerson
{
        public static void main(String[] args)
        {
                //Person类已经加载,则eyeNum变量起作用了,输出0
                System.out.println("Person的eyeNum类属性值:" + Person.eyeNum);
                //创建Person对象
                Person p = new Person();
                //通过Person对象的引用p来访问Person对象name实例属性
                //并通过实例访问eyeNum类属性
                System.out.println("p变量的name属性值是:" + p.name
                        + " p对象的eyeNum属性值是:" + p.eyeNum);
                //直接为name实例属性赋值
                p.name = "孙悟空";
                //通过p访问eyeNum类属性,依然是访问Person的eyeNum属性
                p.eyeNum = 2;
                //再次通过Person对象来访问name实例属性和eyeNum类属性
                System.out.println("p变量的name属性值是:" + p.name
                        + " p对象的eyeNum属性值是:" + p.eyeNum);
                //前面通过p修改了Person的eyeNum属性,此处的Person.eyeNum将输出2
                System.out.println("Person的eyeNum类属性值:" + Person.eyeNum);
                Person p2 = new Person();
                //p2访问的eyeNum类属性依然引用Person类的,因此依然输出2
                System.out.println("p2对象的eyeNum类属性值:" + p2.eyeNum);
        }
}[/code]从上面可以看出,成员变量(包括静态和非静态)无需显示初始化,只要为一个类定义了类属性或实例属性,则系统就会在这个类的准备阶段或者创建类的实例时候进行默认初始化,成员变量默认初始化的规则和数组动态初始化的数组元素的赋值规则一样
[ 本帖最后由 詹季春 于 2011-07-26  11:48 编辑 ]
作者: 匿名    时间: 2011-7-26 11:34
这个我知道,但是 我看代码的时候出来了这个  static i = 10;  我没搞懂 class A a; a.i =10
作者: 匿名    时间: 2011-7-26 12:06
静态变量也叫类变量,就是加static关键字;
反之,不加关键字static的就叫对象变量;
两者的区别:通俗的说就是静态变量的值改变,之后其他对象得到的就是改变的结果;
实例变量则不影响。




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