java final 修改_“无法改变的设计”——浅谈Java中的final关键字
在Java中,final關(guān)鍵字可以用來修飾類、變量(包括成員變量和局部變量)、方法,下面從這三個方面分別說明。
final方法
當(dāng)一個方法被final修飾時(shí),表明這個方法不能被子類重寫。
下面程序試圖重寫final方法,將會引發(fā)編譯錯誤。
public class Dinosaur {
public final void test() {
}
}
public class Further extends Dinosaur {
// 下面代碼會編譯錯誤,不能重寫final方法
public void test() {
}
}
特別的,類中的所有private方法都被隱式地指定為是final的。
final類
當(dāng)一個類被final修飾時(shí),表明該類不能被繼承。若一個類試圖繼承一個final類時(shí),將會編譯錯誤。
// 定義一個Dinosaur類,并聲明為final的
public final class Dinosaur {
//...
}
// 當(dāng)Further試圖繼承Dinosaur,編譯會不通過
public class Further extends Dinosaur {
}
由于final類不能被繼承,所以final類中所有的方法都隱式地指定為final的。你也可以給這些final類中的方法加上fianl修飾符,不過這樣做沒有任何意義。
像我們常用的String類,就是被設(shè)計(jì)成final的,它不能有子類。
final變量
變量分為成員變量和局部變量,下面分別說明。
final成員變量
當(dāng)一個成員變量被final修飾時(shí),表明這個變量完成初始化(實(shí)例變量:要么在定義該實(shí)例變量時(shí)指定初始值,要么在普通初始化塊或構(gòu)造器中指定初始值;類變量:要么在定義該類變量時(shí)指定初始值,要么是在靜態(tài)初始化塊指定初始值)后,就不能被改變。
下面程序代碼演示final修飾成員變量的效果。
public class FinalVariableTest {
// 定義成員變量時(shí)指定初始化值
private final int a = 6;
// 定義成員變量時(shí)未指定初始化值,將在構(gòu)造器中進(jìn)行初始化
private final String s;
public FinalVariableTest() {
// 初始化s的值,如果不初始化s的值,將會編譯錯誤,final修飾的成員變量必須由程序顯式地指定初 // 始化值
this.s = "程序員技術(shù)之瞳";
// ERROR,這里試圖給a重新賦值,將會編譯錯誤
a = 7;
}
}
final局部變量
如果final修飾的局部變量在聲明時(shí)已經(jīng)賦了初始值,則后面代碼中不能再重新賦值。
public void test() {
// 這里定義一個final的局部變量,并賦了初始值1
final int a = 1;
// ERROR,試圖重新賦值,則會編譯錯誤
a = 2;
}
如果final修飾的局部變量在聲明時(shí)未指定初始值,則后面代碼中可以給該變量賦值,但只能賦值一次。
public void test() {
// 這里定義一個final的局部變量,但沒有指定初始值
final int a;
// 給變量賦值為1
a = 1;
// ERROR,這里若試圖給a重新賦值,則會編譯錯誤
a = 2;
}
final修飾基本數(shù)據(jù)類型變量和引用類型變量的區(qū)別
當(dāng)final修飾的是基本數(shù)據(jù)類型變量時(shí),該變量一旦獲得初始化值,其值將無法改變。
當(dāng)final修飾的是引用數(shù)據(jù)類型變量時(shí),由于該變量保存的是一個地址值,final保證的是該變量不會引用另外一個對象,但該對象的內(nèi)容可以改變。
總結(jié)
以上是生活随笔為你收集整理的java final 修改_“无法改变的设计”——浅谈Java中的final关键字的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Steam实验室上线全新商店设计:全面重
- 下一篇: java美元兑换,(Java实现) 美元