final是java中的一个关键字,可以修饰变量(成员变量+局部变量)、类以及方法。final与abstract关键字是反相关的,不能同时出现。
final修饰基本类型变量表示变量值不能改变。 例如:
public class Test {
public static void main(String[] args) {
final int num = 100;
System.out.println(num++); //编译错误,num不能修改
}
}
final修饰引用类型变量表示对象不能改变,但是对象属性可以改变。 例如:
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public class Test {
public static void changeName(final Person p) {
p.setName("岳飞"); //对象的属性可以改变
//p = new Person("岳飞",60);//编译错误,对象不能改变
}
public static void main(String[] args) {
Person p = new Person("张飞", 30);
changeName(p);
System.out.println(p);
}
}
final修饰类,表示该类不能被继承,俗称"断子绝孙"类。例如:java.lang.String类就是最著名的final类。 例如:
class OtherClass extends MyClass{ //编译错误,不能继承final类。
}
public final class MyClass {
}
final修饰成员方法表示该方法不能重写。
例如:
class OtherClass extends MyClass{
@Override
public void fn(){ //编译错误,不能重写final方法。
System.out.println("实现了fn()..");
}
}
public class MyClass {
public final void fn(){
}
}
被fianl修饰的成员变量使用前必须初始化赋值,有两种方式: 1)声明时直接赋值 2)全部在构造方法中赋初值
1)final修饰基本类型变量表示值不能改变。
2)final修饰引用类型变量表示对象不能改变,对象的属性可以改变。
3)final修饰类表示该类不能继承。
4)final修饰成员方法表示该方法不能重写。
5)final成员变量在使用前必须初始化,可以声明的同时赋初值,也可以在构造方法中赋值。