Java 关键字 static 、final 总结

栏目:Java8基础 作者:admin 日期:2018-10-21 评论:0 点击: 601 次

static 和 final 是 Java 里两个关键字,在此对它们的用法做个总结。
static
被 static 修饰的域或方法属于类,独立于具体的对象。通过类名就可以直接调用,不需要实例化。访问时直接用类名.static 域和类名.static 方法即可。
static 域:
如果将域定义为 static ,每个类中只有一个这样的域。该类的所有对象都共享该 static 域。
static 方法:
static 方法可以通过类名直接调用,该类的任何对象也可以调用(但不推荐)。
static 方法不能使用 this 和 super 关键字。
static 方法只能访问 static 域,不能访问实例域,因为实例域是与特定的对象相关联的。
static 方法必须被实现,而不能是 abstract 方法。
以下两种情况可以考虑使用 static 方法:
一个方法不需要访问对象状态,所需参数都是通过显示参数提供(如:Math.pow)
一个方法只需访问类的 static 域。
static 代码块:
static 代码块,是在类中独立于类成员的 static 语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM 加载类时会执行这些静态的代码块,如果 static 代码块有多个,JVM 将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。所有 static 代码块都在 main 方法之前执行。
final
final 可以修饰域、方法和类。
final 域:
被 final 修饰的域是常量,值一旦给定就无法改变。
final 方法:
如果某个类不允许其子类覆盖某个方法,可以将该方法声明为 final 方法。
使用 final 方法有两个原因:
防止子类覆盖该方法,修改它的意义和实现。
提高效率。编译器遇到 final 方法就会使用内联机制。
final 类:
final 类不能被继承。final 类中的方法自动成为 final 方法,因为不能被继承,也就不会被覆盖。
使用 final 类和 final 方法的目的都是为了确保它们不会在子类中改变语义。