1. 程式人生 > >super和final關鍵字

super和final關鍵字

一模一樣 info 只需要 java關鍵字 出現 pan nbsp family 兩個

一.super關鍵字

super關鍵字的使用

JAVA類中使用super來引用父類的屬性或者方法,用this來引用當前對象,主要用法:

1.子類的構造函數默認第一行會默認調用父類的無參數構造函數

2.子類顯示調用父類的構造函數

3.訪問父類的屬性和函數

技術分享圖片

輸出結果:

技術分享圖片

註意:java中,Object類是有類的父類。

二final關鍵字

java中的常量與變量,常量是程序運行過程中其值不能改變,變量正好與之相反,變量是用於存儲可變數據的容器。談到常量,第一時間想起的是String類,Java中的String類就是一個final類。

1.為什麽設計final?

在程序設計過程中,有時候我們希望某些數據不允許別改變,某些類不允許被繼承。這個時候final就出現了。fianl是一個java關鍵字,意味著不可修改。其主要作用是兩個:安全和效率。在java中final可以修飾類,方法和屬性。常量細分為:編譯期常量,永遠不可改變。運行期初始化時,我們希望它不會被改變。對於編譯期常量,它在類加載的過程就已經完成了初始化,所以當類加載完成後是不可更改的,有些變量,我們希望它可以根據對象的不同而表現不同,但同時又不希望它被改變,這個時候我們就可以使用運行期常量。對於運行期常量,它既可是基本數據類型,也可是引用數據類型。基本數據類型不可變的是其內容,而引用數據類型不可變的是其引用,引用所指定的對象內容是可變的

技術分享圖片

輸出結果是:

技術分享圖片

為什麽會有上面的區別?首先看下反編譯的代碼

技術分享圖片

可以看出,編譯器對final變量的處理與非final變量的區別。同時str1+"world"虛擬機在運行的時候,實際上String str4 = new StringBulider(str1).append.("world").toString().因此str4和str3指向對象的地址不同,即兩者值不同。

2.final的用法

(1).修飾類

當用final修飾一個類時,表明這個類不能被繼承。也就是說,如果一個類你永遠不會讓他被繼承,就可以用final進行修飾。final類中的成員變量可以根據需要設為final,但是要註意final類中的所有成員方法都會被隱式地指定為final方法。

(2).修飾方法

父類的final方法是不能被子類所覆蓋的,也就是說子類是不能夠存在和父類一模一樣的方法的。使用final方法的原因有兩個。第一個原因是把方法鎖定,以防任何繼承類修改它的含義;第二個原因是效率

註:類的private方法會隱式地被指定為final方法。

(3).修飾變量

對於一個final變量,如果是基本數據類型的變量,則其數值一旦在初始化之後便不能更改;如果是引用類型的變量,則在對其初始化之後便不能再讓其指向另一個對象。

3.final的註意點

  • 當用final作用於類的成員變量時,成員變量(註意是類的成員變量,局部變量只需要保證在使用之前被初始化賦值即可)必須在定義時或者構造器中進行初始化賦值,而且final變量一旦被始化賦值之後,就不能再被賦值了。
  • 引用變量被final修飾之後,雖然不能再指向其他對象,但是它指向的對象的內容是可變的
  • 很多時候會容易把static和final關鍵字混淆,static作用於成員變量用來表示只保存一份副本,而final的作用是用來保證變量不可變

super和final關鍵字