JAVA 简述static成员变量与非static成员变量的主要区别是什么?
static是为了将某个成员变量/方法关联到类(class)而非实例(instance)。 \x0d\x0d\你不需要创建一个对象就可以直接使用这个类的static成员, \x0d\x0d\在A类中调用B类的static成员可以使用B.staticMember的写法。 \x0d\x0d\注意一个类的static成员变量是唯一的,被所有该类对象所共享的。\x0d\x0d\比如说有一个类Dog;\x0d\ 属性:clolor,狗狗可以有好多颜色;\x0d\ munberOfLegs =4 每只狗狗只有4条腿,这个就应该是静态的;\x0d\x0d\静态的属性不依赖于类的存在而存在,简单说,你可以定义\x0d\Dog dog1 = new Dog();\x0d\Dog dog2 = new Dog();\x0d\Dog dog3 = new Dog();\x0d\这里定义了三条狗狗,狗狗的颜色依赖于类本身,即dog1,dog2,dog3;三条狗狗可以有不同的颜色;\x0d\而狗狗的腿的数量不依赖于dog1,dog2,dog3;所有的狗狗都是4条腿
“public static”和“public”有什么区别?
静态变量与静态函数2007-04-09 22:15 在函数或者变量前面加上static修饰符号,以便把函数或者变量在类内或者文件范围内共享,那么我们把这种函数和变量叫静态函数和静态变量。说白了,静态变量的生存期是整个程序,然而其作用域没什么变化,与动态变量的作用域是一样的,虽然静态变量在作用域外存在,但不可调用;它可以保证下次调用该函数时值保持不变,不会再次被初始化。
首先介绍静态成员函数和静态成员变量,他们是用来记录类的信息而不是对象的信息,创建对象时不会创建该变量的空间。二者既可以由对象调用又可以通过类来调用。具体而言又有如下特征:
1) 静态变量受public,protected ,private限制,这同普通变量一样,也就是如果静态变量是protected或者private类型的,在类外不能访问,比如
A::i是错误的
这条规则同样适用于静态函数
2) 静态变量在类内声明,而必须在类外初始化,模版类中应用也是这样。这里我们在static后面加上const类型,可以直接初始化。比如
Class A
{
// Static int I = 5; // error
Static const int I = 5; // ok
Int m_list[I];
}
而这里I的应用也无非是Int m_list[I];
3) 静态成员函数没有this指针。因此,不能声明为const函数。另外,成员数据变量在成员函数内是通过this指针来访问的,因此静态成员函数不能访问任何非静态成员变量。
静态局部变量属于静态存储方式,它具有以下特点:
1) 静态局部变量在函数内定义,但不象自动变量那样,当调用时就存在,退出函数时就消失。静态局部变量始终存在着,也就是说它的生存期为整个源程序。
2) 静态局部变量的生存期虽然为整个源程序,但是其作用域仍与自动变量相同,即只能在定义该变量的函数内使用该变量。退出该函数后, 尽管该变量还继续存在,但不能使用它。
3) 允许对构造类静态局部量赋初值。若未赋以初值,则由系统自动赋以0值。
4) 对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对自动变量不赋初值,则其值是不定的。 根据静态局部变量的特点, 可以看出它是一种生存期为整个源程序的量。虽然离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用, 而且保存了前次被调用后留下的值。 因此,当多次调用一个函数且要求在调用之间保留某些变量的值时,可考虑采用静态局部变量。虽然用全局变量也可以达到上述目的,但全局变量有时会造成意外的副作用,因此仍以采用局部静态变量为宜。
例题如下:
main()
{
int i;
void f(); /*函数说明*/
for(i=1;i