文章目录
- 面试官问: final 在java中有什么作用
- 面试者回答:
- 1. final修饰变量
- 基本数据类型:
- 示例:
- 对象引用:
- 示例:
- 2. final修饰方法
- 示例:
- 3. final修饰类
- 示例:
- 4. final局部变量和参数
- 示例:
- 总结
面试官问: final 在java中有什么作用
面试者回答:
在Java中,final
关键字是一个非常重要的修饰符,它用于指定某个变量的值一旦初始化之后就不能被改变(对于基本数据类型)或者某个对象的引用一旦指向某个对象之后就不能再指向其他对象(对于对象引用)。final
还可以用来修饰类和方法,但其在这些场景下的作用与修饰变量时有所不同。下面详细解释 final
在Java中的几种用途:
1. final修饰变量
基本数据类型:
- 当
final
修饰一个基本数据类型的变量时,这个变量的值一旦被初始化之后就不能被改变。
示例:
final int MAX_VALUE = 100;
// MAX_VALUE = 200; // 这行代码会编译错误,因为MAX_VALUE是final的
对象引用:
当 final
修饰一个对象引用时,这个引用一旦指向某个对象之后就不能再指向其他对象,但是该对象本身是可以被修改的(如果对象是可变的)。
示例:
final List<String> list = new ArrayList<>();
// list = new ArrayList<>(); // 这行代码会编译错误,因为list是final的
list.add("Hello"); // 这是允许的,因为list对象本身是可变的
2. final修饰方法
当 final
修饰一个方法时,这个方法不能在子类中被覆盖(重写)。这通常用于确保方法的行为在整个继承链中保持不变。
示例:
public class Parent {public final void show() {System.out.println("This is final method");}
}public class Child extends Parent {// @Override // 这行代码会导致编译错误,因为show()在Parent类中是final的public void show() {System.out.println("This will not override show()");}
}
3. final修饰类
当final
用于修饰一个类时,这个类不能被继承。这通常用于防止类的继承,确保类的完整性和封装性。
示例:
public final class FinalClass {// 类实现
}
在这个例子中,FinalClass
不能被其他类继承。
4. final局部变量和参数
在方法内部,final
可以用于修饰局部变量和方法参数,这意味着这些变量的引用不能改变。但是,如果局部变量是对象类型,那么final
只保证了引用不变,对象的内容仍然可以修改。
示例:
public void test(final List<Integer> list) {// list = new ArrayList<>(); // 错误,不能重新赋值list.add(10); // 正确,改变了list的内容而不是引用
}
在这个例子中,list
的引用不能改变,但是可以改变list
的内容。
总结
final
关键字在Java中用于指定某些内容是不可变的,包括变量的值、方法的覆盖以及类的继承。- 对于基本数据类型的变量,
final
确保其值不变;对于对象引用,final
确保引用不变但对象本身的状态可以改变(如果对象是可变的)。 final
方法不能被覆盖,final
类不能被继承。- 使用
final
可以提高程序的稳定性和安全性,但也可能导致代码的灵活性降低。因此,在使用时需要权衡利弊。