日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

final关键字的深入理解

發布時間:2023/12/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 final关键字的深入理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文鏈接:http://www.jianshu.com/p/09b758c4000d

1.final方法在編譯階段綁定,稱為靜態綁定(static binding),編譯時常量,永遠不可改變。
2.運行期初始化,我們希望它不會改變。
3.接口中聲明的所有變量本身是final的。
4.對于集合對象聲明為final指的是引用不能被更改,但是你可以向其中增加、刪除或者修改內容。eg:

private final List Loans = new ArrayList(); list.add(“home loan”); //valid list.add("personal loan"); //valid loans = new Vector(); //not valid

這些變量,我們希望它可以根據對象的不同而表現不同,但同時又不希望它被改變,這個時候我們就可以使用運行期常量。對于運行期常量,它即可是基本數據類型,也可是引用數據類型。基本數據類型不可變的是其內容,而引用類型不可變的是其引用,引用所指定的對象內容是可變的。

public class FinalText {private final String final01="huihui"; //編譯期常量,必須要進行初始化,且不可更改private final String final02;//構造器常量,在實例化一個對象時被初始化private static Random random=new Random();private final int final03=random.nextInt(50);//使用隨機數來進行初始化//基本數據類型不可變的是其內容,而引用數據類型不可變的是其引用,引用所指定的對象內容是可變的。public final Person final04=new Person("hansheng");//final指向引用數據類型public FinalText(String final02) {this.final02 = final02;}@Overridepublic String toString() {return "final01="+final01+" final02="+final02+" final03="+final03+" final04="+final04.getName();}public static void main(String[] args){System.out.println("---------第一次創建對象------");FinalText final1=new FinalText("cm");System.out.println(final1);System.out.println("---------第二次創建對象------");FinalText final2=new FinalText("zj");System.out.println(final2);System.out.println("---------修改引用對象------");final2.final04.setName("hanming");System.out.println(final2);} } public class Person {private String name;Person(String name){this.name=name;}public String getName() {return name;}public void setName(String name) {this.name = name;} }

final關鍵字的含義?

final在java是一個保留的關鍵字,可以聲明成員變量、方法、類以及本地變量。一旦你將引用聲明做final,你將不能修改這個引用了,編譯器會檢查代碼,如果你試圖將變量再次初始化的話,編譯器會報編譯錯誤。
什么是final變量?
凡是對成員變量或者本地變量(在方法中的常量或者代碼塊中的變量稱為本地變量)聲明為final的都叫做final變量(編譯時常量)。final變量經常和static關鍵字一起使用,作為變量。

public static final String LOAN="loan"; LOAN=new String("loan");//invalid compilation error

什么是final方法?

final也可以聲明方法。方法前面加上final關鍵字,代表這個方法不可以被子類的方法重寫。如果你認為一個方法的功能已經足夠完整了,子類中不需要改變的話,你可以聲明此方法為final。final方法比非final方法更快,因為在編譯的時候已經靜態綁定了,不需要再運行時再動態綁定。

class Person{public final String getName(){return "personal loan"} }class loan extends Person{@Overridepublic final Stirng getName(){return "cheap personal loan";//compilation error: overridden method is final} }

什么是final類?

使用final來修飾的類叫做final類。final類通常功能是完整的,它們不能被繼承。java中有許多類是final類,eg:String、Integer以及其他包裝類。

final class PersonalLoan{}class CheapPersonalLoan extends PersonalLoan{ //compilation error: cannot inherit from final class

不可變類

創建不可變類要使用final關鍵字。不可變類是指它的對象一旦被創建了就不能被更改了。String是不可變類的代表。不可變類有很多好處,譬如它們的對象是只讀的,可以在多線程環境下安全的共享,不用額外的同步開銷等等。

同final修飾參數在內部類中是非常有用的,在匿名內部類中,為了保持參數的一致性,若所在的方法的形參需要被內部類里面使用時,該形參必須為final。

直到這里還沒有解釋為什么是final?在內部類中的屬性和外部方法的參數兩者從外表上看是同一個東西,但實際上卻不是,所以他們兩者是可以任意變化的,也就是說在內部類中我對屬性的改變并不會影響到外部的形參,而然這從程序員的角度來看這是不可行的,畢竟站在程序的角度來看這兩個根本就是同一個,如果內部類該變了,而外部方法的形參卻沒有改變這是難以理解和不可接受的,所以為了保持參數的一致性,就規定使用final來避免形參的不改變。
簡單理解就是,拷貝引用,為了避免引用值發生改變,例如被外部類的方法修改等,而導致內部類得到的值不一致,于是用final來讓該引用不可改變。
故如果定義了一個匿名內部類,并且希望它使用一個其外部定義的參數,那么編譯器會要求該參數引用是final的。

總結

以上是生活随笔為你收集整理的final关键字的深入理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。