静态类、静态方法、静态成员和实例成员的比较

任何项目中都会使用到静态类、静态方法、静态成员和实例成员了。那么这几个名词到底有哪些区别呢?

1、静态成员和实例成员

静态成员:静态成员通常和类是相关联的。它可以作为类中公有的变量,不依赖特定对象的存在。通常我们在访问它们的时候很简单,直接通过类名加点操作符再加变量名来进行操作。

实例成员:实例成员通过和对象是相关联的。一般情况下,我们都是对类的实例化来进行访问操作。如果实例不存在,那么也就无法访问实例成员对象。

所以实例成员的存在必须要有对象实例的存在,如果对象实例都不存在了,那么就将无法访问;而静态成员只是依赖于类的存在与否,也就无需声明和实例化对象了。

如下方这段示例:

    class Program
    {
        static void Main(string[] args)
        {
            MyStaticText.MyStaticMethod(); //静态方法调用

            MyStaticText myStaticText = new MyStaticText();

            myStaticText.MyExampleMethod(); //实例方法调用

            Console.ReadKey();
        }
    }

    class MyStaticText
    {
        private int exampleInt = 5;
        private static int staticInt = 6;
        public static void MyStaticMethod()
        {
            Console.WriteLine("开始调用静态方法:");

            MyStaticText myStaticText = new MyStaticText();

            myStaticText.MyExampleMethod();

            Console.WriteLine(staticInt);

            Console.WriteLine("结束调用静态方法:");
        }

        public void MyExampleMethod()
        {
            Console.WriteLine(exampleInt);
        }
    }

    static class MyStaticClassText
    {
        public static int GetStuNo()
        {
            return 1;
        }

        public static string GetStuName()
        {
            return "Jim";
        }
    }

最后的输出结果为:

2、静态类

我们知道,对于类有很多修饰符,如public,同时,类也可以声明为static,表示它仅可以包含静态成员。不能实例化来创造类的实例。比方说,在有些特定业务中,不需要操作实例数据也不与代码中特定对象关联。那么此时,就需要使用静态类来包含特定的方法。

静态类的主要功能如下:

  • 类中仅包含静态成员和静态方法。并且必须被static修饰。
  • 它们不能被实例化。
  • 它们是密封的。那么此时编译器编译时会自动生成sealed标记。

项目中使用静态类的优点在于,对于静态类的创建,编译器能够执行检查以确保不会偶然的添加实例成员。同时,静态类时密封的,因此也不允许被继承。

如下方代码示例:

    static class MyStaticClassText
    {
        public static int GetStuNo()
        {
            return 1;
        }

        public static string GetStuName()
        {
            return "Jim";
        }
    }

3、类的静态成员和非静态成员

对于一个类中的静态成员和非静态成员到底有哪些区别呢?

  1. 语法区别:静态成员需要static关键字修饰,而非静态成员可以不需要。
  2. 存储区别:对于静态成员而言,它是存储在程序中全局变量存储区中,并且在整个程序运行期间只在内存中有一个位置,既不会拷贝也不会复制。
  3. 归属区别:静态成员属于类的成员变量,无论对一个类实例化多少次,这个类的静态成员都只有一个副本,程序中各个地方对它的调用都会改变它的值;而非静态成员属于他的对象,各自对象对自身实例的改变不会各自影响。
  4. 初始化顺序的区别:初始化时首先初始化类的静态成员,然后才是非静态成员。

根据上述内容,下面示例代码的输出是多少呢?

    class Program
    {
        private static int i = GetNum();
        private static int num = 10;

        int j = GetNum();

        private static int GetNum()
        {
            return num;
        }
        static void Main(string[] args)
        {
            Console.WriteLine("i={0}", i);

            Program program = new Program();

            Console.WriteLine("j={0}", program.j);

            Console.WriteLine("i={0}", i);

            Console.ReadKey();
        }
    }

输出结果为:

以上就是对静态方法、静态成员、静态类和实例成员的比较。有不对的地方请大家指正或者一起交流。

原文地址:https://www.cnblogs.com/aixiaojun/p/8373481.html

时间: 2024-08-28 15:32:59

静态类、静态方法、静态成员和实例成员的比较的相关文章

c# 静态成员和实例成员的区别

静态成员也称为共享成员,例如静态属性 静态字段 静态方法:静态成员可以在类的实例之间共享. 静态类中只能有静态成员,不能有实例成员,因为静态类不能进行实例化: 在非静态类中 即可以有静态成员 也可以有非静态成员: 只要是静态成员 属性 字段 方法,都需要用类名去调用: 静态成员和实例成员的区别: 静态成员需要通过static修饰,非静态成员不需要通过static修饰: 静态成员属于类,可以直接通过"类名.静态成员"的方式访问: 非静态成员,必须实例化对象后,通过对象.实例成员来访问;

关于javascript中静态成员和实例成员的详细解释

关于javascript中静态成员和实例成员的详细解释  在我们了解什么是静态成员和实例成员之前,我们首先来了解一下什么是实例? 实例就是由构造函数创建出来的对象. 例如案例中 p 就是实例: function Person() {}//  此函数为构造函数 var p=new Person();  // p为构造函数创建出来的对象 我们在讨论静态成员和实例成员时候,把函数当成构造函数, 把创建出来的对象称之为实例.在此明白了什么是实例,下面我们就可以说什么是静态  成员和实例成员了. 首先什么

2017-9-20C#笔记(类,访问修饰符以及访问性,静态成员和实例成员,字段,Main方法,常量,对象的创建,类的属性)

软件开发的两种主要的方式为面向对象和面向过程,面向过程的焦点主要放在指令的组合和优化上,面向对象的焦点从指令转移到组织程序的数据和功能上. 类 程序的数据和功能被组织为逻辑上相关的数据项和函数的封装集合,称之为类.类作为一个有机的不可分割的整体,对外隐藏具体实现细节,从而实现可重用和易维护等特性,同时还提供了继承功能,支持子类获得父类特征. 类是一个能存储数据并执行代码的数据结构,是逻辑相关的数据和函数的封装,通常代表真实世界中的或概念上的事物. 类包括以下内容: (1) 数据成员:数据成员用来

14、类的静态成员和实例成员

默认为实例成员,static为静态成员 实例成员只能在实例化的时候用 静态成员只能被类访问 如图所示,类只能访问到静态成员,不能访问到实例成员 如图所示,实例化后能够访问到实例成员,不能访问到静态成员 原文地址:https://www.cnblogs.com/hihi-jing/p/9532960.html

228 静态成员和实例成员

1.2.1 实例成员 实例成员就是构造函数内部通过this添加的成员 如下列代码中uname age sing 就是实例成员,实例成员只能通过实例化的对象来访问 function Star(uname, age) { this.uname = uname; this.age = age; this.sing = function() { console.log('我会唱歌'); } } var ldh = new Star('刘德华', 18); console.log(ldh.uname);/

C++中类的静态成员与实例成员的区别

在C++类中,由static定义的(静态)数据成员 和 (静态)函数成员属于类:相反没有被static定义的成员和函数称为实例数据成员和实例函数成员,他们属于某一个实例(对象). 在内存中,类的静态数据成员占有一块特定的内存空间,被该类的所有实例(对象)共享.而同一个类的不同对象的实例数据成员相互独立,占有各自的存储空间. 定义类后,必须在类外的文件作用域中定义静态数据成员,即为它们分配存储空间. 在程序中可以直接使用类名和域解析操作符::直接访问类的共有静态数据成员和共有函数成员,不能直接访问

.Net中的静态类和非静态类、静态成员和非静态成员

正如标题,这样的资料网上很多,也说的很到位,但是都感觉解释的很多,理论性过强,在这里我简单的总结和概括下他们之间的区别,可以一目了然: 一.静态类和非静态类 Definition: 静态类可以视为类库中都是单一的过程,不存在“状态”的概念: 非静态类是存储有状态的一类操作过程 Summary: 非静态类可以包含静态方法: 静态类只能包含静态方法(不允许有非静态方法的存在) 二.静态方法和非静态方法(实例方法) Priority in Memory When Class Loaded: 类在加载时

python的静态成员变量、实例成员变量、静态方法、类方法、实例方法

静态成员变量(类变量)和普通成员变量(实例变量) 静态成员变量只能通过类名.变量名获得,实例成员变量,通过该实例引用.变量名获得. 在实例对静态成员变量赋值时,实例 python是动态类型的语言,没有特别的标志区分静态成员变量和普通成员变量 如果你使用类名.成员变量    那这个成员变量现在就是静态成员变量(类变量) 如果你使用实例.成员变量    那这个成员变量现在就是普通成员变量(实例变量) 静态方法.类方法.实例方法      实例方法,类中的普通方法,由实例调用 类方法,被@classm

在静态方法中访问类的实例成员

1.示例程序 1 public class Example 2 { 3 int x = 3;//类的实例变量,初始化值为3 4 static int y = 4;//类的静态变量,初始化值为4 5 public static void method()//静态方法 6 { 7 System.out.println("实例变量x = " + new Example().x);//在静态方法中访问类的实例变量需首先进行类的实例化 8 System.out.println("静态变