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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 崔增阳 中级黑马   /  2014-4-14 10:37  /  1392 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

   静态和非静态在内存分配上有什么区别

3 个回复

倒序浏览
静态程序初始化就分配内存地址,对非静态的在调用的时候在分配内存
定义的静态方法在内存中有固定的位置,所以一个程序最好不要有太多的静态方法
回复 使用道具 举报
亲 别忘了修改为提问结束啊  要不然版主不会给加分的!
回复 使用道具 举报
静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态的成员..因为静态成员存在于内存,所以非静态成员可以直接访问类中静态的成员.

非成静态员:所有没有加Static的成员都是非静态成员,当类被实例化之后,可以通过实例化的类名进行访问..非静态成员的生存期决定于该类的生存期..而静态成员则不存在生存期的概念,因为静态成员始终驻留在内容中..
示例:
    using System;
    using System.Collections.Generic;
    using System.Text;
    namespace Example01
    {
        class Program
        {
            class Class1
            {
                public static String staticStr = "Class";
                public String notstaticStr = "Obj";
            }
            static void Main(string[] args)
            {
                //静态变量通过类进行访问,该类所有实例的同一静态变量都是同一个值
                Console.WriteLine("Class1's staticStr: {0}", Class1.staticStr);     
                Class1 tmpObj1 = new Class1();
                tmpObj1.notstaticStr = "tmpObj1";
                Class1 tmpObj2 = new Class1();
                tmpObj2.notstaticStr = "tmpObj2";
     
                //非静态变量通过对象进行访问,不同对象的同一非静态变量可以有不同的值
                Console.WriteLine("tmpObj1's notstaticStr: {0}", tmpObj1.notstaticStr);
                Console.WriteLine("tmpObj2's notstaticStr: {0}", tmpObj2.notstaticStr);
                Console.ReadLine();
            }
        }
    }
    结果:
    Class1's staticStr: Class
    tmpObj1's notstaticStr: tmpObj1
    tmpObj2's notstaticStr: tmpObj2


具体可以看:静态成员和非静态成员的区别
http://bbs.itheima.com/thread-48205-1-1.html
(出处: 黑马程序员IT技术论坛)


评分

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

查看全部评分

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