java final关键字使用及面试题重点

版权声明:尊重原创,码字不易,转载需博主同意。 https://blog.csdn.net/qq_34626097/article/details/83388389

1. 在java中声明类、属性和方法时,可以使用关键字final来修饰,表示“最终的”。

  1. final修饰类:(俗称太监类不能有孩子)
    提高安全性,提高程序的可读性
    这个类就不能被继承。如:String类、StringBuffer类、System类
//class SubString extends String{
//	
//}
final class A{
	
}
//class B extends A{
//	
//} 
  1. 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");
//	}
}
  1. 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关键字知识点,例题

  1. 排除错误例题一
/*
 * 错误,调用方法的时候已经对x进行赋值,不能再对其进行++操作。
 */
public class Something { 
	public int addOne(final int x) { 
		return ++x; 
	}  
} 
  1. 排除错误例题一
/*
 * 正确,因为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;
} 

猜你喜欢

转载自blog.csdn.net/qq_34626097/article/details/83388389