Static

1、静态方法与非静态方法

a、静态方法的调用
类.静态方法名([参数列表])

非静态方法的调用
类 对象 = new 类的构造函数([参数列表])
对象.非静态方法名([参数列表])

静态方法是属于类的,而非静态方法是属于对象的;

b、内存的初始化
静态成员是在第一次使用时进行初始化。非静态的成员是在创建对象的时候。
静态构造函数只能被执行一次;非静态的构造函数可以根据需要进行多次使用。

c、内存中存储
静态的只有一块全局内存空间,非静态的可以有多块内存空间(副本)

d、释放
静态的一旦创建则在全局区一直存放,直到应用程序结束。非静态的则是由new关键字在堆中创建的。可以有多个副本。由GC进行释放。

2、都有哪些静态的东西

方法、字段、属性、事件、构造函数、类

不能使用静态关键字的
常量、索引器、析构函数

3、静态构造函数
非静态类中可以包含静态成员。但是,静态类中不能包含任何非静态成员
静态构造函数不能带有任何参数,而非静态构造函数可以有多种参数列表

4、使用场合
a、需要保存全局都有效的数据, 如:当前已登录用户信息、系统配置信息、系统设置
b、因为效率相对更高,所以需要快速访问的
c、使用频率非常高的

注意:不要过多的滥用Static

C#Static

有时候写程序时常常遇到这样的情况:
 
1、定义了变量和方法不知道什么时候该加上static修饰符。
2、static变量和方法与非static变量和方法有什么区别?
3、在一个类的静态方法里为什么不能访问该类的非静态成员变量和方法?
4、在一个类的非静态方法中为什么可以访问该类的静态变量和方法?
5、在静态方法中为什么不能用this?
6、静态构造函数有什么作用?
 
基于以上问题,我发表自己的看法如下:
 
1、static变量及方法不用实例化对象就可以用类名.静态变量和类名.静态方法这种方式进行访问,这使得访问更加方便,不用手工实例化对象。对于某些只读变量和方法来说很适合共享。
2、static与非static最大的区别就是static类型的变量及方法在调用的时候就在内存中分配了地址,且这个地址只有一份,故static可以直接访问。而非static必需手工去实例化该类,以对象的方式去访问变量和方法。
3、在一个静态方法里去访问该类的非静态变量或方法,由于static是属于类本身的,是在类被调用的时候,static类型就已经生成,而非static此时并没有生成,它不属于这个类本身,它是属于这个类的对象。故在没有实例化成对象的时候,在静态方法中访问非静态是根本找不到它们的,它不属于这个类。
4、在非静态方法中去访问静态,由于类被调用时,静态变量和方法就已经生成,也就是说它们属于这个类。既然已经存在,故不管是在静态方法中,还是非静态方法中都可以访问到它们。
5、this表明对象本身,而在静态方法中并没有对象概念存在,它只有类本身这个概念,它和对象是属于两种互拆的状态,即我中无你,你中无我的情况。也就是说你用对象名.静态变量或对象名.静态方法是不可访问的。
6、每个类都必须有构造函数,否则此类无法实例化成对象。而我们有时定义的类可以不写它的构造函数,这是因为编译器会帮我们加上一个静态的空构造函数。这样才能实例化。也可以用静态构造函数去初始化静态变量。
 
以上内容转自西祠胡同-貌似Csharp。

static与C#中的static的更多相关文章

  1. java中static特殊性和final(static成员直接被访问,this不能用在static方法中,static不可访问非static)

    java的static关键字 java中,static修饰的成员变量和成员方法叫静态变量和静态方法,不依赖类特定的实例,被类的所有实例共享. 静态变量或类变量 和 实例变量,区别是: 静态变量在内存中 ...

  2. Java技术——Java中的static关键字解析

    )非静态内部类能够访问外部类的静态和非静态成员,显然一个非静态内部类不能脱离外部类实体被创建,而静态类不能访问外部类的非静态成员,它只能访问外部类的静态成员.这一点和上面static方法的性质类似. ...

  3. 092 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 02 static关键字 02 static关键字(中)

    092 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 03 # 088 01 Android 零基础入门 02 Java面向对象 02 Java封装 ...

  4. Android 中关于static的使用问题

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5251564.html 项目中,在不停地接收串口数据很长一段时间(几小时)后,会偶然性的报错.初步排除了oom ...

  5. (转)Java中的static关键字解析

    转载: http://www.cnblogs.com/dolphin0520/p/3799052.html 一.static关键字的用途 在<Java编程思想>P86页有这样一段话: &q ...

  6. 关于Java中的static关键字

    Java中的 static 关键字,确实是一个关键的字(key word),今天就来总结一下它的用法,说说为什么关键. Java中的 static 关键字主要是用来做内存管理的.理解了这句话才能够比较 ...

  7. PHP中new static()与new self()的比较

    今天在coding的时候,发现了 new static(),觉得实例化的地方不是应该是 new self()吗?查询了一下才知道两者的区别: 1)在有子类集成的时候,两者的表现不一样 2)php 5. ...

  8. Java中的static关键字解析

    Java中的static关键字解析 static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键 ...

  9. C++中的static关键字的总结

    C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static.前者应用于普通变量和函数,不涉及类:后者主要说明static在类中的作用. 1.面向过程设计中的st ...

随机推荐

  1. 未能加载文件或程序集“CefSharp, Version=1.25.XXXX”或它的某一个依赖项。试图加载格式不正确的程序。

    在使用CefSharp的过程中遇到一个坑爹的错误. 从GitHub的项目主页:https://github.com/cefsharp/CefSharp/wiki/Frequently-asked-qu ...

  2. C# WPF MVVM 实战 – 5- 用绑定,通过 VM 设置 View 的控件焦点

    本文介绍在 MVVM 中,如何用 ViewModel 控制焦点. 这焦点设置个东西嘛,有些争论.就是到底要不要用 ViewModel 来控制视图的键盘输入焦点.这里不讨论,假设你就是要通过 VM,设置 ...

  3. style不同取值对应的日期、时间格式

    from : http://www.cnblogs.com/Gavinzhao/archive/2009/11/10/1599690.html sql server2000中使用convert来取得d ...

  4. [转]-Android Studio 快捷键整理分享-SadieYu

    文章编辑整理:Android Studio 中文组 - SadieYu Alt+回车 导入包,自动修正 Ctrl+N   查找类 Ctrl+Shift+N 查找文件 Ctrl+Alt+L  格式化代码 ...

  5. iOS - OC SingleClass 单例类

    前言 单例对象能够被整个程序所操作.对于一个单例类,无论初始化单例对象多少次,也只能有一个单例对象存在,并且该对象是全局的,能够被整个系统访问到. 特点: 在内存中只有一个实例 提供一个全局的访问点 ...

  6. ubuntu_杂

    1. 虚拟机安装的 ubuntu 12.04,在关闭了 一段时间不操作就屏保 和 锁屏 之后, 在一段时间之后 虚拟机的屏幕还是变黑了,貌似是 os将 显示器关闭了. 这个相关的设置是在哪里? 相关设 ...

  7. iOS8 获取通知设置状态

    UIUserNotificationSettings *settings = [[UIApplication sharedApplication] currentUserNotificationSet ...

  8. Linux 下操作GPIO(两种方法,驱动和mmap)(转载)

    目前我所知道的在Linux下操作GPIO有两种方法: 1.编写驱动,这当然要熟悉Linux下驱动的编写方法和技巧,在驱动里可以使用ioremap函数获得GPIO物理基地址指针,然后使用这个指针根据io ...

  9. Html.Listbox的用法(实例)

    homecontroller控制器中的index动作代码如下:         public actionresult index()        { list<selectlistitem& ...

  10. Centos升级Python及pip

    因为CentOS系统中旧版本的Python已被深度依赖,所以不能卸载原有的Python,只能全新安装. 1.从官网下载: wget https://www.python.org/ftp/python/ ...