9.3 final
9.3.1 什么是最终
概念:最后的,不可更改的;
fianl可修饰的内容: 类(最终类) 方法(最终方法) 变量(最终变量、常量)
9.3.2 fianl类
fianl修饰类:此类不能被继承;
String、Math、System均为final修饰的类,不能被继承;
final修饰方法:此方法不能被覆盖;
意为最终方法,不支持子类以覆盖的形式修改;
public class TestFinalKeyword {
public static void main ( String[ ] args) {
final int a = 10 ;
System. out. println ( Math. PI) ;
}
}
class Super {
public void method ( ) {
}
}
class Sub extends Super {
public void method ( ) {
}
}
9.3.3 final变量
final修饰变量:此变量值不能被改变(常量);
所有final修饰的变量只能赋值一次,值不允许改变;
9.3.4 实例常量
实例常量不再提供默认值,必须手动赋予初始值;
赋值时机:显示初始化、动态代码块、构造方法;
注意:如果在构造方法中为实例常量赋值,必须保证所有的构造方法都能对其正确赋值;
9.3.5 静态常量
静态常量不再提供默认值,必须手动赋予初始值;
赋值时机:显示初始化,静态代码块
public class TestFinalVariable {
public static void main ( String[ ] args) {
MyClass mc1 = new MyClass ( ) ;
System. out. println ( mc1. num) ;
MyClass mc2 = new MyClass ( 40 ) ;
System. out. println ( mc2. num) ;
}
}
class MyClass {
final int num;
{
}
public MyClass ( ) {
num = 30 ;
}
public MyClass ( int i) {
num = i;
}
static final int snum;
static {
snum = 2 ;
}
}
9.3.6 对象常量
final修饰基本类型:值不可改变;
final修饰引用类型:地址不可改变;
public class TestFinalObject {
public static void main ( String[ ] args) {
final int a = 10 ;
final int [ ] nums = new int [ ] { 11 , 22 , 33 } ;
nums[ 0 ] = 1 ;
final Student s1 = new Student ( ) ;
System. out. println ( s1. name) ;
}
}
class Student {
final String name= "tom" ;
}
9.3.7 总结
final修饰类:此类不能被继承;
final修饰方法:此方法不能被覆盖;
final修饰变量:此变量值不能改变。(无初始值,只允许赋值一次) 局部常量:显示初始化; 实例常量:显示初始化、动态代码块、构造方法; 静态常量:显示初始化、静态代码块; 基本数据类型常量:值不可改变; 引用数据类型常量:地址不可变;