zoukankan      html  css  js  c++  java
  • 【面向对象】--静态类与非静态类的区别

    静态类
               静态类和非静态类重要的区别是在于静态类不能被实例化,也就是说不能使用  new 关键字创建静态类类型的变量。使用static关键字来声明静态类,这样的意义在于:首先,它防止程序员写代码来实例化该静态类;其次,它防止在类的内部声明任何实例字段或方法。

     静态类的使用
    关键字:  static

    调用方式:< 静态类名.静态方法 >

    注意:   1.在静态类中只能访问静态成员;  2.在静态类中只能有静态成员;

    静态类的主要特性:
    1:仅包含静态成员。
    2:无法实例化。
    3:是密封的。
    4:不能包含实例构造函数。

    静态成员
    1:非静态类可以包含静态的方法、字段、属性或事件;
    2:无论对一个类创建多少个实例,它的静态成员都只有一个副本(体现在在A实例改变了某个静态变量的值将影响所有的实例);
    3:静态方法和属性不能访问其包含类型中的非静态字段和事件,并且不能访问任何对象的实例变量;
    4:静态方法只能被重载,而不能被重写,因为静态方法不属于类的实例成员;
    5:虽然字段不能声明为 static const,但 const 字段的行为在本质上是静态的。这样的字段属于类,不属于类的实例。因此,可以同对待静态字段一样使用 ClassName.MemberName 表示法来访问 const 字段;
    6:C# 不支持静态局部变量(在方法内部定义静态变量)。

    非静态类
                 非静态类里即可有静态成员,也可以有非静态成员。

                非静态里的静态方法可直接调用即 :<    非静态 类名.静态方法 >

                非静态里的非静态方法需要实例化后才能被调用,格式如下:

               <  非静态类名   变量=new 非静态类名();>

    静态类和非静态类的区别:

    非静态类是储存有状态的一类操作过程,例如语言包的非静态类,声明了之后,可能获取语言的种类,语言元素和一些附加的东西。
    静态类可以视为类库里都是单一的过程,不存在“状态”的概念,就可以使用静态类。
    非静态类可以包含静态方法,但静态类不能包含非静态方法。  
    使用选择:
    当定义的类不需要进行实例化时,我们使用静态类;如果需要实例化对象,需要继承等特性时,应该使用非静态类,并且将统一使用的变量和方法设为静态的,那么所有实例对象都能访问。  
    效率
    静态方法的使用效率比非静态方法的效率高。
    按照上面的概念,只要内存够用,都可以使用静态的。使用静态方法会带来什么问题呢
    线程安全
    静态方法是共享代码段,静态变量是共享数据段。既然是“共享”就有并发(Concurrence)的问题。
    非静态方法是针对确定的一个对象的,所以不会存在线程安全的问题。

    静态方法和实例方法是一样的,在类型第一次被使用时加载。调用的速度基本上没有差别。
    ————————————————
    版权声明:本文为CSDN博主「杜_小妖」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/duyusean/article/details/78724729

  • 相关阅读:
    阿里云上的Centos 7.6的一次Nginx+Mysql+PHP7.3 部署
    Spring系列-SpringBoot 学习路径
    想做公众号,总要写点什么--第008期博文
    我关注的那些公众号-第007期博文
    Ruby on Rails,一对多关联(One-to-Many)
    ruby新建web项目步骤,使用mysql数据库
    ruby select 方法,可用于先查询结果后,再次用条件限制
    cron和crontab命令详解 crontab 每分钟、每小时、每天、每周、每月、每年定时执行 crontab每5分钟执行一次
    nginx做rails项目web服务器缓存配置方法
    ruby----%使用法
  • 原文地址:https://www.cnblogs.com/vsnb/p/14551660.html
Copyright © 2011-2022 走看看