一、final关键字
1.概述
学习了继承后,我们知道,子类可以在父类的基础上改写父类内容,比如,方法重写。那么我们能不能随意的继承API中提供的类,改写其内容呢?显然这是不合适的。为了避免这种随意改写的情况,Java提供了final关键字,用于修饰不可改变内容。
final属于一个修饰符,用来修饰类、成员方法、变量(成员变量、局部变量)。被它修饰的类不能被继承,被它修饰的方法不能重写,被它修饰的变量不能被重新赋值。
2.格式
修饰类:
修饰方法:
修饰变量:
注意事项:
1.被final修饰的变量,在生成的.class文件中已经变为了常量。
2.final修饰的引用数据类型的变量,是地址值不能被改变,类中的成员变量的值可以改变。
3.final修饰的变量变为常量,为了和变量区分,一般建议final修饰的变量名都大写 。
二、static关键字
1.概述
static是静态修饰符,一般修饰成员。被static修饰的成员属于类,不属于单个这个类的某个对象。static修饰的成员被多个对象共享。static修饰的成员属于类,但是会影响每一个对象。被static修饰的成员又叫类成员,不叫对象的成员。注意:static不能修饰类 构造方法 局部变量。
2.格式
static 数据类型 变量名=数据;
之前我介绍过,只要使用不同类中的成员变量有以下几种方式:
(1)
(2) 继承,使用super调用
(3)
所以,如果一个成员变量被static修饰变为静态成员变量了,那么直接可以使用类名调用即可。
3.stati修饰成员变量的注意事项
(1)静态方法可以直接访问类变量和静态方法。
(2)
(3)
解释一下第二点,主要是因为先加载类到方法区,直接使用类名调用静态方法了,而此时还没有对象,而非静态方法必须有对象才可以运行。所以静态方法中不能使用非静态成员。但是非静态方法可以使用静态成员,因为对象已经有了,说明类肯定存在了(先有类后有对象)。看下面图解:
4.static修饰成员方法
格式:
被static修饰的方法称为静态方法,直接使用类名调用,和对象无关;没有被static修饰的方法称为非静态方法,和对象有关。
5.static修饰成员方法的注意事项
(1)静态方法中不能使用非静态的成员变量和成员方法
(2)非静态成员方法可以调用静态成员变量和方法,因为先有类后有对象
三、权限修饰符
在Java中提供了四种访问权限,使用不同的访问权限修饰符修饰时,被修饰的内容会有不同的访问权限。
public 公共的权限,最大的权限 :1)同一类 2)同一包不同类 3)不同包的子类 4)不同包之间没有关系的类
protected 受保护权限 修饰的内容访问范围:1)同一类 2)同一包不同类 3)不同包的子类
默认权限(什么都不书写,空的) 修饰的内容可以在本类中使用,也可以在同一包下不同类中使用
private 私有的权限,最小的权限,修饰的内容只能在本类使用
说明:
1)四种权限修饰符能够跨包访问的只有:public protected必须是子类
2)四个权限修饰符从大到小:public > protected > .默认权限(什么都不书写,空的) > private
public | protected | 默认 | private | |
同一类中 | √ | √ | √ | √ |
同一包中(子类与无关类) | √ | √ | √ | |
不同包的子类 | √ | √ | ||
不同包中的无关类 | √ |