在Java中,final關鍵字可以用來修飾類、方法和變量(包括成員變量和局部變量)。下面就從這三個方面來了解一下final關鍵字的基本用法。
### 1.修飾類
final修飾類時,則該類不能被繼承
~~~
package com.qunar.bean;
public final class Student {
}
~~~
~~~
package com.qunar.bean;
// Remove final modifier from Student
public class Qunar extends Student{
public static void main(String[] args){
}
}
~~~
在使用final修飾類的時候,要注意謹慎選擇,除非這個類真的在以后不會用來繼承或者出于安全的考慮,盡量不要將類設計為final類。
### 2.修飾方法
final修飾方法,則該方法不允許被覆蓋(重寫)
使用final方法的原因有兩個:第一個原因是把方法鎖定,以防任何繼承類修改它的含義;第二個原因是效率,在早期的Java實現版本中,會將final方法轉為內嵌調用,但是如果方法過于龐大,可能看不到內嵌調用帶來的任何性能提升。在最近的Java版本中,不需要使用final方法進行這些優化了。
如果只有在想明確禁止該方法在子類中被覆蓋的情況下才將方法設置為final的。
注:類的private方法會隱式地被指定為final方法。
~~~
package com.qunar.bean;
public class Student {
private String name;
private int age;
private String sex;
public final void play(){
System.out.println("Student");
}
}
~~~
~~~
package com.qunar.bean;
public class Qunar extends Student{
// Remove final modifier from Student.play
public void play(){
System.out.println("Qunar");
}
public static void main(String[] args){
Qunar qunar = new Qunar();
qunar.play();
}
}
~~~
### 3.修飾屬性
final修飾屬性則該類的屬性不會隱式的初始化(類的初始化屬性必須有值)或在構造方法中賦值(但只能選其一)
~~~
package com.qunar.bean;
public class Student {
private String name;
// 報錯 final filed age may not hava been initialized
// final private int age;
final private int age = 10;
private String sex;
public final void play(){
// final filed Student.age cannot been assigned
// age = 30;
System.out.println("Student");
}
}
~~~
### 4.修飾變量
final修飾變量則該變量的值只能賦一次值,即變為常量
- 前言
- [Hibernate開發之路](1)Hibernate配置
- [Hibernate開發之路](2)Hibernate問題
- [Hibernate開發之路](3)基礎配置
- [Hibernate開發之路](4)ID生成策略
- [Hibernate開發之路](5)聯合主鍵
- [設計模式實踐之路](1)單例模式
- [Java]UDP通信的簡單例子
- [Java]套接字地址InetAddress講解
- [Java開發之路](1)final關鍵字
- [Java開發之路](2)Java字符串
- [Java開發之路](3)Java常用類
- [Java開發之路](4)String、StringBuffer與StringBuilder詳解
- [Java開發之路](5)異常詳解
- [Java開發之路](6)File類的使用
- [Java開發之路](7)RandomAccessFile類詳解
- [Java開發之路](8)輸入流和輸出流
- [Java開發之路](9)對象序列化與反序列化
- [Java開發之路](10)DOM解析XML文檔
- [Java開發之路](11)SAX解析XML文檔
- [Java開發之路](12)JDOM和DOM4J解析XML文檔
- [Java開發之路](14)反射機制
- [Java開發之路](15)注解
- [Java開發之路](16)學習log4j日志
- [Java開發之路](18)關于Class.getResource和ClassLoader.getResource的路徑問題
- [Java開發之路](19)Long緩存問題
- [Java開發之路](20)try-with-resource 異常聲明
- [Java開發之路](21)Comparator與Comparable
- [Java]Java工程師成神之路
- [細說Java](1)圖說字符串的不變性
- [細說Java](2)Java中字符串為什么是不可變的
- [細說Java](3)創建字符串是使用" "還是構造函數?