final在java中有什么作用?
final关键字表示最终的含义
当它用来修饰一个引用时:
<1>:如果引用为基本数据类型,则该引用为常量,该值无法被修改。
<2>:如果引用为引用数据类型,例如,对象/数组等,那么该对象或数组本身可以进行修改,但是指向该对象数组的地址的引用不能发生改变,原因是:在java中,引用类型的数据存储在内存的堆中,而内存单元中只存放堆中对象的地址,而不存放对象本身。
举例:
<3>:如果引用的是类的成员变量,那么它必须在以下几种情况中的至少一种进行初始化:
1:在创建时,进行初始化
2:在类的构造方法中进行初始化
3:在实例化块中进行初始化
4:作为静态成员变量,在静态块中进行初始化
上述三种情况未有至少一种进行,则会直接报错,如下所示:
在声明时,进行初始化:
public class Student {
final String name="张三";
}
在类的构造方法中进行初始化:
public class Student {
final String name;
public Student(String name) {
this.name = name;
}
}
在实例化块中进行初始化:
public class Student {
final String name;
{
name="张三";
}
}
作为静态成员变量,在静态块中进行初始化:
public class Student {
final static String name;
static {
name="张三";
}
}
当它用来修饰一个方法:
被final修饰的方法称为最终方法,无法被子类重写
,但是,该方法仍然可以被继承
举例:
public class Person {
final public void show() {
System.out.println("我是小猪佩奇");
}
}
当它用来修饰一个类时:
被final修饰的类为最终类,无法被继承,比如我们最常见的String类