在Java语言中,变量的类型主要有3种:成员变量、静态变量和局部变量
首先说静态变量跟局部变量
静态变量不依赖于特定的实例,而是被所有实例共享,也就是说,只要一个类被加载,JVM就会给类的静态变量分配
存储空间。因此可以通过类名.变量名来访问静态变量
局部变量的作用域与可见性为它所在的花括号内
类的成员变量的作用范围同类的实例化对象的作用范围相同。当类被实例化的时候,成员变量就会在内存中分配空间,并初始化。
直到类的实例化对象的生命周期结束时,成员变量的生命周期才结束。
作用域与可见性 | 当前类 | 同一package | 子类 | 其他package |
public | √ | √ | √ | √ |
private | √ | × | × | × |
protected | √ | √ | √ | × |
default | √ | √ | × | × |
重点说一下protected和default:
protected:表名成员变量或方法对该类自身,与它在同一个包中的其他类,在其他包中的该类的子类都可见
defaul:表明该成员变量或方法只有自己和与其位于同一包内的类可见。
若父类与子类处于同一包内,则子类对父类的default成员变量或方法都有访问权限;若父类与子类处于不同的package内,则没有访问权限
还有需要注意的是,这些修饰符只能修饰成员变量,不能修饰局部变量。
private和protected不能用来修饰类