如何决定哪些方法或是变量该声明为静态的,往往是设计类时应该考虑的一个重要步骤.下面简单讨论一下静态变量和方法.
[size=large][color=red]静态变量[/color][/size]
主要由两类变量,在方法内声明的局部变量和在类中声明但不位于方法内的实例变量(也可称为全局变量).这里使用术语实例变量,是因为每个类都有自己的变量值,对不同的对象分配不同的内存空间,每个对象中这个变量的值都可以不同.
静态变量,也称为类变量,它由类的所有实例共享,即不同的对象共享一个数据域.在一个对象中修改了静态变量的值,就等于修改了其他所有对象中该静态变量的值.用static修饰符来声明一个静态变量.如:
静态变量的内存空间是在程序中第一次使用该变量所在的类时分配的.方法内的局部变量不能声明为静态的,因为程序无法知道什么时候会调用该方法.
在使用final修饰符声明常量时,通常会使用static进行再次声明.因为常量的值是不可变的,索性就让它们当做类的所有对象所共享的唯一值.
[size=large][color=red]静态方法[/color][/size]
静态方法可以通过类名来调用而不用先实例化一个对象.Math内的所有方法都是静态的,可以通过Math.方法名()直接调用.Math类的方法都是根据传递过来的参数完成基本运算,这种情况下,不需要维护一个对象状态,所以没有理由为了完成这些运算去创建一个对象的实例.
因为静态方法和具体的对象无关,所以它们不能引用只在类的实例中才存在的实例变量,如果静态方法试图调用一个非静态变量的话,就会出现编译错误.但是静态方法可以调用静态变量,因为静态变量是独立于具体的对象而存在的.
[size=large][color=red]静态变量[/color][/size]
主要由两类变量,在方法内声明的局部变量和在类中声明但不位于方法内的实例变量(也可称为全局变量).这里使用术语实例变量,是因为每个类都有自己的变量值,对不同的对象分配不同的内存空间,每个对象中这个变量的值都可以不同.
静态变量,也称为类变量,它由类的所有实例共享,即不同的对象共享一个数据域.在一个对象中修改了静态变量的值,就等于修改了其他所有对象中该静态变量的值.用static修饰符来声明一个静态变量.如:
private static int i = 0;
静态变量的内存空间是在程序中第一次使用该变量所在的类时分配的.方法内的局部变量不能声明为静态的,因为程序无法知道什么时候会调用该方法.
在使用final修饰符声明常量时,通常会使用static进行再次声明.因为常量的值是不可变的,索性就让它们当做类的所有对象所共享的唯一值.
[size=large][color=red]静态方法[/color][/size]
静态方法可以通过类名来调用而不用先实例化一个对象.Math内的所有方法都是静态的,可以通过Math.方法名()直接调用.Math类的方法都是根据传递过来的参数完成基本运算,这种情况下,不需要维护一个对象状态,所以没有理由为了完成这些运算去创建一个对象的实例.
因为静态方法和具体的对象无关,所以它们不能引用只在类的实例中才存在的实例变量,如果静态方法试图调用一个非静态变量的话,就会出现编译错误.但是静态方法可以调用静态变量,因为静态变量是独立于具体的对象而存在的.