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

【转载原因:作者写的很清楚】

【转载原文:https://blog.csdn.net/qq_34626097/article/details/83388389

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

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

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

1.final修饰类:(俗称太监类不能有孩子)

提高安全性,提高程序的可读性
这个类就不能被继承。如:String类、StringBuffer类、System类

//class SubString extends String{
//	
//}
final class A{
	
}
//class B extends A{
//	
//} 


2.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");
//	}
}


3.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; 
	}  
} 


2.排除错误例题一

/*
 * 正确,因为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;
} 

————————————————
版权声明:本文为CSDN博主「不等风雨,只等你」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34626097/article/details/83388389

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章