Java修饰符主要分为两种,访问权限修饰符和非访问权限修饰符。分别作用于类、方法和域(字段)上面,而且他们将起到不同的作用,甚至有些修饰符还是互斥的。接下来我将粗略的介绍一遍,以便看客朋友们能有个印象,起码知道有这么个东西。
访问权限修饰符
见名知义,访问权限修饰符就是为了控制程序的访问权限。那么为什么需要访问权限修饰符呢?不可以直接所有权限开放,所有类,方法,变量都能访问吗?
个人理解,主要是为了安全考虑,有了访问权限修饰符,研发人员就能自己控制哪些方法、变量可以外部直接访问,对于无需外界访问的可以封装起来形成黑盒,这样对提供者和消费者都很友好,也可以防止不熟悉的开发人员改动到了他不应该改动的值,导致程序崩溃。
简单举个例子:假设现在有个订单表,订单一般有自己的订单状态,支付状态,两者之间会有些不变性约束,比如订单状态为已完成的则支付状态必然是已支付。这种不变性约束是程序在内部控制的,且通过某些行为同时修改对应状态的值。但是如果此时我们可以直接访问单独的某个状态,将已完成订单的支付状态改为未支付,这将破坏订单的不变性条件,导致系统出现异常,这是我们无法容忍的。
访问权限修饰符分为以下几种:
(default):默认权限,不加任何权限修饰符时就是该权限,只有同包可访问。同包可访问意味着在其他包中都不可访问,包括子包。该修饰符可以修饰:类,接口,枚举,方法,域。
public:公开权限,任何地方都可以访问。可修饰:类,接口,枚举,方法,域。
protected:受保护的权限。这个就比较特殊了,它除了同包可访问之外,继承类也可以访问。可修饰:内部类,内部接口,内部枚举,方法,域。
private:私有权限。只有申明的类