final关键字

                       final关键字

代码
public class Test {
final double PI = 3.14; // 定义常量

public void fun() {
System.out.println(
"PI = " + PI);
}

public static void main(String[] args) {
Test t
= new Test();
t.fun();
}
}

 常量(常量值一旦声明就不能被改变)必须(推荐操作)在声明的同时进行初始化。常量约定俗成都大写。

代码
public class FinalTest {
static final double PI = 3.14; // 定义常量

public static void fun() {
System.out.println(
"PI = " + PI);
}

public static void main(String[] args) {
Test t
= new Test();
// t.PI = 3.1415; // 修改常量 error!!!
t.fun();
}
}

非静态常量可以在构造方法(但是必须在每个构造函数都要这样做)和代码块和静态块中进行初始化。

代码
public class Test {
final double PI; // 定义常量

{
// 在代码块中初始化常量
PI = 3.141;
System.out.println(PI);
}

public static void main(String[] args) {
Test t
= new Test();
System.out.println(PI);
// error
}
}
静态常量不能在代码块、构造方法中进行初始化,但是可以在静态块中进行初始化:

代码
public class Test {
static final double PI; // 定义常量

static { // 在静态块中初始化常量
PI = 3.141;
System.out.println(PI);
}

public static void main(String[] args) {
Test t
= new Test();
System.out.println(PI);
// ok
}
}

 

这是因为静态变量只属于类,不属于对象,当用类名去索引PI时,并不会导致构造函数调用,造成PI没有被初始化而报告错误。

当我们将一个常量定义为静态时,就要声明的同时初始化了。

posted @ 2010-12-20 23:10  meng72ndsc  阅读(163)  评论(0编辑  收藏  举报