关于类的静态变量和非静态变量区别的一个研究例子
2006-07-27 23:48
246 查看
例子如下:
public class testclass
...{
public static testclass t = new testclass();
public static int staticNum = 1;
public static int i;
public int num = 1;
public testclass()
...{
Console.WriteLine("第{0}次",++i);
Console.WriteLine("staticNum={0}", staticNum);
Console.WriteLine("num={0}", num);
Console.Read();
}
}
public class StaticTest
...{
public static void Main(String[] args)
...{
testclass tt = new testclass();
}
}
输出结果如下:
################################################################################
第1次
staticNum=0
num=1
第2次
staticNum=1
num=1
###############################################################################
这了例子我一时也很难弄明白,了解多少就说多少吧。
首先看 staticNum=0 这个输出结果。这说明,当生成静态对象t时,静态变量staticNum只是声明而没有初
始化,即没分配内存空间(如果没声明,在调用时就会出现错误而无法通过编译的)。
不过,如果将 public static int staticNum = 1 放在 public static testclass t = new
testclass() 之前,如下:
public static int staticNum = 1;
public static testclass t = new testclass();
public static int i;
public int num = 1;
则输出结果就变成了:
###########################################################################
第1次
staticNum=1
num=1
第2次
staticNum=1
num=1
###############################################################################
这时候的静态变量staticNum就不仅声明而且经过初始化了。
具体原理可能要涉及到类的编译,等我理清楚了再继续写。
public class testclass
...{
public static testclass t = new testclass();
public static int staticNum = 1;
public static int i;
public int num = 1;
public testclass()
...{
Console.WriteLine("第{0}次",++i);
Console.WriteLine("staticNum={0}", staticNum);
Console.WriteLine("num={0}", num);
Console.Read();
}
}
public class StaticTest
...{
public static void Main(String[] args)
...{
testclass tt = new testclass();
}
}
输出结果如下:
################################################################################
第1次
staticNum=0
num=1
第2次
staticNum=1
num=1
###############################################################################
这了例子我一时也很难弄明白,了解多少就说多少吧。
首先看 staticNum=0 这个输出结果。这说明,当生成静态对象t时,静态变量staticNum只是声明而没有初
始化,即没分配内存空间(如果没声明,在调用时就会出现错误而无法通过编译的)。
不过,如果将 public static int staticNum = 1 放在 public static testclass t = new
testclass() 之前,如下:
public static int staticNum = 1;
public static testclass t = new testclass();
public static int i;
public int num = 1;
则输出结果就变成了:
###########################################################################
第1次
staticNum=1
num=1
第2次
staticNum=1
num=1
###############################################################################
这时候的静态变量staticNum就不仅声明而且经过初始化了。
具体原理可能要涉及到类的编译,等我理清楚了再继续写。
相关文章推荐
- 关于类的静态变量和非静态变量区别的一些问题
- 关于与单例与采用静态变量引用一个对象的区别
- 关于静态变量与非静态变量及函数的区别
- 【mysql】关于子查询的一个例子
- Java中关于静态变量的一个问题
- 一个菜鸟关于winrar密码无法秒破的研究结果
- 一个关于多态之虚函数的例子
- js一个关于作用域和执行环境的例子
- 关于ByteArrayOutputStream(字节数组输出流)的一个例子,与ByteArrayInputStream作一比较
- 关于JSON的一个小小例子,数组的调用,和获值
- 关于acl策略的隔离与互通的一个简单例子
- MSDN中关于结构成员对齐的一个例子
- 关于C#2.0泛型应用的一个小例子
- Android关于ExpandableListView用法的一个简单小例子。仿QQ列表
- 关于继承和多态的一个简单例子
- asp.net中静态变量和非静态变量的区别
- 一个例子说明C语言和Java的区别
- 关于attr的用法,自己写的一个例子。
- 一个关于指针数组的例子
- c和指针中关于动态分配内存malloc和qsort的一个例子