如果在程序中有一个class a,其中有static 成员变量
这个static 变量在什么时候被创建,程序运行就去的时候就创建初始化吗?无论是否调用这个
还是在这个类被调用的时候起???
这些很基础的问题,好像没什么地方讲,可是也很关键
比如对winapi的调用,使用系统dll中的功能,其中的方法被定义为static
这里的static怎么解释呢??起什么用
static 修饰符的存在时间
答案:3 悬赏:70
解决时间 2021-12-23 05:55
- 提问者网友:wodetian
- 2021-12-22 20:20
最佳答案
- 二级知识专家网友:偏爱自由
- 2021-12-22 21:02
在C#中,static变量表示该变量属于类,而不是类的实例。可以说是该类的所有实例共享一个static变量。
asp.net的页面就是一个类,我们访问一个页面。就会在服务器上实例化一个该类的实例,来响应我们的请求。
“所有实例共享一个static变量” 这就意味着,所有的客户端访问到的asp.net页面中static变量都是同一个变量。
由于我们每次访问asp.net页面都是一个全新的对象,而不是我们上一次访问的对象。所以上次页面访问时我们对页面中变量的改动都没有保留。遇到这个问题的时候,很多初学者的直觉就是将这个变量申明为static,自己在测试的时候发现还真的保留住了页面的状态。窃喜之余没有发现这又有引入了另外一个错误。因为你要的只是页面能保留住状态,而这个状态是针对一个客户端的(session的效果)。而得到的结果是只要一个客户端改变了该值所有的其他客户端都受到了影响(如同Applicatin的效果)。这种情况下,需要的极有可能就是个ViewState或者是Session。
Application与static变量
Application是通过一个集合保存所有的对象。
强类型:
Application中保存的是object,对对象的保存和使用需要作cast动作。对于值类型更需要Box&UnBox。对性能的影响较大。
而static变量是强类型的对象。
线程同步:
Application将所有的对象放到一个集合,这样对访问集合中的任何对象都会锁定这个集合。
假如有Application["A"]、Application["B"]、Application["C"],有线程访问Application["A"]其他线程不能访问Application["B"] and Application["C"]。
而static变量,可以根据他们的作用分别放在不同的class当中。这样可以并行访问不同的static变量,而不存在线程安全问题。
asp.net的页面就是一个类,我们访问一个页面。就会在服务器上实例化一个该类的实例,来响应我们的请求。
“所有实例共享一个static变量” 这就意味着,所有的客户端访问到的asp.net页面中static变量都是同一个变量。
由于我们每次访问asp.net页面都是一个全新的对象,而不是我们上一次访问的对象。所以上次页面访问时我们对页面中变量的改动都没有保留。遇到这个问题的时候,很多初学者的直觉就是将这个变量申明为static,自己在测试的时候发现还真的保留住了页面的状态。窃喜之余没有发现这又有引入了另外一个错误。因为你要的只是页面能保留住状态,而这个状态是针对一个客户端的(session的效果)。而得到的结果是只要一个客户端改变了该值所有的其他客户端都受到了影响(如同Applicatin的效果)。这种情况下,需要的极有可能就是个ViewState或者是Session。
Application与static变量
Application是通过一个集合保存所有的对象。
强类型:
Application中保存的是object,对对象的保存和使用需要作cast动作。对于值类型更需要Box&UnBox。对性能的影响较大。
而static变量是强类型的对象。
线程同步:
Application将所有的对象放到一个集合,这样对访问集合中的任何对象都会锁定这个集合。
假如有Application["A"]、Application["B"]、Application["C"],有线程访问Application["A"]其他线程不能访问Application["B"] and Application["C"]。
而static变量,可以根据他们的作用分别放在不同的class当中。这样可以并行访问不同的static变量,而不存在线程安全问题。
全部回答
- 1楼网友:放肆的依賴
- 2021-12-22 22:00
class a中的static 成员变量 是在第一次使用这个变量的时候被创建的;
static变量和static方法的意义是不一样的,
static方法如果没有使用static变量,它是线程安全的,它的方便之处就在使用此方法时不需要创建对象就可以访问之.
- 2楼网友:星星坠落
- 2021-12-22 21:13
static修饰符:
static关键字的中文意思是静态的,该修饰符可以修饰成员变量,成员常量和成员方法。使用该关键字修饰的内容,在面向对象中static修饰的内容是隶属于类,而不是直接隶属于对象的,所以static修饰的成员变量一般称作类变量,而static修饰的方法一般称作类方法。
示例代码如下:
//文件名box.java
public class box{
int length;
int width;
int height;
public box(int l,int w,int h){
length = l;
width = w;
height = h;
}
}
//文件名testbox.java
public class testbox{
public static void main(string[] args){
box a = new box(10,20,30);
box b = new box(40,20,10);
}
}
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯