激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - 詳解Java中的final關鍵字的使用

詳解Java中的final關鍵字的使用

2019-12-30 14:02低調(diào)小一 JAVA教程

這篇文章主要介紹了詳解Java中的final關鍵字的使用,是Java入門學習中的基礎知識,需要的朋友可以參考下

final含義

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

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

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

補充點:

  •     final成員變量必須在聲明的時候初始化或者在構造函數(shù)中初始化,否則編譯器會報錯。
  •     不能夠對final變量再次賦值。
  •     在匿名類中所有變量都必須是final變量。

final方法

final也可以聲明方法。方法名前面加上final關鍵字,代表這個方法不可以被子類重寫。如果你認為一個方法的功能已經(jīng)足夠完整了,子類中不需要改變該方法,你就可以將該方法聲明為final類型。
final聲明的方法比非final的方法快,因為在編譯的時候就已經(jīng)靜態(tài)綁定了,不需要在運行時再動態(tài)綁定。下面是final方法的例子:

?
1
2
3
4
5
6
public class Person
{
  public final void printName() {
    System.out.println("wangzhengyi");
  }
}


final類

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

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

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

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

        淺拷貝(淺克隆):被復制對象的所有變量都含有與原來的對象相同的值,而所有的對其他對象的引用仍然指向原來的對象。換言之,只復制對象的基本類型,對象類型仍屬于原來的引用。
        深拷貝(深克隆):被復制的所有變量都含有與原來的對象相同的值,除去那些引用其他對象的變量。那些引用其他對象的變量將指向被復制過的新對象,而不再是原有的那些被引用的對象。換言之,不僅復制對象的基本類型,同時也復制原對象中的對象。

不可變類示例:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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;
  }
 
  /**
   * 可變對象的訪問方法:返回對象的拷貝
   * @return
   */
  public HashMap<Integer, String> gethMap() {
    return (HashMap<Integer, String>)hMap.clone();
  }
 
  /**
   * 實現(xiàn)深拷貝的構造器
   */
  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;
  }
 
  /**
   * 實現(xiàn)淺拷貝構造器
   */
  /*
  public FinalClassExample(int id, String name, HashMap<Integer, String> map) {
    this.id = id;
    this.name = name;
    this.hMap = map;
  }
  */
}

final關鍵字好處

使用final關鍵字的優(yōu)勢如下:

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 免费观看亚洲视频 | 免费看成年人网站 | 男人久久天堂 | 一级黄色性感片 | 国产一区二区在线免费 | 欧产日产国产精品v | 鲁丝片一区二区三区免费入口 | 国产精品视频二区不卡 | 人成免费网站 | 国产精品久久久久久婷婷天堂 | 国产91极品 | 久久91亚洲人成电影网站 | 99热1 | 国产成人综合在线观看 | 色综合久久久久久久久久久 | 91av在线免费视频 | 亚洲精品成人久久久 | 秋霞a级毛片在线看 | 成人男男视频拍拍拍在线观看 | 欧美成人一级 | 特级毛片全部免费播放器 | 美女色影院 | 中文在线观看免费视频 | 亚洲成人第一区 | 久久骚| 国产影院一区 | 成人爽a毛片免费啪啪红桃视频 | 精品国产一区二区三区久久久狼牙 | 免费观看的毛片手机视频 | 99久久视频 | 黄色毛片a级| 中文字幕在线第二页 | 国产精品成年片在线观看, 日韩毛片网 | av免费大全 | 中文字幕一区久久 | 国内精品伊人久久久久网站 | 国产日韩精品欧美一区视频 | 亚洲自拍第二页 | 草操影院 | 在线看小早川怜子av | www.69色|