在敲机房收费系统时,对Static静态变量一直有点疑问!shared与static应该在什么时候应用,到底有什么区别?
百度百科中的解释:
静态全局变量有以下特点:
1,该变量在全局数据区分配内存;---保持内容的持久
2,未经初始化的静态全局变量会被程序自动初始化为0(在函数体内声明的自动变量的值是随机的,除非它被显式初始化,而在函数体外被声明的自动变量也会被初始化为0);---默认初始化为0
3,静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的;---隐藏
static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块.在vb.net中不能用static来声明函数。只能用来声明过程中的静态变量,并且不能用来声明成员变量。shared既可以用来声明变量也可以用来声明函数,但是只能用来声明成员变量,这一点刚好跟static相反。
下面来简明介绍静态变量的作用和缺点:
Static的作用
(1)第一个作用:隐藏。
当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。即在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。而且只可被这一模块内的其他函数调用,也就是,这个函数被限制在声明它的模块的本地范围内使用.
应用:在嵌入式系统中,要时刻懂得移植的重要性,程序可能是很多程序员共同协作同时完成,在定义变量及函数的过程,可能会重名,这给系统的集成带来麻烦,因此保证不冲突的办法是显示的表示此变量或者函数是本地的,static即可。
(2)第二个作用:保持变量内容的持久。
存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量存储在静态存储区:全局变量和static变量,只不过和全局变量比起来,static可以控制变量的可见范围,说到底static还是用来隐藏的。即在函数体内,一个被声明为静态的变量在这一函数被调用过程中维持其值不变(该变量存放在静态变量区)。
(3)第三个作用:默认初始化为0。
其实全局变量也具备这一属性,因为全局变量也存储在静态数据区。在静态数据区,内存中所有的字节默认值都是0x00,某些时候这一特点可以减少程序员的工作量。
在类中的static成员变量意味着它为该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,其修改值为该类的其它所有实例所见;而且此时类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。
被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。
缺点:
静态方法/变量属于类级别的,意味着不需要创建对象就可以使用,因此有下面缺点:
1.
静态方法不能调用非静态的方法和变量;(非静态方法可以任意的调用静态方法/变量)
2.不能使用this关键字(很明显,它属于类级别,没有创建对象怎么可以用this)
VB.net 中为Shared
C# C++.net中为Static
虽然说表现形式不同,但是都是为了解决同一类问题。
至于为什么VB.net的Shared(共享)方法在C#中叫Static(静态)?
请参考博客http://www.newsmth.net/pc/pccon.php?id=2206&nid=227918
分享到:
相关推荐
介绍c语言中static的各种用法,可以加深对于c语言中static的本质理解认识。
本篇旨在帮助准备学习Java以及刚接触Java的朋友认识、掌握和使用static、this、super、final这几个关键字的使用。Java博大精深,我也是一位正在学习和使用Java的爱好者,文中难免有不妥之处,欢迎指正。
c语言中static用法总结.pdf 让你全面透彻的认识static的用法,帮你细心总结,让你收获知识。
本篇旨在帮助准备学习Java以及刚接触Java的朋友认识、掌握和使用static、this、super、final这几个关键字的使用。文中难免有不妥之处,欢迎指正。
C_语言静态变量和静态函数,可以让您对C语言静态变量和静态函数有更清晰的认识
该游戏旨在让城镇大龄青年们在游戏中互相认识、交流和沟通。 ## 游戏规则 游戏的规则非常简单:每个玩家可以在游戏中创建一个个人资料,并将其公开展示给其他玩家。其他玩家可以通过浏览个人资料来了解其他玩家,...
PING程序是我们使用的比较多的用于测试网络连通性的程序。...课程设计中选取PING程序的设计,其目的是希望同学们通过PING程序的设计,能初步掌握TCP/IP网络协议的基本实现方法,对网络的实现机制有进一步的认识。
正如positioniseverything,本文将主要讲述关于position的理解,力求让您看完本文后对position有着最全面的认识。 position的四个属性值 relative absolute fixed static 下面分别讲述这四个属性 复制代码代码如下...
正如positioniseverything,本文将主要讲述关于position的理解,力求让您看完本文后对position有着最全面的认识。 position的四个属性值: relative absolute fixed static 下面分别讲述这四个属性....
了解java中类各个成员的初始化顺序是非常重要的,这样你可以对类有全局的认识。不说太多,直接看下面的例子 class Father { static{ System. out.println("父类静态代码块初始化" ); } { System. out.println...
有时如果不能认识清楚这个属性,将会给我们带来很多意想不到的困难。 position属性共有四种不同的定位方法,分别是static、fixed、relative、absolute。最后将会介绍和position属性密切相关的z-index属性。 第一部分...
程序员是什么样的人?读了这本书也许你会改变对程序员的看法,同时读完本书,你兴许会发现以前...读完本书有助与认识C++的指针、理解const、static的妙用,还有隐藏、覆盖、重写都是什么,还有函数的设计,还有.......
体会 通过本次试验的实践,使我更加了解和初步掌握了OpenGL的用法,对使用OpenGl 绘制球体等图形有了充分认识,并对平移矩阵堆栈和旋转矩阵堆栈的使用有了初步的 掌握。虽然以前没有接触过OpenGl,但是通过学习...
认识Publii,这 是一个带有GUI的新Static CMS,它可以构建一个非常安全,快速和时尚的HTML网站。 从初学者到开发人员,Publii是一个针对每个技能水平的静态网站构建工具。
有些项目会在将设计文档和架构图放到md文件上,这样会让你宏观上对一些概念有些认识。例如immer查看项目整体的文件结构。比如下面提到一些重点需要查看的文件package.json,可以从这个文件看到整个项目的入口文件、...
其中,有如何把json字符串转化成C#类对象,其实这段代码很多人都清楚,大家也都认识,我不多说,先贴代码。 1、添加引用 System.Web.Extensions 2、测试一下代码 1 static class Program 2 { 3 /// ...
认识 Exception 18 什么是 Throwable 18 常⻅的 Exception 19 与 Exception 有关的 Java 关键字 19 什么是 Error 20 内部类 20 集合 20 ArrayList 21 Vector 21 LinkedList 21 Stack 21 HashSet 22 TreeSet 22 ...
清楚认识,这里也是一个数据查询的优化点。 在System.linq命名空间,有两个静态类:Queryable和Enumerable. 在System.linq.Queryable中,参数接收的是一个表达式类型,返回IQueryable接口 public static IQueryable...
在中对网络设备结构,网络设备初始化等函数有了初步认识,并列出了设备的发送和接收函数。 设备接口层会调用函数设备驱动层ei_start_xmit()函数发送数据,这里没有详细分析。 static int ei_start_xmit(struct ...
看完官方文档,阅读了一些 Newtonsoft 源码,对它有了新的认识,先总结 六个超经典又实用的特性,同大家一起分享,废话不多说,快来一起看看吧~~~ 二:特性分析 1. 代码格式化 如果你直接使用 JsonConvert....