1. 程式人生 > >對Final的一點認識

對Final的一點認識

Final的一點認識

在程式設計的過程中,我們總是會遇到final關鍵字,那麼我們對final怎麼理解呢,下面是我的一點粗淺認識,和大家共享。

package zy.pro.jbd.demo;

public class FinalDemo {

finalint numInt1=16;

final Stringstr="zy";

finalString str1;

注意:str1在此沒有初始化,那麼必須要在建構函式中初始化,否則要報錯。也就是說,final變數必須要進行初始化。

public FinalDemo() {

str1="zy";

}

public static void main(String[] args){

System.out.println("-------------------------------------------------");

}

public voidexecuteFinalTest(){

}

privatevoidtestFinalInt(){

numInt1+=1;

上面,我們定義了numInt1final變數,在次將會出現一個錯誤:cannotassign afinal value tofinalvariable numInt1 atline24

由此可見,如果一個基本型別的變數被定義成了final,那麼此變數將不能再被改變。

System.out.println(numInt1);

}

private voidtestFinalString(){

str=str+"aaaaa";

此處同樣也會報錯。

System.out.println(str);

}

}

我們再作一個測試:

(1)先建立一個類:A.java

package zy.pro.jbd.testbase;

public class A {

intt=10;

public A() {

}

public void setT(intt){

this.t=t;

}

public intgetT(){

return this.t;

}

}

(2)寫如下測試程式碼

final A a = new A();

public void testFinalObject() {

a.setT(29);

System.out.println("t:" + a.getT());

}

測試輸出的結果是:

t:29

由此可見,結果發生了改變,說明final定義的變數是可以改變的,但是改變的不是變數的引址(reference),而是變數的內容。

我們如果寫如下程式碼

/*

* someerrorwillbethrew

Ab=new A();

a=b;

*/

則會發生錯誤,說明final型別的物件不能指向另外一個同類型的物件。

上邊說的比較亂,我們總結一下:

總結:

(1)Final修飾基本型別變數,則此變數是不可改變的

(2)Final 修飾物件,則其指向是不能改變的,但是其值是允許改變的.(即物件中的任一個屬性發生改變都意味著此物件的值發生了改變)

(3)Final 修飾方法,則此方法將不能被過載,但是能被繼承,也就是說在子類中可以呼叫父類的final方法;private方法僅允許在父類中呼叫.在子類中你也可以定義同名的方法,這意味著,private方法對子類來說是不可見的.

附錄:

1)A.java

package zy.pro.jbd.testbase;

public class A {

intt=10;

public A() {

}

public void setT(intt){

this.t=t;

}

public intgetT(){

return this.t;

}

publicfinal voidfinalA(){

System.out.println(" finalmethodfinalA");

}

privatevoidprivateA(){

System.out.println("privatemethodprivateA");

}

private finalvoidprivateFinalA(){

System.out.println("privatefinalmethodprivateFinalA");

}

}

2)AA.java繼承自A.java

package zy.pro.jbd.testbase;

public class AA

extends A {

public AA() {

}

/*

publicfinal voidfinalA(){

System.out.println(" finalmethodfinalA");

}

這幾行程式碼是錯誤的

*/

private void privateA() {

System.out.println("privatemethodprivateAinclassAA");

}

private final void privateFinalA() {

System.out.println("privatefinalmethodprivateFinalAinclassAA");

}

}

3)我的測試程式FinalDemo.java

package zy.pro.jbd.demo;

/**

* thisdemo iscreatedto testtheusageof thefinalreservedword

*/

import zy.pro.jbd.testbase.A;

public class FinalDemo {

final int numInt1 = 16;

final String str = "zy";

final String str1;

final A a = new A();

public FinalDemo() {

str1 = "zy";

}

public static void main(String[] args) {

System.out.println("-------------------------------------------------");

FinalDemo fd = new FinalDemo();

fd.executeFinalTest();

}

public void executeFinalTest() {

this.testFinalInt();

this.testFinalString();

this.testFinalObject();

}

private void testFinalInt() {

//numInt1+=1;

System.out.println(numInt1);

}

private void testFinalString() {

//str=str+"aaaaa";

System.out.println(str);

}

public void testFinalObject() {

a.setT(29);

System.out.println("t:" + a.getT());

/*

* someerrorwillbethrew

Ab=new A();

a=b;

*/

}

}

如果還有問題,請和我聯絡[email protected]

------------------------------------------共同學習,共同進步--------------------------------------------------

相關推薦

軟體一點認識.

微軟認為軟體就是一種服務. 我認為軟體是一種讓我們怎樣更好的使用工具的思路和方法.更是解決複雜問題的解決方案(凡是邏輯能完成的問題). 史學家講人與動物的區別在於會使用工具.比如,語言..語言是種抽象化的工具.而現代的工具的到來(比如計算機等各種電子工具),也帶來一個問題就是

HashMap一點認識

HashMap其實和Hashtable很像,僅有HashMap是執行緒不安全的和允許鍵值對為空這兩個不同。HashMap是無序的。 以下是原始碼裡面的解釋,  implementation provides all of the optional map operation

Final一點認識

對Final的一點認識在程式設計的過程中,我們總是會遇到final關鍵字,那麼我們對final怎麼理解呢,下面是我的一點粗淺認識,和大家共享。package zy.pro.jbd.demo;public

抽象類和接口的一點認識

數據共享 父類 標識 常量 詳細 class 抽象層 span 必須 假設一個非抽象子類繼承一個抽象父類,它必須實現父類中的抽象方法,假設子類也是抽象類,那麽則不必實現父類中的抽象方法。 假設一個類實現了一個接口。那麽必須實現接口中的全部方法。可是子類是抽象類則不用。

fragment的一點認識

fragment 更多 認識 nbsp 復用性 div 業務 多個 組件化 一切都是為了組件化和復用 View的可復用性導致View的設計不能承載更多視圖外的邏輯。Fragment可以承載多個View和一定的業務邏輯。Activity太重導致無法更細粒度的復用,卻可以承載

BFC的一點認識

caption image 分享圖片 sca gin open 單元格 name div 首先讓我復習一下塊級元素(block)和內聯元素(inline) 塊元素(block)的特點: block元素會獨占一行,多個block元素會各自新起一行。默認情況下,block元素

寫一下自己《統計學習方法》的一點認識

決策 kmeans 統計學習方法 回歸 增加 imp 方法 樸素貝葉斯 -- 一提到機器學習,就不得不提李航的這本《統計學習方法》,回家這幾日,把這本書的前九章看完了,因為後面兩章HMM和CRF在之前就已經看過了,簡單寫一下自己的一點新認識。 這本書基本上是在圍繞有監督

分而治之演算法的一點認識

其實就是把打的問題轉化為小的問題,小的問題解決了打的問題自然就解決了,這一聽就像是遞迴,沒錯就是遞迴。比較經典的有:漢諾塔,八皇后,歸併排序了,等等。我就不列出程式碼了,網上多的是。關鍵是將大的問題轉化為小的問題,這種思想。其實再將問題分解以後,小的物件面臨的問題的本質和大的物件面臨問題的本質是一樣的。只是數

生信與計算生物的一點認識[轉載]

轉自:https://baike.baidu.com/tashuo/browse/content?id=4ca32cfeca217b053440f64e&lemmaId=&fromLemmaModule=pcBottom 1.數學將重塑生物學  引入統計和資料分析。例子:如何理解

嵌入式的一點認識

有人說嵌入式是啥,不就是微控制器麼。嵌入式還真沒這麼“膚淺”,下面是我瞭解的一些關於嵌入式的知識。 嵌入式是什麼,簡單來說,嵌入式是在已有的硬體平臺上移植作業系統。那麼問題又來了,為什麼要移植作業系統呢?根據我所學的知識,我覺得有以下幾點好處: 1.提高軟體的移植性。傳統微

深淺拷貝的一點認識

C++初學—拷貝建構函式—深淺拷貝—簡單認識 這學期開了C++課程,上課不認真聽課的我,選擇敲下老師課件中所有程式碼來學習,到建構函式模組認識了有個叫做“拷貝建構函式”的東西,其中深淺拷貝令我感到困惑,在上網查閱了相關資料以及讀過各博主的博文之後,有感想體會如

readResolve的一點認識

      最近看effecitve java 2中有一段關於readResolve的使用,經過上網查閱資料得到以下總結:       我們知道java 物件的序列化操作是實現Serializable介面,我們就可以把它往記憶體地寫再從記憶體裡讀出而"組裝"成一個跟原來一模

虛擬函式動態繫結的一點認識

因為行內函數常常可以提高程式碼執行的速度,因此很多普通函式會根據情況進行內聯化,但是虛擬函式無法利用內聯化的優勢,這是因為行內函數是在“編譯期”編譯器將呼叫行內函數的地方用行內函數體的程式碼代替(內聯展開),但是虛擬函式本質上是“執行期”行為,本質上在“編譯期”編譯器無法知道某處的虛擬函式呼叫在真正執行的時候

maven的一點認識

使用maven好處: 在maven最普通的應用是在jar的管理上,這樣最明顯的好處是讓jar 和source分開,jar放置私服的maven倉庫,source放置SVN. 從SVN匯出專案原始碼時就只有source 了,這樣可以少佔有網路資源(從SVN匯出專案時會很快),同時

c&c++原始檔和標頭檔案分開的好處的一點認識

對c&c++程式來說,基本上來說都是要把原始檔和標頭檔案分別編寫。一般都是代表一個基本功能的原始檔引用相應的標頭檔案。一個 相關功能的模組可能有若干對原始檔和標頭檔案組成。這是基於元件程式設計的核心。在我看來,他的好處是巨大的,是java不可比擬的,也是不可複製的:c

Cookie的一點認識

1. Cookie是怎麼在伺服器和瀏覽器之間傳遞的?(以Tomcat為參考) response.addCookie()將cookie寫到客戶端 request.getCookies()獲取瀏覽器端的cookie 但底層是怎麼實現的?檢視一下Tomcat的原始碼得知: 原來是把

面向物件機制一點認識

面向物件機制是一種觀察應用程式的方式.利用面向物件方法,把應用程式分成許多小塊(或物件),這些物件是相互獨立的.然後可以組合這些物件.建立應用程式.可以把它看到砌磚牆.第一步要建立或購買基本物件(各種磚塊).有了磚塊後.

ContentProvider的一點認識

1、ContentProvider 是android的四大元件之一,作用是對外共享資料,就是把自已應用程式裡的資料分享給其他應用程式,其他應用可以通過ContentProvider對你應用中的資料進行添刪改查。使用ContentProvider對外共享資料

Oracle表分割槽的一點認識

 Oracle的表分割槽功能通過改善可管理性、效能和可用性,從而為各式應用程式帶來了極大的好處。通常,分割槽可以使某些查詢以及維護操作的效能大大提高。此外,分割槽還可以極大簡化常見的管理任務,分割槽是構建千兆位元組資料系統或超高可用性系統的關鍵工具。       分割槽功能能

w3wp.exe的一點認識!

  很想看一個網站的內容,但是這個網站沒有RSS,還得整天的去打這個網站!感覺比較鬱悶,正好今天有時間,你不能提供訂閱,我自己來生成RSS,自己來搞定訂閱的問題. 實現這個功能的思路比較簡單:獲取該網址的Html原始碼,通過正則表示式過濾出有用的資料,將這些有用的資料生成