
上QQ阅读APP看书,第一时间看更新
3.3 关键字static
有时候,可能需要同类的各对象之间共享某些变量或方法,这些共享的变量或方法被称为类变量或者类方法。类变量或者类方法统称为静态对象。
用static关键字来声明类变量和类方法的格式如下。
类变量:
static variableType variableName;
类方法:
static returnType classMethod([paramlist]){…}
注意:每个实例对象对类变量的改变都会影响到其他的实例对象。类变量可通过类名直接访问,无须先生成一个实例对象,也可以通过实例对象访问类变量。类方法不能访问实例变量,只能访问类变量。类方法可以由类名直接调用,也可以由实例对象进行调用。类方法中不能使用this或super关键字。
静态变量可以有初值,就像实例变量一样。静态变量和方法都是通过类名字来访问的。为方便起见,也可以用具体对象来访问。
例3.10演示了如何显式调用静态方法。
例3.10 StaticDemo.java
//静态方法的调用 class MyMath{ static final double PI=3.14159; static int max(int a,int b){ return a>b?a:b; } } public class StaticDemo{ public static void main(String[] args){ //无须创建实例,即可直接调用 System.out.println("PI="+MyMath.PI); System.out.println("max(100,200)="+MyMath.max(100,200)); } }
调用静态方法的格式为:
类名.方法名
注意:如果在声明时不用static关键字修饰变量或者方法,则表示是实例变量或实例方法。
每个对象的实例变量都独立分配内存,通过对象来访问这些实例变量。实例方法可以对当前对象的实例变量进行操作,也可以对类变量进行操作,实例方法由实例对象调用。
例3.11 StaticDemo2.java
//静态成员的使用 class StaticDemo2{ //实例变量 int i; //静态变量 static int j; static int arr[ ] = new int[12]; //静态初始化成员,初始化数组 static{ for(int i=0;i<arr.length;i++) arr[i] =i; } //实例方法 void setI(int i){ this.i =i; } //静态方法 static void setJ(int j) { StaticDemo2.j=j; } public static void main(String []args ){ StaticDemo2 sd2 = new StaticDemo2(); StaticDemo2.j=2; //正确: 通过类访问静态变量 sd2.j =3; //正确: 通过实例访问静态变量 StaticDemo2.setJ(2); //正确: 通过类访问静态方法 sd2.setJ(3); //正确: 通过实例访问静态方法 sd2.i=4; //正确: 通过实例访问实例变量 sd2.setI(7); //正确: 通过实例访问实例方法 StaticDemo2.i=5; //错误: 通过类访问实例变量 StaticDemo2.setI(5); //错误: 通过类访问实例方法 } }
注意:static也可以用来修饰一个类,称为静态类。通常只有内部类才允许声明为静态的。