private , 缺省 , protected , public
作用范围:
访问修饰符\作用范围 | 所在类 | 同一包内其他类 | 其他包内子类 | 其他包内非子类 |
---|---|---|---|---|
private | 可以访问 | 不可以 | 不可以 | 不可以 |
缺省 | 可以 | 可以 | 不可以 | 不可以 |
protected | 可以 | 可以 | 可以 | 不可以 |
public | 可以 | 可以 | 可以 | 可以 |
-
private
被private修饰的属性和方法,不能被其他类访问,子类不能继承也不能访问。只能在所在类内部访问。 -
缺省
变量或者方法前没有访问修饰符时,可以被所在类访问,可以被同一包内的其他类访问 或者继承。但是不能被其他包访问。 -
protected
被protected修饰的方法和属性,在同一包内可被访问和继承。不同包内,子类可继承,非子类不能访问。 -
public
方法和属性前有public修饰,可以被任意包内的类访问。
-
static
static是一个修饰符,用于修饰成员(成员变量和成员函数)
- 静态成员随着类的加载而加载。
- 静态成员被所有对象所共享
- 静态成员多了一个中调用方式,可以被类名直接调用。
4: 被static修饰的方法与变量会在类加载时进行初始化,并且在加载时分配固定的内存块,且对象为全局对象
final
-
当一个方法被final修饰后,表示该方法不能被子类重写,final方法有一个好处是比非final方法要快,因为在编译时已经静态绑定了,不需要在运行时在动态绑定。
- final修饰的类属性和变量属性必须要进行显示初始化赋值,初始化后无法再次修改,最终最后版本的意义用final修饰的类不能被继承,即不能拥有自己的子类。
- final关键字提高了性能。JVM和Java应用都会缓存final变量。
- final变量可以安全的在多线程环境下进行共享,而不需要额外的同步开销。
- 创建不可变类要使用final关键字。不可变类是指它的对象一旦被创建了就不能被更改了。String是不可变类的代表。不可变类有很多好处,譬如它们的对象是只读的,可以在多线程环境下安全的共享,不用额外的同步开销等等。
-------
static 和 final 一起修饰变量 此变量即为编译器常量
非静态 final 修饰的变量,跟类运行时初始化的时候变成共享对象,生命周期为主方法执行结束
内部类调用外部类变量必须用final修饰变量
处于设计,使用final修饰方法是为了不让继承的类经行修改或覆盖
设计时,不希望有子类或者这个类为最终稳定版本的类时,可以使用final修饰类