static&final
一、 static
static
可以修饰成员变量(不可以修饰局部变量)、方法、代码块、内部类- 被
static
修饰的变量或方法被所有对象共享 - 被
static
修改时的变量或方法可以通过类名.变量或方法名
调用(推荐),也可以通过对象.变量或方法名
调用
1.1 静态变量
- 静态变量可以被同一类下的任意方法、代码块、构造方法直接使用
- 当局部变量与静态变量重名时,使用
类名.静态变量
进行区分
1.2 静态方法
- 静态方法可以被同一类下的任意方法、代码块、构造方法直接使用
- 对于当前类的成员变量和方法,静态方法内部只能访问被
static
修饰 - 静态方法的调用只看编译时类型
- 静态方法可以被子类继承,但不能被子类重写(当子类和父类中的同一方法都被声明为
static
时,这两个方法上并不是重写关系,而是成为了并列存在于各自类中的static
方法。) - 因为不需要实例就可以访问,因此静态方法内部不可以有
this
或者super
关键字(静态方法以及静态变量的创建早于对象)
二、 final
final
关键字可修饰变量(成员变量和局部变量都可以)、方法、类- 被
final
修饰的变量也被叫做常量,赋值后就不能再修改,即只能赋值一次- 常量必须被初始化,可以在定义时直接赋值,也可以先定义再赋值(但要保证在调用前完成赋值)
- 被
final
修饰的成员变量可以将赋值操作推迟到代码块以及构造方法中 - 被
final
修饰的局部变量可以将赋值操作推迟到变量调用之前任一地方
- 被
final
修饰的方法不能被子类重写。 - 被
final
修饰的类表示不能被继承(如String
类)
三、 笔/面试题
-
问:final修饰的变量是否可以修改
答:不可以
-
问:String是否可以被继承
答:String类被final修饰,不可以被继承