首先你要明白什么是静态变量,用static变量修饰意味着什么。
静态变量:
Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问(推荐),也可以使用对象名进行访问(不推荐,这样还有和意义和特殊性可言呢)。
public class A {
private static String staticStr = "I am static!";
private String commonStr = "I am not static!";
public String getStaticStr(){//非静态方法调用静态变量 √
return staticStr;
}
public String getCommonStr(){//非静态方法调用非静态变量 √
return commonStr;
}
public static String staticGetStaticStr(){//静态方法调用静态变量 √
return staticStr;
}
public static String staticGetCommonStr(){//静态方法调用非静态变量 ×
return commonStr;
}
}
解释
因为非静态变量对每个对象而言都是不同的,而静态方法又可以直接类名调用,不进行实例化,所以不创建对象时非静态变量是空的,即便是调用方法之前有了实例化对象,直接通过类名调用方法依然不知道你要返回哪个对像的属性,因为非静态变量每个对象都是私有的,与众不同。
就比如有一个学生类Student,他有两个属性,静态变量职业,非静态变量姓名。有一个静态方法返回学生的信息,你可以返回身份类型,因为每个Student都是学生,你不可以返回姓名,因为每个学生都有自己的名字,不是共性。