java中final關鍵字的使用及static final 和final的區別

來源:互聯網
上載者:User
java string 最佳化

java中final關鍵字可以用在類成員(是不是所謂的域),類的方法及類中。

一、final用在域中表示:

1,一個永不改變的編譯時間常量。

2,一個在運行時被初始化的值,而你不希望它被改變。

static 關鍵字可以和final關鍵字結合使用,static強調只有一份,不管類被初始化多少次,static修飾的成員只初始化一次。final表示常量,不可改變。如下面的執行個體: view plain copy to clipboard print ? //file FinalData.java import java.util.*; class Value{ int i; public Value(int i){this.i=i;} }//end of class Value public class FinalData{ private static Random rand = new Random(47); private String id; public FinalData(String id){this.id=id;} private final int valueOne = 9; private static final int VALUE_TWO = 99; public static final int VALUE_THREE = 39; private int i3=rand.nextInt(20); private final int i4=rand.nextInt(20); static int INT_5=rand.nextInt(20); static final int INT_6= rand.nextInt(20); private Value v1= new Value(11); private final Value v2= new Value(22); private static final Value VAL_3= new Value(33); private final int [] a ={1,2,3,4,5,6}; public String toString(){ return id+" : "+" i3 = "+i3+", i4 = "+i4+" , INT_5 = "+INT_5+" , INT_6 = " +INT_6; }//end of toString public static void main(String [] args){ FinalData fd1 = new FinalData("fd1"); //fd1.valueOne++;//Error, can not change the final value //fd1.valueOne=15;//Error, can not change the final value fd1.v2.i++; fd1.v1=new Value(9); for(int j=0;j<fd1.a.length;j++){ fd1.a[j]++; } System.out.println(fd1); System.out.println("Creating new FinalData"); FinalData fd2 = new FinalData("fd2"); System.out.println(fd1); System.out.println(fd2); System.out.println("Creating new FinalData"); FinalData fd3 = new FinalData("fd3"); System.out.println(fd1); System.out.println(fd2); System.out.println(fd3); }//end of main }//end of class FinalData

輸出結果為:

fd1 : i3 = 13, i4 = 1 , INT_5 = 18 , INT_6 = 15
Creating new FinalData
fd1 : i3 = 13, i4 = 1 , INT_5 = 18 , INT_6 = 15
fd1 : i3 = 1, i4 = 9 , INT_5 = 18 , INT_6 = 15
Creating new FinalData
fd1 : i3 = 13, i4 = 1 , INT_5 = 18 , INT_6 = 15
fd1 : i3 = 1, i4 = 9 , INT_5 = 18 , INT_6 = 15
fd1 : i3 = 8, i4 = 0 , INT_5 = 18 , INT_6 = 15

從結果很容易看出,只要類被初始化final的成員也隨著被初始化,如:i3,i4。而static 類型的成員卻不一樣,不管是否是final的,都只初始化一次,如 INT_5,INT_6。

二、final用在方法中

final用在方法中,主要有一個原因:鎖定方法,以防止任何繼承類修改它的含義。

final用在方法修飾中,還有一個次要原因是,在java較早版本中,可提高效率,但是最近的java版本中(Java se5/6),已經不再使用final方法來進行方法最佳化了。

所以只有在想要明確禁止方法被覆蓋時,才將方法設定為final的。

三、類定義使用final(final類)

當將某個類整體定義為final時,就表明該類不可被繼承。

final類的域可以根據個人的意願選擇是不是final的(可以添加或者不添加final在成員定義前)。不論類是否被定義為final,相同的 規則都適用於定義為final的域。然而,由於final類禁止繼承,所以final類中的所有方法都隱式指定為final的了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.