精华内容
下载资源
问答
  • 静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量。在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来实例化该静态类;其次,...

    C# 静态类与非静态类、静态成员的区别


    静态类

    静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量。在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来实例化该静态类;其次,它防止在类的内部声明任何实例字段或方法。
    静态类是自C# 2.0才引入的,C# 1.0不支持静态类声明。程序员必须声明一个私有构造器。私有构造器禁止开发者在类的范围之外实例化类的实例。使用私有构造器的效果与使用静态类的效果非常相似。
    静态类在加载包含该类的程序或命名空间时由 .NET Framework 公共语言运行库 (CLR) 自动加载。 静态类和类成员用于创建无需创建类的实例就能够访问的数据和函数。静态类成员可用于分离独立于任何对象标识的数据和行为:无论对象发生什么更改,这些数据和函数都不会随之变化。当类中没有依赖对象标识的数据或行为时,就可以使用静态类。

    两者的区别:

    私有构造器方式仍然可以从类的内部对类进行实例化,而静态类禁止从任何地方实例化类,其中包括从类自身内部。静态类和使用私有构造器的另一个区别在于,在 使用私有构造器的类中,是允许有实例成员的,而C# 2.0和更高版本的编译器不允许静态类有任何实例成员。使用静态类的优点在于,编译器能够执行检查以确保不致偶然地添加实例成员,编译器将保证不会创建此 类的实例。静态类的另一个特征在于,C#编译器会自动把它标记为sealed。这个关键字将类指定为不可扩展;换言之,不能从它派生出其他类。

    静态类的主要特性:

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

    静态成员

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

    静态构造函数

    1:静态类可以有静态构造函数,静态构造函数不可继承;
    2:静态构造函数可以用于静态类,也可用于非静态类;
    3:静态构造函数无访问修饰符、无参数,只有一个 static 标志;
    4:静态构造函数不可被直接调用,当创建类实例或引用任何静态成员之前,静态构造函数被自动执行,并且只执行一次。

    注意:

    1:静态类在内存中是一直有位置的;
    2:非静态类在实例化后是在内存中是独立的,它的变量不会重复,在使用后会及时销毁,所以不会出现未知的错误。在C#中静态成员是比较敏感的东西,在不是十分确认的情况下不要使用;
    3:建议更多地使用一般类(非静态类)。

    使用静态类的优点:

    写在栈中,安全高速稳定,而且在执行的时候,十分优先。
    编译器能够执行检查以确保不致偶然地添加实例成员。
    编译器将保证不会创建此类的实利。
    类是密封的,因此不可被继承。静态类不能包含构造函数,但仍可声明静态构造函数以分配初始值或设置某个静态状态。静态方法属于类所有,类实例化前即可使用。
      

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

    非静态类是储存有状态的一类操作过程,例如语言包的非静态类,声明了之后,可能获取语言的种类,语言元素和一些附加的东西。
    静态类可以视为类库里都是单一的过程,不存在“状态”的概念,就可以使用静态类。
    非静态类可以包含静态方法,但静态类不能包含非静态方法。  

    使用选择:

    当定义的类不需要进行实例化时,我们使用静态类;如果需要实例化对象,需要继承等特性时,应该使用非静态类,并且将统一使用的变量和方法设为静态的,那么所有实例对象都能访问。

    C# 静态成员和方法的学习小结

    数据成员:

    数据成员可以分静态变量、实例变量两种.
    静态成员:静态成员变量是和类相关联的,可以作为类中"共"有的变量(是一个共性的表现),他不依赖特定对象的存在,访问的时候通过类名加点操作符加变量名来访问.

    实例成员:实例成员变量是和对象相关联的,访问实例成员变量依赖于实例的存在.

    函数成员:

    方法可以主要分为静态方法,实例方法

    静态方法:静态方法是不属于特定对象的方法,静态方法可以访问静态成员变量,静态方法不可以直接访问实例变量,可以在实例函数调用的情况下,实例变 量做为参数传给静态方法。静态方法也不能直接调用实例方法,可以间接调用,首先要创建一个类的实例,然后通过这一特定对象来调用静态方法。

    实例方法:一个实例方法的执行与特定对象关联,他的执行需要一个对象存在。实例方法可以直接访问静态变量和实例变量,实例方法可以直接访问实例方 法、和静态方法,静态方法的访问方式为类名加点操作符加变量名。当多个实例对象存在时,内存中并不是存在美个特定的实例方法的拷贝,而是,相同类的所有对 象都共享每个实例方法的一个拷贝(实例方法只占用“一套”空间)。
     
    如果将类中的某个成员声明为static,则称该成员为静态成员。一般来说,静态成员是属于类所有的,而非静态成员则属于类的实例的。每创建一个类的实 例,都在内存中为非静态成员开辟一片区域。而类的静态成员为类所有,为这个类的所有实例共享。无论这个类创建了多少副本,一个静态成员在内存中只占有一块 区域。

    C#类中静态成员变量的生命周期问题,就是什么时候创建,什么时候销毁已声明元素的“生存期”是元素可供使用的时间周期。变量是唯一具有生存期的元素;为此,编译器将过程参数和函数返回值视为变量的特殊情况。变量的生存期表示它可以保留值的时间周期。在生存期内变量的值可以更改,但变量总是保留某些 值。

    生命周期(Lifecycle):


    静态方法(Static Method)与静态成员变量一样,属于类本身,在类装载的时候被装载到内存(Memory),不自动进行销毁,会一直存在于内存中,直到JVM关闭。
    非静态方法(Non-Static Method)又叫实例化方法,属于实例对象,实例化后才会分配内存,必须通过类的实例来引用。不会常驻内存,当实例对象被JVM 回收之后,也跟着消失。 

    效率


    静态方法的使用效率比非静态方法的效率高。
    按照上面的概念,只要内存够用,都可以使用静态的。使用静态方法会带来什么问题呢

    线程安全


    静态方法是共享代码段,静态变量是共享数据段。既然是“共享”就有并发(Concurrence)的问题。
    非静态方法是针对确定的一个对象的,所以不会存在线程安全的问题。

    静态方法和实例方法是一样的,在类型第一次被使用时加载。调用的速度基本上没有差别。

    适用场景


    不需要生成对象的  经常频繁使用的  工具类里的(如SqlHelper)
    适当地使用static方法本身并没有什么,当一个人从来不懂使用多态、接口设计时,很自然地会滥用static方法。
    个人理解在多个类中需要调用并且是与对象无关的方法可设为静态方法,方便调用。
    所有对象共有的方法
    再不关系到任何于特定对象相关的操作  比如学生的年龄就是学生的相关。  修改学生的年龄就不适合用静态方法。  一般来说,如果你的方法里没有用到this关键字,  那就适合用静态方法
    通常通用的类中一些常用的方法可以设计为静态类
    只要是没有用到类的状态信息,只从参数获取信息的都可以为静态的
    可以实现某些特殊的设计模式:如Singleton
    由于没有this指针,可以把某些系统API的回调函数以静态函数的形式封装到类的内部
    可以封装某些算法,比如数学函数,如ln,sin,tan等等,这些函数本就没必要属于任何一个对象,所以从类上调用感觉更好
    总之,从OOA/OOD的角度考虑,一切不需要实例化就可以有确定行为方式的函数都应该设计成静态的
    静态方法与非静态方法最明显的区别就是如果某个方法是公共静态的,那么可以直接通过类名.方法名的方法来调用,而公共实例方法则需要事先实例化对象,然后才能调用。
    静态类不用重复分配内存,类似共享,
    非静态类每次调用都要先实例化,但相对独立,

    关键是看你的实际情况了,如果是不会引起冲突的、不涉及实时性的公共方法,可以采用静态类

    如果发现有错误的地方请指正,及时更改以免误导大家

    展开全文
  • 静态类与非静态类

    千次阅读 2012-04-25 13:34:56
     静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量。在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来实例化该静态类;其次...

    静态类

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

        静态类是自C# 2.0才引入的,C# 1.0不支持静态类声明。程序员必须声明一个私有构造器。私有构造器禁止开发者在类的范围之外实例化类的实例。使用私有构造器的效果与使用静态类的效果非常相似。两者的区别在于,私有构造器方式仍然可以从类的内部对类进行实例化,而静态类禁止从任何地方实例化类,其中包括从类自身内部。静态类和使用私有构造器的另一个区别在于,在使用私有构造器的类中,是允许有实例成员的,而C# 2.0和更高版本的编译器不允许静态类有任何实例成员。使用静态类的优点在于,编译器能够执行检查以确保不致偶然地添加实例成员,编译器将保证不会创建此类的实例。静态类的另一个特征在于,C#编译器会自动把它标记为sealed。这个关键字将类指定为不可扩展;换言之,不能从它派生出其他类。


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


    静态成员

    1:非静态类可以包含静态的方法、字段、属性或事件;

    2:无论对一个类创建多少个实例,它的静态成员都只有一个副本;

    3:静态方法和属性不能访问其包含类型中的非静态字段和事件,并且不能访问任何对象的实例变量;
    4:静态方法只能被重载,而不能被重写,因为静态方法不属于类的实例成员;
    5:虽然字段不能声明为 static const,但 const 字段的行为在本质上是静态的。这样的字段属于类,

       不属于类的实例。因此,可以同对待静态字段一样使用 ClassName.MemberName 表示法来访问 const 字段;6:C# 不支持静态局部变量(在方法内部定义静态变量)。

     

    静态构造函数

    1:静态类可以有静态构造函数,静态构造函数不可继承;

    2:静态构造函数可以用于静态类,也可用于非静态类;

    3:静态构造函数无访问修饰符、无参数,只有一个 static 标志;

    4:静态构造函数不可被直接调用,当创建类实例或引用任何静态成员之前,静态构造函数被自动执行,并且

       只执行一次。

     

    注意:

    1:静态类在内存中是一直有位置的;

    2:非静态类在实例化后是在内存中是独立的,它的变量不会重复,在使用后会及时销毁,所以不会出现未知

       的错误。在C#中静态成员是比较敏感的东西,在不是十分确认的情况下不要使用

    3:建议更多地使用一般类(非静态类)。

     

    使用选择:

        当定义的类不需要进行实例化时,我们使用静态类;如果需要实例化对象,需要继承等特性时,应该使用非静态类,并且将统一使用的变量和方法设为静态的,那么所有实例对象都能访问。

    展开全文
  • C++静态类

    千次阅读 2015-12-19 10:47:31
    不能使用 new 关键字创建静态类的实例。 使用静态类来包含不与特定对象关联的方法。例如,创建一组不操作实例数据并且不与代码中的特定对象关联的方法是很常见的要求。您应该使用静态类来包含那些方法。 2. 它们仅...
    1. 静态类相当于一个sealed abstract类,主要的一个优点是写在栈中,安全高速稳定,而且在执行的时候,十分优先。 类可以声明为 static 的,以指示它仅包含静态成员。不能使用 new 关键字创建静态类的实例。 使用静态类来包含不与特定对象关联的方法。例如,创建一组不操作实例数据并且不与代码中的特定对象关联的方法是很常见的要求。您应该使用静态类来包含那些方法。
    2. 它们仅包含静态成员。
    

    它们不能被实例化。
    它们是密封的。
    它们不能包含实例构造函数)。
    因此创建静态类与创建仅包含静态成员和私有构造函数的类大致一样。私有构造函数阻止类被实例化。
    3. 使用静态类的优点在于,编译器能够执行检查以确保不致偶然地添加实例成员。编译器将保证不会创建此类的实例。
    静态类是密封的,因此不可被继承。静态类不能包含构造函数,但仍可声明静态构造函数以分配初始值或设置某个静态状态。
    4. 静态类不能有实例构造器。
    静态类不能有任何实例成员。 静态类不能使用abstract或sealed修饰符。 静态类默认继承自System.Object根类,不能显式指定任何其他基类。
    静态类不能指定任何接口实现。
    静态类的成员不能有protected或protected internal访问保护修饰符。

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

    静态类
               静态类和非静态类重要的区别是在于静态类不能被实例化,也就是说不能使用  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 
    原文:https://blog.csdn.net/duyusean/article/details/78724729 
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • 静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量。在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来实例化该静态类;其次,...
  • C#静态类

    千次阅读 2009-09-24 14:26:00
    也就是说,不能使用 new 关键字创建静态类类型的变量。因为没有实例变量,所以要使用类名本身访问静态类的成员。例:static class CompanyInfo{ public static string GetCompanyName() { return "CompanyName"; }...
  • 它在实际开发中用的很少,它是在方法中定义的类,既然是方法里头的东西,那么它就不能定义静态类,静态变量或静态方法了,如图,编译器直接报错 它的申明不能用public和private、procted修饰,可以用final和...
  • 静态类的特点

    千次阅读 2018-06-22 11:14:20
    (1) 不能使用 new 关键字创建静态类的实例;(2) 仅包含静态成员;(3) 不能被实例化;(4) 密封的,不能被继承;(5) 不能包含实例构造函数,但可以包含静态构造函数;关于静态构造函数的补充:(1) 静态构造函数不可...
  • C# 静态类(static class)

    万次阅读 多人点赞 2018-05-24 10:21:42
    静态类 静态类与非静态类的重要区别在于静态类不能实例化,也就是说,不能使用 new 关键字创建静态类类型的变量。在声明一个类时使用static关键字,具有两个方面的意义:首先,它防止程序员写代码来实例化该静态类...
  • c++静态类 及 静态成员函数

    千次阅读 2016-09-13 18:34:21
    转自: 静态类相当于一个sealed abstract类,主要的一个优点是写在栈中,安全高速稳定,而且在执行的时候,十分优先。 类可以声明为 static 的,以指示它...不能使用 new 关键字创建静态类的实例。 使用静态类来包含不与特定
  • 个人对静态类和非静态类的理解

    千次阅读 2018-06-17 14:14:20
    静态类和非静态类的主要区别: 主要区别在于静态类不能实例化,静态类编译器能够执行检查确保不是偶然的添加实例成员,静态类中不能创建非静态的方法,即静态方法中只能创建静态方法,但在非静态类中可以调用静态...
  • php 静态类与非静态类

    千次阅读 2015-10-20 14:58:03
    静态类:类中含有static定义的静态属性或方法的类 静态类访问方法: 1、,静态方法不需要实例化对象,可以通过类名直接调用,操作符为双冒号:: Car::getName();  2、外部访问公共属性或方法: $car->speed;$car->...
  • 静态类和非静态类的主要区别

    万次阅读 2014-08-10 18:47:44
    静态类和非静态类浅谈
  • 如题,在实际开发中,关于静态类、静态方法、内部类、匿名内部类、非静态类一般都会遇到,特别是你在研究开源框架源码的时候很是常见,它是内聚性的体现。本文针对这些“概念”的实战,做些总结。
  • Java中的静态类和非静态类

    千次阅读 2019-08-06 18:32:13
    一、静态类和非静态的定义 1、非静态 一、有名类 class Eat{//不可以直接在main方法中使用 必须创建对象 void sleep() { } } 二、匿名类 Example example =new Example() { }; 2、静态...
  • c++静态类实现

    万次阅读 2017-12-16 14:11:10
    c++静态类 静态类 静态类实现 静态类声明
  • 1、什么是静态类和非静态类 (1)、静态类 在类的建立上加上static关键词 比如我们在看C#视频中使用的File类,就是静态类。定义这个类时 public static class File (2)、非静态类静态类,就是在定义类的...
  • java中的静态类

    万次阅读 多人点赞 2019-06-02 06:08:45
    java中的静态类 在Java世界里,经常被提到静态这个概念,static作为静态成员变量和成员函数的修饰符,意味着它为该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,其修改值为该类的其它所有实例...
  • Android内存泄漏(非静态内部类创建静态实例造成的内存泄漏)
  • C#中静态类与非静态类的区别

    千次阅读 2015-12-29 15:16:55
    在非静态类中既可以有非静态成员(实例成员)也可以有静态成员; 在静态类中只能有静态成员存在; 2、调用实例成员时,必须使用 对象名.实例成员  调用静态成员时,必须使用 类名.静态成员 3、静态函数中只能...
  • 静态类加载过程、对象的创建过程

    千次阅读 2016-12-16 18:06:15
    加载的过程: 1、当在程序中要使用某个的时候,JVM 会先在当前的方法区中找有没有这个class文件信息,如果没有这时JVM会先去加载这个class文件 2、加载的时候,如果配置了classpath环境变量,那么JVM会到...
  • 静态类的作用

    千次阅读 2014-03-25 13:48:46
    静态类和类成员用于创建无需创建类的实例就能够访问的数据和函数。静态类成员可用于分离独立于任何对象标识的数据和行为:无论对象发生什么更改,这些数据和函数都不会随之变化。当类中没有依赖对象标识的数据或行为...
  • Java静态类

    千次阅读 2018-06-26 15:20:58
    在Java世界里,经常被提到静态这...最近一个项目里频繁用到static修饰的内部类,再读了一下《Effective Java》才明白为什么会用static来修饰一个内部类也就是本文的中心——静态类。 如果一个类要被声明为static的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,046,132
精华内容 418,452
关键字:

创建静态类