篮球比赛每节几分钟有几节;静态变量会不会被创建?

unity3d c#知识(7)
在C#程序中,没有全局变量的概念,这意味着所有的成员变量只有该类的实例才能操作这些数据,这起到了“信息隐藏”的作用。但有些时候,这样做却不是个明智的选择。
假设我们要定义一个图书类,要求该类能保存图书的数量,即每增加一本图书(定义一个实例),图书的数量应该加1。如果没有静态变量,我们需要将图书的数量保存在每本图书(实例)里,然而,这样的变量要在不同图书(实例)里重复存储,图书(实例)数量少的话,我们还能接受,如果图书(实例)数量较多的话,比如成千上万,我们无法想象这要造成多少资源(如内存、磁盘空间)的浪费,更让人无法忍受的是:因为图书(实例)的数量要保存在每本图书(实例)里,该值肯定是不同的。要使这些图书(实例)中保存的图书(实例)数量一致,我们必须在每增加一本新书(生成一个新实例)时,修改其他所有图书(实例)中保存的该值。Oh,My
God!你会重新向往面向过程的程序设计方法,向往拥有全局变量的时代。但,这种局面不会出现,因为C#中为你准备好了另外一种变量类型:静态变量。它在类中类似全局变量,保存类的公共信息,所有该类的实例(对象)共享该值。
声明静态变量的语法如下:
&访问修饰符&static 数据类型 变量名;
这里的访问修饰符跟类的其它成员一样,可以是public,protected,private或internal等。
在普通的成员变量前加static关键字,就变成了静态变量。静态变量和实例变量存储方式不同,静态变量在声明开始,就一直存储在内存中,直到整个程序终止。而实例成员在创建对象时分配内存,并存储一个数据副本。所以静态成员变量认为是属于类的,而不是对象。
静态变量与实例变量的区别如下:
1.内存分配
静态变量在应用程序初始化时,就存在于内存当中,直到它所在的类的程序运行结束时才消亡;
而实例变量需要被实例化后才会分配内存。
2.生存周期
静态变量生存周期为应用程序的存在周期;
实例变量的存在周期取决于实例化的类的存在周期。
3.调用方式
静态变量只能通过“类.静态变量名”调用,类的实例不能调用;
实例变量当该变量所在的类被实例化后,可通过实例化的类名直接访问。
4.共享方式
静态变量是全局变量,被所有类的实例对象共享,即一个实例的改变了静态变量的值,其他同类的实例读到的就是变化后的值;
实例变量是局部变量,不共享的。
5.访问方式
静态成员不能访问实例成员;
实例成员可以访问静态成员。
静态变量在类装载的时候分配内存,以后创建的对象都使用的该内存,相应的操作也就是对这块内存进行操作。也可以看作是另类的全局变量。
所以:静态变量只的值只会初始化一次,后面每次访问,都是上次处理过的值,(即使是在一个函数内部)。
实例变量每次都初始化。
class Program
static void Main(string[]args)
&&&&//输出未经定义的静态变量,结果为0;也说明了,在C#中未赋初值的变量系统自动赋为0
&&&&Console.WriteLine(sort.i);
&&&&//静态变量的访问方法(类名.静态变量名),而且还可以在外部操作静态变量呢,可见静态变量并不神秘;
&&&&sort.i = 5;
&&&&//输出5
&&&&Console.WriteLine(sort.i);
&&&&//还可以通过构造函数对静态变量赋初值呢,呵呵
&&&&sort sortTest = new sort();
&&&&//输出构造函数中的赋值 3;
&&&&Console.WriteLine(sort.i);
class sort
public sort()
&&&&i = 3;
静态变量必须使用类名来引用,而不能使用类的实例,因为,静态变量不属于任何实例,而是共有的。我们可以打个比方:在一个班级中,有些物品是个人的,我们想使用时,必须指出物品的所有者,比如说“王三的自行车”,在C#程序中我们可以使用:王三.自行车的格式。有些物品是大家共有的物品,不能以个人名义使用,而是用班级的名义使用,比如班集体出资买的篮球,只能说:“班级的篮球”,而不能说:“王三的篮球”。这绝对是不行的,这对其他人绝对是不公平的,我们可以联想到许多贪官污吏就是使用了不属于自己的东西,或以个人名义使用公家的东西而葬送了自己。
说一句有用的就是:静态变量是用类名来引用它。即:类名.静态变量名;
举个具体的例子如下:
using System.Collections.G
using System.T
class Program
class Class1
&&&&public static String staticStr = &Class&;
&&&&public String notstaticStr = &Obj&;
static void Main(string[]args)
&&&&//静态变量通过类进行访问,该类所有实例的同一静态变量都是同一个值
&&&&Console.WriteLine(&Class1's staticStr: {0}&, Class1.staticStr);
&&&&Class1 tmpObj1 = new Class1();
&&&&tmpObj1.notstaticStr = &tmpObj1&;
&&&&Class1 tmpObj2 = new Class1();
&&&&tmpObj2.notstaticStr = &tmpObj2&;
&&&&//非静态变量通过对象进行访问,不同对象的同一非静态变量可以有不同的值
&&&&Console.WriteLine(&tmpObj1's notstaticStr: {0}&, tmpObj1.notstaticStr);
&&&&Console.WriteLine(&tmpObj2's notstaticStr: {0}&, tmpObj2.notstaticStr);
&&&&Console.ReadLine();
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:110978次
积分:1655
积分:1655
排名:千里之外
原创:41篇
转载:48篇
评论:24条
(1)(1)(3)(1)(3)(1)(2)(24)(4)(14)(1)(7)(11)(15)(8)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'16:15 提问
一个程序里面有静态变量,我想执行好几遍该程序,每次的变量值都从外面获取,我的静态变量应该写成什么样
一个程序里面有静态变量,我想执行好几遍该程序,每次的变量值都从外面获取,我的静态变量应该写成什么样?
是不是不能用静态的了?
按赞数排序
看下你的代码设计是否有问题呢?通常静态变量设计为私有熟悉,并且提供给外界get/set方法。静态变量是类变量,是全局的。
而你的需求貌似是每执行一次,就从外界获取一次,这种属性应该是跟对象有关,不应该设置为静态变量吧。
我发下主要代码吧,涉及到静态变量的。主要是想把文件路径filename和获取的source的名字改成非静态的
public class ProcessRow {
source = new Properties();
FileInputStream fis = new FileInputStream(new File(
inputPropertieName()));
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
source.load(isr);
fis.close();
} catch (Exception e) {
// throw new ExceptionInInitializerError(e);
public static String filterAlphabet(String alph) {
alph = alph.replaceAll("[^(A-Z)]", "");
public String Pname() {
String hai = UseProcess.fileN
String a = filterAlphabet(hai);
String b = hai.substring(hai.indexOf(a), hai.indexOf(a) + 6);
public static String inputPropertieName() {
* System.out.println("请输入配置文件名称:"); Scanner a = new Scanner(System.in);
* String propertieName = a.next();
// a.close();
ProcessRow a = new ProcessRow();
String propertieName = a.Pname();
return propertieN
// 判断方法1,2
public boolean panduan1(XSSFRow from) {
return from.getCell(8).toString().trim()
.equals(source.getProperty("I列值1"))
&& (from.getCell(2).toString().trim().equals(source
.getProperty("C列值1")));// 1 I列值为“I列值1” 且C列值为“C列值1”
public boolean panduan2(XSSFRow from) {
return from.getCell(8).toString().trim()
.equals(source.getProperty("I列值2"))
&& (from.getCell(2).toString().trim().equals(source
.getProperty("C列值2")));// 2 I列值为“I列值2” 且C列值为“C列值2”
public class Output {
static Date d = new Date();
static DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
final static String fileName = df.format(d);
static String b =
static String c = ProcessRow.source.getProperty("输出路径")+fileName + "_main" + ".xlsx";
public static FileOutputStream init() {
FileOutputStream s =
s = new FileOutputStream(c);
} catch (FileNotFoundException e) {
public static XSSFWorkbook getWorkbook() throws IOException{
FileInputStream fis = new FileInputStream(c);
XSSFWorkbook wb = new XSSFWorkbook( fis );
UseProcess类
public class UseProcess {
static String fileName=UseProcess.fileName();
static XSSFS
readsheet = readWorkbook();
} catch (Exception e) {
// TODO: handle exception
static XSSFWorkbook sc =
static XSSFWorkbook sr =
public static String fileName() {
System.out.println("请输入文件路径(将文件拖入程序):");
Scanner a = new Scanner(System.in);
String fileName = a.next();
//a.close();
return fileN
ArrayList&String& date1 = new ArrayList&String&();
ArrayList&Double& value1 = new ArrayList&Double&();
ArrayList&String& date2 = new ArrayList&String&();
ArrayList&Double& value2 = new ArrayList&Double&();
int lastnum = getNum(fileName);
int i = Integer.parseInt(ProcessRow.source.getProperty("表单数据从第几行开始")) - 1;
static int j = 1;
public static int getNum(String Filename) {
myxls = new FileInputStream(Filename);
sr = new XSSFWorkbook(myxls);
XSSFSheet sheet = sr.getSheetAt(0);// 第一个工作表
return sheet.getLastRowNum();// 获取第一个工作表的行数
} catch (IOException e) {
public class TestMain {
public static void test() throws IOException, NumberFormatException, ParseException{
UseProcess.createWorkbook();
UseProcess n = new UseProcess();
for (int i = 1; i &= Integer.parseInt(ProcessRow.source
.getProperty("condition-process的个数")); i++) {
n.UseProcess1(String.valueOf(i));
n.UseProcessNull();
System.out.println("输入完毕");
public static void main(String[] args) throws NumberFormatException, IOException, ParseException
TestMain.test();
个程序里面有静态变量,我想执行好几遍该程序,每次的变量值都从外面获取,我的静态变量应该写成什么样?
是不是不能用静态的了?
个程序里面有静态变量,我想执行好几遍该程序,每次的变量值都从外面获取,我的静态变量应该写成什么样?
是不是不能用静态的了?
private static S
a = //可以读取配置文件等等
用静态就是负责少变化的数据或者少初始化类,减少内存消耗。例如一般的标识不会改变就用静态。或者类似集合,模型类等哪怕他的一些内部数据经常变动,也可以设置成静态的。就好像一个水果篮就是一个集合,他里面的水果可能经常变化,但水果篮一直在用,减少了消耗,而不是买一次水果就搞一个新的水果篮
你为和要加静态呢,只是单纯想享受静态的优先级调动你的变量吗?你想要你的变量每次都是从外面拿进来,而且要加静态,那么只能是设计你的引用地址不变,实际储存的数据是变化的,但是意思何在呢?你得多说一点你这么设计的需求啊!
楼主,你应该列出你的业务场景,这涉及到程序设计,不然没法给你答案
其他相关推荐}

我要回帖

更多关于 篮球比赛一共几节 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信