欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Java中的final關(guān)鍵字的使用

 更新時(shí)間:2015年07月30日 08:53:41   作者:低調(diào)小一  
這篇文章主要介紹了詳解Java中的final關(guān)鍵字的使用,是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下

final含義

final是Java中的一個(gè)保留關(guān)鍵字,可以聲明成員變量、方法和類。一旦你將引用聲明為final類型,你將不能再改變這個(gè)引用了。編譯器會(huì)檢查代碼,如果你試圖將變量再次初始化的話,編譯器會(huì)報(bào)編譯錯(cuò)誤。
final變量

凡是對(duì)成員變量或者本地變量(在方法中的或者代碼塊中的變量稱為本地變量)聲明為final的都叫做final變量。下面是final修飾變量的例子:

final int constValue = 1;
// constValue = 2; The final local variable constValue cannot be assigned.

補(bǔ)充點(diǎn):

  •     final成員變量必須在聲明的時(shí)候初始化或者在構(gòu)造函數(shù)中初始化,否則編譯器會(huì)報(bào)錯(cuò)。
  •     不能夠?qū)inal變量再次賦值。
  •     在匿名類中所有變量都必須是final變量。

final方法

final也可以聲明方法。方法名前面加上final關(guān)鍵字,代表這個(gè)方法不可以被子類重寫(xiě)。如果你認(rèn)為一個(gè)方法的功能已經(jīng)足夠完整了,子類中不需要改變?cè)摲椒?,你就可以將該方法聲明為final類型。
final聲明的方法比非final的方法快,因?yàn)樵诰幾g的時(shí)候就已經(jīng)靜態(tài)綁定了,不需要在運(yùn)行時(shí)再動(dòng)態(tài)綁定。下面是final方法的例子:

public class Person
{
  public final void printName() {
    System.out.println("wangzhengyi");
  }
}


final類

使用final來(lái)修飾的類叫做final類。final類通常功能是完整的,它們不能被繼承。Java中許多類是final的,例如String類。

不可變類的一個(gè)好處就是它自身是線程安全的,你不需要考慮多線程環(huán)境下的線程安全問(wèn)題。要?jiǎng)?chuàng)建不可變類,需要實(shí)現(xiàn)如下幾個(gè)步驟:

  •     將類聲明為final,使它不能被繼承。
  •     將所有的成員聲明為私有的,這樣就不允許直接訪問(wèn)這些成員。
  •     對(duì)變量不要提供setter方法。
  •     將所有可變的成員聲明為final,這樣只能對(duì)它們賦值一次。
  •     通過(guò)構(gòu)造器初始化所有成員,進(jìn)行深拷貝(deep copy)。
  •     在getter方法中,不要直接返回對(duì)象本身,而是克隆對(duì)象,并返回對(duì)象的拷貝。

    注意:淺拷貝和深拷貝的區(qū)別:

        淺拷貝(淺克?。罕粡?fù)制對(duì)象的所有變量都含有與原來(lái)的對(duì)象相同的值,而所有的對(duì)其他對(duì)象的引用仍然指向原來(lái)的對(duì)象。換言之,只復(fù)制對(duì)象的基本類型,對(duì)象類型仍屬于原來(lái)的引用。
        深拷貝(深克?。罕粡?fù)制的所有變量都含有與原來(lái)的對(duì)象相同的值,除去那些引用其他對(duì)象的變量。那些引用其他對(duì)象的變量將指向被復(fù)制過(guò)的新對(duì)象,而不再是原有的那些被引用的對(duì)象。換言之,不僅復(fù)制對(duì)象的基本類型,同時(shí)也復(fù)制原對(duì)象中的對(duì)象。

不可變類示例:

import java.util.HashMap;
import java.util.Iterator;


public class FinalClassExample {
  private final int id;

  private final String name;

  private final HashMap<Integer, String> hMap;

  public int getId() {
    return id;
  }

  public String getName() {
    return name;
  }

  /**
   * 可變對(duì)象的訪問(wèn)方法:返回對(duì)象的拷貝
   * @return
   */
  public HashMap<Integer, String> gethMap() {
    return (HashMap<Integer, String>)hMap.clone();
  }

  /**
   * 實(shí)現(xiàn)深拷貝的構(gòu)造器
   */
  public FinalClassExample(int id, String name, HashMap<Integer, String> map) {
    this.id = id;
    this.name = name;

    HashMap<Integer, String> tMap = new HashMap<Integer, String>();
    int key;
    Iterator<Integer> iterator = map.keySet().iterator();
    while (iterator.hasNext()) {
      key = iterator.next();
      tMap.put(key, map.get(key));
    }

    this.hMap = tMap;
  }

  /**
   * 實(shí)現(xiàn)淺拷貝構(gòu)造器
   */
  /*
  public FinalClassExample(int id, String name, HashMap<Integer, String> map) {
    this.id = id;
    this.name = name;
    this.hMap = map;
  }
  */
}

final關(guān)鍵字好處

使用final關(guān)鍵字的優(yōu)勢(shì)如下:

  •     final關(guān)鍵字提高了性能。JVM和Java應(yīng)用都會(huì)緩存final變量。
  •     final變量可以安全的在多線程環(huán)境下進(jìn)行共享,而不需要額外的同步開(kāi)銷。
  •     使用final關(guān)鍵字,JVM會(huì)對(duì)方法、變量以及類進(jìn)行優(yōu)化。

相關(guān)文章

  • Java字符串替換的三種方法實(shí)際應(yīng)用

    Java字符串替換的三種方法實(shí)際應(yīng)用

    這篇文章主要給大家介紹了關(guān)于Java字符串替換的三種方法,replace和replaceAll是JAVA中常用的替換字符的方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • Java在PowerPoint中添加上標(biāo)和下標(biāo)的實(shí)現(xiàn)方法

    Java在PowerPoint中添加上標(biāo)和下標(biāo)的實(shí)現(xiàn)方法

    當(dāng)我們?cè)谘菔疚母逯刑砑由虡?biāo)、版權(quán)或其他符號(hào)時(shí),我們可能希望該符號(hào)出現(xiàn)在某個(gè)文本的上方或下方。在Microsoft PowerPoint中,我們可以通過(guò)對(duì)符號(hào)應(yīng)用上標(biāo)或下標(biāo)格式來(lái)實(shí)現(xiàn)這種效果,這篇文章主要介紹了Java在PowerPoint中添加上標(biāo)和下標(biāo),需要的朋友可以參考下
    2022-10-10
  • java實(shí)現(xiàn)字符串的全排列

    java實(shí)現(xiàn)字符串的全排列

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)字符串的全排列,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Java遞歸算法簡(jiǎn)單示例兩則

    Java遞歸算法簡(jiǎn)單示例兩則

    這篇文章主要介紹了Java遞歸算法,通過(guò)兩則示例分析了Java遞歸算法實(shí)現(xiàn)階乘與求和的具體操作技巧,需要的朋友可以參考下
    2017-09-09
  • 最新評(píng)論