final关键词可以用来修饰非抽象类、非抽象类的成员和变量。在java中final的含义有“这是无法改变的”。两种不想改变的原因:设计和效率。使用到final的三种情况有一下几种
一、final常量
final修饰的变量为常量,常量就代表一旦初始化值就再无法改变。
final可以用来修饰变量:静态变量、实例变量、局部变量
在final变量定义的时候可以先定义不初始化,这种成为final空白。final空白在使用之前必须给初始值,大大增加了它的灵活性
二、final方法如果有些方法不希望被子类覆盖则可以使用final声明为final方法。将方法用final修饰的原因有两个:第一个原因是将方法锁定防止任何继承它的类修改它的含义。这是出于设计:想要在继承中保持方法不变,并且不会被覆盖。第二个原因是效率:在java的早期实现中,如果将一个方法指明为fianl,就是同意编译器将针对该方法的所有调用都转为内嵌调用。这样大大提高了执行效率。类中所有的private方法都是隐式的制定为final的。private修饰的方法无法访问也就无法覆盖,也可以给private方法添加final修饰词但是这是毫无意义的。
三、final类
final类不能被继承,因此final类中的成员方法也无法被覆盖。final类里的成员方法和成员变量都默认是final的。在设计类的时候,可以出于这个类的安全考虑不允许它有子类或是实现细节不想被改变并且类不会得到扩展就可以用final来实现。
四、final参数
当参数类型为final的时候只可读取使用参数,但是无法改变
final修饰的变量必须被初始化,初始化的方式有一下几种:
1、在定义的时候初始化
2、在初始化块中初始化
3、在类的构造器中初始化
4、静态变量也可以在静态初始化块中初始化
package demo_static;
public class Demo1 {
//在定义时初始化
public final int first=10;
//在初始化块中初始化
public final int tow;
{
tow=20;
}
//静态常量,在定义时初始化
public static final int three=30;
//静态常量,在静态初始化块中初始化
public static final int four;
static{
four=40;
}
//静态变量
public static int five;
//在构造器中初始化
public final int six;
public Demo1(){
six=50;
//静态变量也可以在构造器中初始化
five=60;
}
}注:不能给final常量第二次赋值、静态变量不能再初始化块中初始化、不给final变量赋值会编译错误静态final变量也一样五、final、finally和finalize的区别
1、上面已经描述了final的四种用法:
定义类、定义方法、定义变量、定义参数
2、finally
finally就比较简单了,它只能用在try/catch语句中,并且附带一个语句块表示这段语句最终总会被执行。
3、finalize是一个方法,它属于java.lang.Object类。finalize是在垃圾回收器在清理它所属的对象时被调用。当垃圾回收器将要释放无用对象的内存时,先调用该对象的finalize()方法。如果程序在终止之前垃圾回收器始终没有进行垃圾回收操作,那么垃圾回收器永远不会调用无用对象的。java的object类中提供了protected类型的finalize()方法,所以任何java类都可以覆盖finalize()方法。java虚拟机的垃圾回收操作对程序是完全透明的,因此程序无法预料某个无用对象的finalize()什么时候会被调用
上面已经描述了final的四种用法:
定义类、定义方法、定义变量、定义参数

本文详细介绍了Java中的final关键字,包括其在定义类、方法、变量和参数中的使用方式,以及与finally、finalize的区别。
1151

被折叠的 条评论
为什么被折叠?



