黑马程序员技术交流社区

标题: 黑马程序员-静态变量与实例变量的生命周期总结 [打印本页]

作者: 学习者    时间: 2013-9-23 23:24
标题: 黑马程序员-静态变量与实例变量的生命周期总结
本帖最后由 学习者 于 2013-9-23 23:30 编辑
  1. ---------------------- <a target="blank">ASP.Net+Android+IO开发S</a>、<a target="blank">.Net培训</a>、期待与您交流! ----------------------
复制代码
类的成员变量有两种,一种是被static关键字修饰的,叫类变量或静态变量;另一种是没有被static修饰的变量,叫实例变量。
静态变量和实例变量的区别在于:
       1,类的静态变量在内存中只有一个,Java虚拟机在加载类的过程中为静态变量分配内存,静态变量在方法区,被类的所有实例共享,静态变量的生命周期取决于类的生命周期。
        2,类的每个实例都有实例变量,每创建一个类的实例,java虚拟机就会为实例变量分配一次内存,实例变量位于堆中,实例变量的生命周期取决于实例的生命周期。
        
        以下StaticTesst类有两个成员变量a为实例变量,b为静态变量。
  1. class StaticTest
  2.         {
  3.              int a = 0;
  4.              static int b = 0;
  5.              public static void main(String[] args)
  6.                  {
  7.                       StaticTest st1 = new StaticTest();
  8.                       st1.a++;
  9.                       st1.b++;
  10.                       System.out.println(" st1类");
  11.                       System.out.println( st1.a);                                 
  12.                       System.out.println( st1.b);              
  13.                      /*StaticTest st2 = new StaticTest();
  14.                       st2.a++;
  15.                       st2.b++;
  16.                       System.out.println(" st2类");
  17.                       System.out.println( st2.a);
  18.                       System.out.println( st2.b);
  19.                       */
  20.                  }
  21.         }
  22. <p> </p>
复制代码
注释前打印结果为:                                   注释后打印结果为:
                                                           st1类                                                         st1类
                                                              1                                                                1
                                                              1                                                                1
                                                          st2类
                                                             1
                                                             2

从打印的结果看出st1与st2共享b,st2类的静态变量b在1的基础上进行加1运算,而其实例变量则单独进行运算,不与st1发生关系。
  1. ---------------------- <a target="blank">ASP.Net+Android+IOS开发</a>、<a target="blank">.Net培训</a>、期待与您交流! ----------------------

  2. 详细请查看:<a  target="blank">http://edu.csdn.net</a>
复制代码

作者: 潘才新    时间: 2013-9-23 23:38
很久没看落后你们了




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