java final关键字使用及面试题重点
1. 在java中声明类、属性和方法时,可以使用关键字final来修饰,表示“最终的”。
- final修饰类:(俗称太监类不能有孩子)
提高安全性,提高程序的可读性
这个类就不能被继承。如:String类、StringBuffer类、System类
//class SubString extends String{
//
//}
final class A{
}
//class B extends A{
//
//}
- final修饰方法:(确定下功能,没有被子类重写的必要)
不能被子类重写。如:Object的getClass();功能已经确定下来,就算子类重写了该方法后,也是实现一样的功能,所以没有必要被子类重写。
class C{
public final void method1() {
System.out.println("I am method1");
}
}
class E extends C{
public void method1() {
// System.out.println("I am method1 for D");
// }
}
- final修饰属性:(已经是常量)
此属性就是一个常量,一旦初始后,不可再被赋值。习惯上,重用大写字符表示。
此常量在哪里赋值:①此常量不能使用默认初始②可以显示的赋值、代码块、构造器
注:显示赋值和代码块赋值只能有其中的一个
变量用static final修饰:全局常量,如Math类的PI
public class Test {
public static void main(String[] args) {
C c = new C();
System.out.println(c.getClass());
System.out.println(Math.PI);
}
}
class D{
// final int I;//常量不能使用默认的赋值
final int I = 11;
final double PI;
final String NAME;
public void m1(){
System.out.println(I);
// I = 10;
}
{
PI = 3.14;
}
public D() {
NAME = "DD";
}
public D(String name) {
this();
// NAME = "DD";
}
}
//c
付:后续需要知道final 与 finally finalize()区别
Object.finalize()//辣鸡回收的,显示把内存中对象清理掉
2.java 面试题final关键字知识点,例题
- 排除错误例题一
/*
* 错误,调用方法的时候已经对x进行赋值,不能再对其进行++操作。
*/
public class Something {
public int addOne(final int x) {
return ++x;
}
}
- 排除错误例题一
/*
* 正确,因为final修饰的类,但++的却是其对象,说明类属性改变,类不一定跟着改变
*/
public class Something {
public static void main(String[] args) {
Other o = new Other();
new Something().addOne(o);
}
public void addOne(final Other o) {
o.i++;
}
}
class Other {
public int i;
}
相关文章
暂无评论...