Final :
1: 修饰整个类:
表示该类不能被继承
(如果认为一个类已经很完美不需要定义子类来继承它)
格式: public final class A(**********)
格式: public 和final 可以互换
2:修饰类中的若干个属性
@final修饰类中的属性必须被赋值,而且只能赋值一次(默认值不算)
@final属性赋值有2种方式(2种不能同时使用)
在定义成员变量同时初始化
在类中所有的构造函数中初始化
注意: 一个类的所有普通方法内部都不可以修改final修饰过的成员变量的值
3:修饰类中的若干个方法
表示该方法可以被子类继承,但是不能被子类重写
/*
final类型修饰的属性必须在定义的同时初始化
如果final类型修饰的属性没有在定义的同时初始化,则必须在该类中的所有构造函数中完成初始化
不过这两种初始化只能存在一种,否则编译时会报错!因为final表示常量的意思,常变量当然不能被初始化两次了
*/
class Point
{
int x;
final double PI = 1.9; //10 final定义的变量必须在定义的同时初始化 如果这里只定义不初始化则我们就必须在所有的构造函数中完成对final变量的初始化 不过这两种方式只能选择其中的一种
Point()
{
//PI = 1.234; //只要10行对PI进行了初始化,本语句就必须的被注释掉,否则编译时会报错!
}
Point(int m, int n)
{
//PI = 2.33; //只要10行对PI进行了初始化,本语句就必须的被注释掉,否则编译时会报错!
}
void output()
{
//PI = 2; //error 因为“一个类的所有方法内部都不可以修改final修饰过的成员变量的”
System.out.printf("%d %f\n", x, PI);
}
public static void main(String[] args)
{
Point pt = new Point();
pt.output();
}
}
/*
在JDK 1.6中的运行结果是:
-----------------
0 1.900000
-----------------
*/