Java 关键字 static 、final 总结

static 和 final 是 Java 里两个关键字,在此对它们的用法做个总结。

static

被 static 修饰的域或方法属于类,独立于具体的对象。通过类名就可以直接调用,不需要实例化。访问时直接用类名.static 域类名.static 方法即可。

static 域:

如果将域定义为 static ,每个类中只有一个这样的域。该类的所有对象都共享该 static 域。

static 方法:

static 方法可以通过类名直接调用,该类的任何对象也可以调用(但不推荐)。

  1. static 方法不能使用 this 和 super 关键字。
  2. static 方法只能访问 static 域,不能访问实例域,因为实例域是与特定的对象相关联的。
  3. static 方法必须被实现,而不能是 abstract 方法。

以下两种情况可以考虑使用 static 方法:

  1. 一个方法不需要访问对象状态,所需参数都是通过显示参数提供(如:Math.pow)
  2. 一个方法只需访问类的 static 域。

static 代码块:

static 代码块,是在类中独立于类成员的 static 语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM 加载类时会执行这些静态的代码块,如果 static 代码块有多个,JVM 将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。所有 static 代码块都在 main 方法之前执行。

final

final 可以修饰域、方法和类。

final 域:

被 final 修饰的域是常量,值一旦给定就无法改变。

final 方法:

如果某个类不允许其子类覆盖某个方法,可以将该方法声明为 final 方法。

使用 final 方法有两个原因:

  1. 防止子类覆盖该方法,修改它的意义和实现。
  2. 提高效率。编译器遇到 final 方法就会使用内联机制。

final 类:

final 类不能被继承。final 类中的方法自动成为 final 方法,因为不能被继承,也就不会被覆盖。

使用 final 类和 final 方法的目的都是为了确保它们不会在子类中改变语义。

欢迎关注公众号: FullStackPlan 获取更多干货

Copyright © 2016 - 2017 LBD All Rights Reserved.

访客数 : | 访问量 :