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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 于振发 中级黑马   /  2013-9-30 17:49  /  1283 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

       请各位大虾们阐述一下静态和非静态的区别?三克油~~

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

7 个回复

正序浏览
念念念念_、 发表于 2013-10-3 00:24
static静态成员:不需要new一个成员,即可使用。在static方法中,可以调用其他的static成员,但是不能调用 ...


               
回复 使用道具 举报

楼主你好,如果你的问题已解决请解释,请及时把分类设为已解决,黑马有你更精彩!
回复 使用道具 举报
通俗的说:定义静态类后,调用是不需要new,    非静态 也就是无static修饰的 调用时 要先new
静态成员只是配合静态类的调用,不需要new的静态类调用直接在类后面打点调用其静态成员。
而非静态类同理:在class  c=new class()后,在对象c后面打点调用其非静态成员。

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

回复 使用道具 举报
static静态成员:不需要new一个成员,即可使用。在static方法中,可以调用其他的static成员,但是不能调用非static成员。在非static成员中可以调用static成员

class Program
    {
        static void Main(string[] args)
        {
            Person.Age = 30;  //并没有new一个Person,可以直接调用
            Person p1 = new Person();
            ConsoleApplication6.New.Person p2 = new New.Person();
            Console.WriteLine(Person.Age);
            Test();
            Do d = new Do();
            d.Test1();
         
            Person pe = new Person();
            pe.Name = "张三";
            pe.SayHi();
            Console.ReadKey();
        }

        /// <summary>
        /// 1
        /// </summary>
        public class Person
        {
            public string Name;     //非静态成员
            public static int Age;  //静态成员
            public static void Page()   //在类中声明一个静态方法
            {
                Console.WriteLine("输出:{0}", Person.Age);
            }

            //public static void Say()
            //{
            //    Console.WriteLine("姓名:{0},年龄:{1}", Name, Age);
                //在static方法中,不能调用非static成员(Name是非静态成员)
            //}

            public void SayHi()
            {
                Console.WriteLine("嗨!我的姓名:{0},年龄:{1}",Name,Age);//
            }
            //在非静态成员SayHi()中,可以调用static成员Age
        }
        /// <summary>
        /// 2
        /// </summary>
        public static void Test()  //这是一个静态方法
        {
            Console.WriteLine("输出年龄:{0}", Person.Age);  //可以在静态方法中调用其他静态成员
        }
        /// <summary>
        /// 3
        /// </summary>
        public class Do
        {
            public void Test1()   //非静态方法
            {
                Console.WriteLine("年龄:{0}", Person.Age);
            }
        }
    }

静态类:一般用来实现一些函数库。它是不能被new的类,例如 static class Person {}
那么 Person p=new Person();  是不能的,会报错

评分

参与人数 1技术分 +2 收起 理由
追溯客 + 2 回答很好加两分

查看全部评分

回复 使用道具 举报
静态类中只能包含静态成员和静态方法,否则会抛出编译错误。
而非静态类中可以包含非静态成员和非静态方法,也可以包含静态成员和静态方法。
静态类不可以实例化,非静态类可以实例化。
不管是静态类还是非静态类,对于静态成员和静态方法的调用都必须通过类来实现;

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

回复 使用道具 举报


静态类

静态类只可以包含静态成员
无法实例化,也就是不能new,始终通过类名来访问。
静态类是密封的,不可被继承,也不从除Object外的任何类中继承。
不能包含实例构造函数,构造函数只能是静态的

静态成员

非静态类可以包含静态成员(方法、字段、属性或事件),在静态成员中不能直接调用非静态成员,反过来就可以。
静态方法可以重载,但不能重写。
在同一类中,静态方法只能通过方法名调用。不在同一类中,静态方法通过类名加方法名调用,如 Console.WriteLine()
C#不支持静态局部变量(在方法范围内声明的变量)

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

回复 使用道具 举报
静态存放在静态区域,非静态存在堆或栈中
静态可以通过类名.直接调用,不需要NEW对象

注意静态构造函数只能初始化一次

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

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