zoukankan      html  css  js  c++  java
  • c# 静态成员和实例成员的区别

    静态成员也称为共享成员,例如静态属性 静态字段 静态方法;静态成员可以在类的实例之间共享。

    静态类中只能有静态成员,不能有实例成员,因为静态类不能进行实例化;

    在非静态类中 即可以有静态成员 也可以有非静态成员;

    只要是静态成员 属性 字段 方法,都需要用类名去调用;

    静态成员和实例成员的区别:

    静态成员需要通过static修饰,非静态成员不需要通过static修饰;

    静态成员属于类,可以直接通过“类名.静态成员”的方式访问;

    非静态成员,必须实例化对象后,通过对象.实例成员来访问;  

    当类第一次加载的时候(第一次被加载到内存的时候),该类下的所有的静态成员都会被加载,实例成员有多少个对象,就会创建多少个对象;静态成员会被加载到静态存储区,直到程序退出时才会被释放;

    由上面显然可知,定义静态的成员是可以影响程序的执行效率的。那么什么时候定义静态的成员变量呢?

    ①变量需要被共享的时候②方法需要被反复的调用的时候

    静态成员和实例成员的区别:
    静态成员是需要通过static关键字来修饰的,而实例成员不用static关键字修饰。他们区别如下代码:






    01 class Program
    02     {
    03         static void Main(string[] args)
    04         {
    05             //静态成员属于类,可以直接通过“类名.静态成员”的方式访问
    06             Person.Run();
    07             //实例成员属于对象,需要通过“对象名.实例成员”来访问
    08             Person p = new Person();
    09             p.Sing();
    10         }
    11     }
    12     class Person
    13     {
    14         //静态成员变量
    15         private static int nAge;
    16         //实例成员变量
    17         private string strName;
    18         public static void Run()
    19         {
    20             Console.WriteLine("我会奔跑!");
    21         }
    22         public void Sing()
    23         {
    24             Console.WriteLine("我会唱歌");
    25         }
    26     }

    当类第一次被加载的时候(就是该类第一次被加载到内存当中),该类下面的所有静态的成员都会被加载。实例成员有多少对象,就会创建多少对象。
    而静态成员只被加载到静态存储区,只被创建一次,且直到程序退出时才会被释放。
    看下面的代码:
    01 class Program
    02     {
    03         static void Main(string[] args)
    04         {
    05             Person p = new Person();
    06             Person p1 = new Person();
    07             Person p2 = new Person();
    08         }
    09     }
    10                                         
    11     class Person
    12     {
    13         //静态成员变量
    14         private static int nAge;
    15         //实例成员变量
    16         private string strName;
    17         public static void Run()
    18         {
    19             Console.WriteLine("我会奔跑!");
    20         }
    21         public void Sing()
    22         {
    23             Console.WriteLine("我会唱歌");
    24         }
    25     }
    那么在内存中发生了什么呢?如下图:


    由上面显然可知,定义静态的成员是可以影响程序的执行效率的。那么什么时候定义静态的成员变量呢?
    ①变量需要被共享的时候②方法需要被反复的调用的时候

     

     
  • 相关阅读:
    集合(双列)
    集合(单列)
    Struts2.0第三章(文件上传、ajax开发、json、Fastjson、Jackson、注解开发)
    Struts2.0第二章(封装数据获取请求参数、servlet api的获取、ServletActionContext、注入、ognl、valueStack、ActionContext、interceptor拦截器)
    Struts2.0第一章(struts2.0概述,使用步骤,执行流程,各配置文件介绍,Action详解)
    servlet3.0实现文件上传功能
    annotation注解
    ClassLoader类加载器
    Proxy 动态代理(在过滤器中对request使用动态代理解决接受参数乱码问题)
    Filter过滤器(自动登陆、通用的字符集编码的过滤【处理不同请求的乱码问题】、。。。)
  • 原文地址:https://www.cnblogs.com/yachao1120/p/6551166.html
Copyright © 2011-2022 走看看