对JAVA中修饰符的总结整理,尤其是static的理解,static总是忘记
其他修饰符修饰的变量有效范围如下:
类内 | package内 | 子类 | 其他package | |
private | yes | no | no | no |
default | yes | yes | no | no |
protected | yes | yes | yes | no |
public | yes | yes | yes | yes |
修饰类 | 修饰成员 | 修饰局部变量 | |
static | 可以修饰内部类 | yes | |
final | yes | yes | yes |
abstract | yes | yes |
- 成员变量:类体中定义的变量,包括实例变量和静态变量
- 局部变量:类的方法体中定义的变量,有效范围是方法体的两个{}之间
static修饰的变量:静态变量或全局变量。有效范围可以跨类,甚至可以达到整个应用程序,可以直接以“类名.静态变量”的形式在其他类里使用。
Val1.class和Val3.class在一个package中,Val2.class在另一个package中
静态变量(static修饰的)变量是default
运行正常:
Val3.class在一个package里
运行也正常:
Val2.class报错,因为不在一个package里,把Val1.class里的静态变量time加上public修饰词,让别的package也可以访问,就运行正常了
Val1.class
Val2.class
输出
static表示不属于某个实例,属于类的,可以修饰成员,也可以修饰方法
比如定义人
class Person{
static long totalNum; //人类的总数,不属于具体的某个实例人,属于人类这个类的变量
}
理解了红字就会用static了