静态变量
结论:
static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;
static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝
全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。
区别是作用域:非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。
静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。
局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。
摘自:https://www.cnblogs.com/felix-kun/p/5404058.html
静态类
static修饰的类成为静态类,静态类中只能包含静态成员(被static修饰的字段、属性、方法),不能被实例化,不能被继承;非静态类中可以包含静态成员。
static用来修饰类或类的成员,这时不需要创建实例就能访问(而且不能实例化)。在被调用的时候自动实例化,且在内存中产生一个实例。当含有静态成员的非静态类实例化出对象后,这些对象公用这些静态成员,通过类名或对象名都能访问它们。
1.被调用时必须先实例化的情况
public class ClassA //ClassA类(非静态类)
{
public ClassA() { } //构造函数
public void Fun() { } //ClassA类中的方法(非静态方法)
}
public class ClassB //需要调用ClassA类中方法的ClassB类
{
public ClassB() { } //构造函数
public void Fun()
{
ClassA a = new ClassA(); //调用ClassA类中的方法需要先实例化
a.Fun();
}
}
2.被调用时不需要实例化的情况
2.1被调用的类是非静态类
public class ClassA //ClassA类(非静态类)
{
public ClassA() { } //构造函数
public static void Fun() { }//ClassA类中的方法(静态方法)
}
public class ClassB //需要调用ClassA类中方法的ClassB类
{
public ClassB() { } //构造函数
public void Fun()
{
ClassA.Fun(); //调用ClassA类中的方法直接调用:类名.成员
}
}
2.2被调用的类是静态类
public static class ClassA //ClassA类(静态类)
{
//当然静态类中不能存在构造函数
public static void Fun() { }//ClassA类中的方法(静态方法)
}
public class ClassB //需要调用ClassA类中方法的ClassB类
{
public ClassB() { } //构造函数
public void Fun()
{
ClassA.Fun(); //调用ClassA类中的方法直接调用:类名.成员
}
}