final意为最终的
修饰类:表示类不可被继承
修饰方法:表示方法不可被子类覆盖,但是可以被重载
修饰变量:表示变量一旦被赋值就不可以更改它的值
(1)修饰成员变量
- 如果final修饰的是类变量,那么就只能在静态初始化块中指定初始值、或者在声明该类变量时指定初始值
- 如果final修饰的是成员变量,可以在非静态块初始化、或者在声明该变量时初始化、又或者在构造器中初始化
(2)修饰局部变量
- 系统不会为局部变量进行初始化,局部变量必须由程序员进行初始化。因此在使用final修饰局部变量时,既可以在定义时指定默认值(后面的代码不能对变量再赋值),也可以不指定默认值,而再后面的代码中对final变量赋值(仅可一次)
public class FinalTest{
final static int var1 = 0;//在声明的时候就需要赋值,或者在静态代码块中赋值
/**
static {
var1 = 0;
}
*/
final int var2 = 0; //在声明的时候就需要赋值,或者在代码块中赋值,又或者在构造器中赋值
/**
{
var2 = 0;
}
*/
public static void main(String [] args){
final int localVar1; //局部变量只声明没有初始化,不会报错,与final无关。
localVar1 = 0; // 但是在使用前一定要赋值
// localVar1 = 1; × 不允许第二次赋值
}
}
(3)修饰基本数据类型和引用数据类型
- 如果修饰基本数据类型的变量,则数值一旦初始化之后便不能更改。
- 如果修饰引用数据类型的变量,则在对其初始化之后便不能再让其指向另一个对象。但引用的值是可变的
public class FinalReference{
public static void main(String [] args){
final int[] arrs = {1,2,3,4};
arrs[2] = 3; //合法
arrs = null; //非法,对arrs不能重新赋值
final Student stu = new Student(18);
stu.setAge(23);//合法
stu = null; //非法
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/204364.html