final字段
- final字段修饰的对象必须在构造对象时初始化。这个字段的值在设置时,以后将不能再更改。
class Employee{
private final String name;
...
}
- final修饰符对于类型为基本类型或者不可改变的类的字段十分有用。对于可变的类,如果使用final修饰符将可能造成混乱,例如:
private final StringBuilder evaiuations;
evaluations = new StringBuilder();
- final关键字只是表示存储在evaluations变量中的对象引用不会再指示另一个不同的StringBuilder对象。
static字段
- 如果将一个字段定义为static,那么每个类只有这样的一个字段,对于非静态的实例字段,每个对象都会有自己的一个副本。
class Employee{
private static int nextID = 1;
private int id;...
}
对于每个Employee对象都会有自己的id字段,但是这个类的所有实例将会共享一个nextID字段。如果有100个Employee对象那么将会有100个id实例,分别对应一个对象。但是只有一个nextID。即使没有Employee对象,nextID也会存在,此字段不属于任何对象,而属于类。
static 常量
静态变量用的相对较少,但是静态常量用的较多。例如:
public calss Math{
...
public static final double PI = 3.1415926;
...}
在程序中可以使Math.PI来访问这个常量,如果没有static关键字,那么PI就变成了Math类的一个实例字段。需用通过Math类的一个对象来访问PI。
static方法
- 静态方法是不在对象上执行的方法。可以认为静态方法是没有this参数的方法,Employee类的静态方法不能访问id实例字段,因为它不能再对象上执行操作。但是,静态方法可以访问静态字段。
public static int getNextId(){
return nextId;//return static field}
可以提供类名来调用此方法:
int n = Employee.getNextId();
此方法可以省略关键字static。
- 有两种情况·可以使用静态方法:
方法不需要访问对象状态,因为她需要的所有参数有通过显式参数提供。
方法只需要访问类的静态字段。
main方法
- main方法是一个静态方法。
public class Application{
public static void main(String[] args){
//consttruct objects here
}
}
main方法不对任何对象进行操作,再启动程序时还没有对象,静态的main方法将执行并且构造程序所需要的对象。