与字段相似,方法也可以分为静态和非静态。
静态方法可以访问静态字段,也可以访问静态方法。但是静态方法不能直接访问非静态方法,必须通过对象的实例进行访问。
相反,非静态方法在访问时没有限制,既可以访问静态的,也可以访问非静态的。
其实,只要想想原理就能明白。对象直接要进行互动就必须先具备形体,而创建对象,或者使用静态修饰符修饰,就是创建形体。举个例子:
public class demoStaticMethod{
private int a = 10; //非静态字段
private static int b = 20; //静态字段
public static void main(String[] args){
sayHello();
sayHi(); //这里会报错,因为静态方法main不能直接访问非静态方法 sayHi();
System.out.println(a); //这里会报错,因为静态方法main不能直接使用非静态字段 a
System.out.println(b);
demoStaticMethod dSM = new demoStaticMethod();
dSM.sayHi(); //静态访问非静态,必须创建实例进行访问
System.out.println(dSM.a); //通过实例访问非静态字段
}
static void sayHello(){ //静态方法
System.out.println("Say Hello!");
}
void sayHi(){ //非静态方法
System.out.println("Say Hi!");
}
}