Java全面細(xì)致講解final的使用
一、理解
final:最終的
二、作用
final 可以用來修飾的結(jié)構(gòu):類、方法、變量
1. 修飾-類
final 用來修飾一個(gè)類,表示此類不能被其它類所繼承,提高安全性,提高程序的可讀性。
比如:String類、System類、StringBuffer類…
代碼演示:
final class A{
}
class B extends A{ //錯(cuò)誤,不能被繼承。
}
2. 修飾-方法
final 用來修飾方法:表明此方法不能被子類重寫。
比如:Object
類中getClass();
代碼演示:
class A { public final void print() { System.out.println("A"); } } class B extends A { public void print() { // 錯(cuò)誤,不能被重寫。 } }
3. 修飾-變量
final 修飾的變量(成員變量或局部變量)稱為常量。名稱大寫,且只能被賦值一次。
static final 用來修飾屬性:全局常量。
代碼演示:
class A { private final String INFO = "嘻嘻"; //聲明常量 public void print() { //INFO = "哈哈"; //The final field A.INFO cannot be assigned } }
3.1 修飾-成員變量(屬性)
final 標(biāo)記的成員變量必須在聲明(顯式初始化)時(shí)或在 每個(gè)構(gòu)造器中或代碼塊中顯式賦值,然后才能使用。
如:final double MY_PI = 3.14;
3.2 修飾-局部變量
使用 final 修飾局部變量時(shí),表明此形參是一個(gè)常量。當(dāng)我們調(diào)用此方法時(shí),給常量形參賦一個(gè)實(shí)參。一旦賦值以后,就只能在方法體內(nèi)使用此形參,且不能進(jìn)行重新賦值。
三、經(jīng)典題目
//題目一: public class Test1 { public int addOne(final int x) { // return ++x; //Cannot assign a value to final variable 'x' return x + 1; } } //題目二: public class Something { public static void main(String[] args) { Other o = new Other(); new Something().addOne(o); } public void addOne(final Other o) { // o = new Other(); o.i++; } } class Other { public int i; } //題目三: class Root{ static{ System.out.println("Root的靜態(tài)初始化塊"); } { System.out.println("Root的普通初始化塊"); } public Root(){ super(); System.out.println("Root的無參數(shù)的構(gòu)造器"); } } class Mid extends Root{ static{ System.out.println("Mid的靜態(tài)初始化塊"); } { System.out.println("Mid的普通初始化塊"); } public Mid(){ super(); System.out.println("Mid的無參數(shù)的構(gòu)造器"); } public Mid(String msg){ //通過this調(diào)用同一類中重載的構(gòu)造器 this(); System.out.println("Mid的帶參數(shù)構(gòu)造器,其參數(shù)值:" + msg); } } class Leaf extends Mid{ static{ System.out.println("Leaf的靜態(tài)初始化塊"); } { System.out.println("Leaf的普通初始化塊"); } public Leaf(){ //通過super調(diào)用父類中有一個(gè)字符串參數(shù)的構(gòu)造器 super("小老師ir"); System.out.println("Leaf的構(gòu)造器"); } } public class LeafTest{ public static void main(String[] args){ new Leaf(); System.out.println(); new Leaf(); } } /*output: Root的靜態(tài)初始化塊 Mid的靜態(tài)初始化塊 Leaf的靜態(tài)初始化塊 Root的普通初始化塊 Root的無參數(shù)的構(gòu)造器 Mid的普通初始化塊 Mid的無參數(shù)的構(gòu)造器 Mid的帶參數(shù)構(gòu)造器,其參數(shù)值:小老師ir Leaf的普通初始化塊 Leaf的構(gòu)造器 Root的普通初始化塊 Root的無參數(shù)的構(gòu)造器 Mid的普通初始化塊 Mid的無參數(shù)的構(gòu)造器 Mid的帶參數(shù)構(gòu)造器,其參數(shù)值:小老師ir Leaf的普通初始化塊 Leaf的構(gòu)造器 */
到此這篇關(guān)于Java全面細(xì)致講解final的使用的文章就介紹到這了,更多相關(guān)Java final內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
利用Java中Calendar計(jì)算兩個(gè)日期之間的天數(shù)和周數(shù)
Java 語言的Calendar(日歷),Date(日期),和DateFormat(日期格式)組成了Java標(biāo)準(zhǔn)的一個(gè)基本但是非常重要的部分。日期是商業(yè)邏輯計(jì)算一個(gè)關(guān)鍵的部分。下面這篇文章就給大家介紹了如何利用Java中Calendar計(jì)算兩個(gè)日期之間的天數(shù)和周數(shù),下面來一起看看吧。2016-12-12Swing圖形界面實(shí)現(xiàn)可動(dòng)態(tài)刷新的驗(yàn)證碼
這篇文章主要為大家詳細(xì)介紹了Swing圖形界面實(shí)現(xiàn)可動(dòng)態(tài)刷新的驗(yàn)證碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05Java 是如何讀取和寫入瀏覽器Cookies的實(shí)例詳解
這篇文章主要介紹了Java 是如何讀取和寫入瀏覽器Cookies的實(shí)例的相關(guān)資料,需要的朋友可以參考下2016-09-09