Java中的静态变量和静态方法

决定哪些方法或变量声明为静态的,是类设计时的关键步骤。

静态变量(static variable)有时也称为类变量(class variable),它由类的所有实例共享。对于类的所有对象来说,静态变量只有一个副本。所以在一个对象中修改静态变量的值,同时也就修改了其他所有对象中该静态变量的值。保留字static是用来声明静态变量的修饰符。静态变量的内存空间是在程序第一次使用该变量所在的类时分配的。在方法内声明的局部变量不能是静态的。

静态方法(static method)也称为类方法( class method),静态方法是直接通过类名来调用的,而不需要为了调用方法而实例化类的一个对象然后通过类的对象来调用。例如Math类的所有方法都是静态方法,以下面的代码行为例,通过Math类名来调用sqrt方法:

System.out.println("Square root of 9:" + Math.sqrt(9));

Math类中的方法根据传递的参数值完成基本的运算,这种情况下不需要维护一个对象,也就没有理由为了完成这个计算而创建一个对象。

我们最常见到的程序中的main方法就是使用static修饰符来声明的静态方法。因此main方法可以由解释程序直接运行,而不需要实例化一个main方法所在类的对象。因为静态方法不会对具体的对象进行操作,所以它们不能引用只在类的实例中才存在的实例变量(instance variable),否则将会出现编译时错误。静态方法可以引用静态变量,因为静态变量可以独立于具体的对象而存在。

下面的程序实例化了Slogan类的几个对象并依次输出。最后通过类名调用的静态方法getCount返回程序中已实例化的对象的个数count,count是Slogan类中的静态变量,Slogan类在变量声明时将它赋初值0,在构造方法中将该静态变量的值加1,所以count可以记录已创建的Slogan实例的个数。

public class SloganCounter //实例化slogan对象并输出,统计创建对象的个数
{
	public static void main(String[] args) 
	{
		slogan obj;		
		// 声明对象的类名,这里将声明和创建分开,相当于省略了后面每一段obj前面的slogan
		obj = new slogan("Blue is the color");
		System.out.println(obj);
		obj = new slogan("Football is the game");
		System.out.println(obj);
		obj = new slogan("We're all together");
		System.out.println(obj);
		obj = new slogan("And winning is our aim");
		System.out.println(obj);

		System.out.println("Slogan created:\t" + slogan.getCount() + " phrases");
	}
}
public class slogan 	//slogan类的创建
{
	private String phrase;
	private static int count = 0;	// 声明静态变量count
	
	public slogan(String str)
	{
		phrase = str;
		count++;		// 每实例化一个对象,count加1
	}
	
	public String toString()
	{
		return phrase;
	}
	
	public static int getCount()	//声明为静态方法
	{
		return count;		//静态方法只能引用静态数据
	}
}

getCount方法也可以不用static修饰符来声明,如果这样的话它就不再是一个静态变量,在main方法中必须通过slogan类的实例来调用,而不能通过类本身调用。非静态方法是可以引用静态变量的。

你可能感兴趣的:(Java程序设计与数据结构,java,数据结构)