Java中有很多的权限修饰符和修饰符,往往我们在编程的时候,不能正确的使用这些修饰符,甚至有的人根本分不清权限修饰符和修饰符,以下是对修饰符和权限修饰符的一些总结!
首先,为什么要有权限修饰符?
答:因为在我们编写一个类,并且供人使用的时候,我们只需要满足一些必要的功能就可以了,而没有必要把类中的所有方法,成员都给他,这能保证一定的安全性,也体现了Java的封装性。
权限修饰符:
default:
类,数据成员,构造方法,方法成员,都能够使用默认权限,即不写任何关键字。
默认权限即同包权限,同包权限的元素只能在定义它们的类中,以及同包的类中被调用。
(总结:只要是同一个包中,都可以被调用,范围是本包)
public:
public可以修饰类,数据成员,构造方法,方法成员。被public修饰的成员,可以在任何一个类中被调用,不管同包或不同包,是权限最大的一个修饰符。
(总结:那都能用,范围是本程序)
private:
private可以修饰数据成员,构造方法,方法成员,不能修饰类(此处指外部类,不考虑内部类)。被private修饰的成员,只能在定义它们的类中使用,在其他类中不能调用。
(总结:在哪个类定义,就在哪个类使用,范围是本类)
protected:
protected可以修饰数据成员,构造方法,方法成员,不能修饰类(此处指外部类,不考虑内部类)。被protected修饰的成员,能在定义它们的类中,同包的类中被调用。如果有不同包的类想调用它们,那么这个类必须是定义它们的类的子类。
(总结:范围比default大一点,能在不同的包中进行访问,只是另一个包中的类需要时该类的子类)
修饰符:
final:
final的意思是不可变,他可以修饰类、字段、方法。修饰类后类不能被扩展(extends),也就是不能被继承。修饰字段后字段的值不能被改变,因此如果有final修饰字段,应该对字段进行手动初始化。修饰方法后该方法不能被改变,也就是重写。
static:
static用来修饰内部类,方法,字段。修饰内部类说明该内部类属于外部类而不属于外部类的某个实例。修饰字段说明该字段属于类而不属于类实例。修饰方法说明该方法属于类而不属于类实例。
abstract:
abstract是抽象的意思,用来修饰类和方法,修饰类后,该类为抽象类,不能被实例化,必需进行扩展。修饰方法后,该方法为抽象方法必须被子类重写(override)。
transient:
告诉编译器,在类对象序列化的时候,此变量不需要持久保存。
volatile:
指出可能有多个线程修改此变量,要求编译器优化以保证对此变量的修改能够被正确的处理。