前言
想必一开始学习Java的时候很多小伙伴对于
private
,protected
等等这些单词一定很熟悉,但是也很容易混淆。在此我把这几个单词包括static
和final
也介绍介绍。
几个修饰符
-
private
从单词意思就能看出来,如果被这个单词修饰,那么使用的范围肯定很窄!的确是的,如果其修饰了某个类中的成员,那么成为该类的
私有成员,只能通过该类自身的方法访问和修改,不能被其他类(包括该类的子类)获取或者引用
。 -
protected
用该修饰符修饰的成员可以被三种类所引用:
①该类自身;②和该类在同一个包中的其他类;③在其他包中该类的子类。
如果使用该修饰符的话,同时兼顾成员的安全性和便利性。 -
public
如果使用这个修饰符修饰,说白了:无论哪个类在什么地方,都可以访问public修饰的成员。
-
缺省访问控制符
在很多时候会省去访问控制符,这个时候用到的就是缺省的访问控制符,此时:
该成员只能被同一个包中的所有类所访问
。也就是说,如果该类的子类和它不在同一个包中,那么该类的子类也是无法访问这个成员的。
题外的两个修饰符
-
final
其实到这里你会发现区分这些修饰符的作用,通过联想单词的含义还是很有帮助的。final,意思就是最终的,已经到终点了,无法修改了
。好的,那么被它修饰过的类:已经是最终的类了,那么肯定是不能继承了呀,不能拥有子类!如果是被它修饰过的成员变量:已经是最终的变量了,不能变了,那就是常量啊
,那么问题来了,既然是常量了,我们在哪初始化呢?有两个方法:①在定义变量时就给出一个初始值;②在类的构造方法中,对变量进行赋值;之后其他地方就修改不了。如果是被它修饰过的成员方法:这个和修饰过的类很像啊,说明如果在子类中这个方法不能重写(Override)
了啊。 -
static
静态修饰符,被它修饰过的类成为静态类,被它修饰过的变量成为静态变量。静态变量时隶属于类的变量,对静态变量(方法)的访问有两种方式:①Class.静态变量(方法);②对象.静态变量(方法);由于静态方法在加载类的时候就需要加载静态方法,因此在静态方法中不能用到类中的其他非静态变量,同时也不能使用this或者super关键字
,因为this或者super实际上都是指代一个对象实例,而此时并没有创建对象。
一道面试题:为什么main函数是static的?
因为Java虚拟机在运行时,当系统执行一个程序前并没有常见main()方法所在类的一个实例,因此只能通过类名来调用main方法作为程序的入口,也就是说调用main()方法的是类,而不是对象,因此必须用static来修饰。