访问控制存在的原因:
1.让客户端无法触及不应该触及的部分 ;
2.允许库设计者可以改变类内部的工作方式而不用担心会影响到客户端程序员
说白了就是安全性,不该碰的就不让碰!
java中的四个关键字:public、protected、default、private
适用范围<访问权限范围越小,安全性越高>
访问权限 类 包 子类 其他包
public ∨ ∨ ∨ ∨ (都可以访问)
protect ∨ ∨ ∨ × (本类以及子类可以访问)
default ∨ ∨ × × (默认的,相同包中访问)
private ∨ × × × (只能本类访问)
类修饰符:
public(访问控制符),将一个类声明为公共类,他可以被任何对象访问,一个程序的主类必须是公共类。
abstract,将一个类声明为抽象类,类中包含没有实现的方法(抽象方法),需要子类提供方法实现。
final,将一个类声明为最终类(即非继承类),表示他不能被其他类继承。
friendly,默认的修饰符,只有在相同包中的对象才能使用这样的类。
问题来了:friendly与default 是什么鬼?
【Java中所谓的“friendly”和“default”都只是一种说法,当一个类的成员前面没有任何访问权限修饰符修饰时,我们就说它是“friendly权限”,或者“default权限” 】
成员变量修饰符:
public(公共访问控制符),指定该变量为公共的,他可以被任何对象的方法访问。
private(私有访问控制符)指定该变量只允许自己的类的方法访问,其他任何类(包括子类)中的方法均不能访问。
protected(保护访问控制符)指定该变量可以别被自己的类和子类访问。在子类中可以覆盖此变量。
friendly ,在同一个包中的类可以访问,其他包中的类不能访问。
final,最终修饰符,指定此变量的值不能变(常量)。
static(静态修饰符)修饰的成员变量也叫类变量或全局变量,在类被加载时变量被初始化,只创建一次,所有对象共享。
transient(过度修饰符)指定该变量是系统保留。在类序列化时,其修饰的变量被忽略不参与序列化。
volatile(易失修饰符)指定该变量可以同时被几个线程控制和修改,jvm只是保证从主内存加载到线程工作内存的值是最新的。
方法修饰符:
public(公共控制符)
private(私有控制符)指定此方法只能有自己类等方法访问,其他的类不能访问(包括子类)
protected(保护访问控制符)指定该方法可以被本类和子类进行访问。
final,指定该方法不能被重写。
static,指定不需要实例化就可以激活的一个方法。
synchronize,同步修饰符,在多个线程中,该修饰符用于在运行前,对他所属的方法加锁,以防止其他线程的访问,运行结束后解锁。
native,本地修饰符。指定此方法的方法体是用其他语言在程序外部编写的。<java native 了解一下>