1、修飾變量
稍微有點Java基礎(chǔ)的都知道用final關(guān)鍵字修飾的變量稱為常量,常量的意思是不可更改。變量為基本數(shù)據(jù)類型,不可更改很容易理解,那么對于引用類型呢?不可能改的是其引用地址,還是對象的內(nèi)容?
我們首先構(gòu)造一個實體類:Person
package com.ys.bean;
/**
* Create by YSOcean
*/
public class Person {
private String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
接著根據(jù)創(chuàng)建一個 Person 對象:
可以看到,首先通過 final 關(guān)鍵字修飾一個對象 p,然后接著將 p 對象指向另一個新的對象,發(fā)現(xiàn)報錯,也就是說final修飾的引用類型是不能改變其引用地址的。
接著我們改動 p 對象的 name 屬性:
發(fā)現(xiàn)程序沒有報錯。
結(jié)論:被 final 修飾的變量不可更改其引用地址,但是可以更改其內(nèi)部屬性。
2、修飾方法
final 關(guān)鍵字修飾的方法不可被覆蓋。
在《Java編程思想》第 4 版 7.8.2 章節(jié) final 方法p176 頁這樣描述:使用 final 方法原因有兩個:
①、第一個原因是把方法鎖定,以防止任何繼承類修改它的含義,這是出于設(shè)計的考慮:想要確保在繼承中使方法的行為保持不變,并且不會被覆蓋。
②、第二個原因是效率,在 Java 的早期實現(xiàn)中,如果將一個方法聲明為 final,就是同意編譯器將針對該方法的所有調(diào)用都轉(zhuǎn)為內(nèi)嵌調(diào)用,內(nèi)嵌調(diào)用能夠提高方法調(diào)用效率,但是如果方法很大,內(nèi)嵌調(diào)用不會提高性能。而在目前的Java版本中(JDK1.5以后),虛擬機可以自動進行優(yōu)化了,而不需要使用 final 方法。
所以final 關(guān)鍵字只有明確禁止覆蓋方法時,才使用其修飾方法。
PS:《Java編程思想》中指出類中所有的 private 方法都隱式指定為 final 的,所以對于 private 方法,我們顯式的聲明 final 并沒有什么效果。但是我們創(chuàng)建一個父類,并在父類中聲明一個 private 方法,其子類中是能夠重寫其父類的private 方法的,這是為什么呢?
父類:Parent.class
package com.ys.bean;
/**
* Create by YSOcean
*/
public class Parent {
private void say(){
System.out.println("parent");
}
}
子類:Son.class
package com.ys.bean;
/**
* Create by YSOcean
*/
public class Son extends Parent {
private void say(){
System.out.println("son");
}
}
其實仔細(xì)看看,這種寫法是方法的覆蓋嗎?我們通過多態(tài)的形式并不能調(diào)用到父類的 say() 方法:
并且,如果我們在子類的 say() 方法中,添加 @Override 注解也是會報錯的。
所以這種形式并不算方法的覆蓋。
3、修飾類
final 修飾類表示該類不可被繼承。
也就是說不希望某個類有子類的時候,用final 關(guān)鍵字來修飾。并且由于是用 final 修飾的類,其類中所有的方法也被隱式的指為 final 方法。
-
JAVA
+關(guān)注
關(guān)注
19文章
2975瀏覽量
105149 -
編譯器
+關(guān)注
關(guān)注
1文章
1642瀏覽量
49286 -
數(shù)據(jù)類型
+關(guān)注
關(guān)注
0文章
236瀏覽量
13663 -
final
+關(guān)注
關(guān)注
0文章
5瀏覽量
2621
發(fā)布評論請先 登錄
相關(guān)推薦
[討論]提高網(wǎng)站關(guān)鍵詞排名的28個SEO小技巧
TF-IDF測量文章的關(guān)鍵詞相關(guān)性研究
亞馬遜代運營 amazon Search term 關(guān)鍵詞填寫的“神技”
HanLP關(guān)鍵詞提取算法分析詳解
關(guān)鍵詞優(yōu)化有哪些實用的方法
#2023,你的 FPGA 年度關(guān)鍵詞是什么? #
2009年中國照明行業(yè)十大關(guān)鍵詞
基于強度熵解決中文關(guān)鍵詞識別
![基于強度熵解決中文<b class='flag-5'>關(guān)鍵詞</b>識別](https://file.elecfans.com/web2/M00/49/66/poYBAGKhwK2AWD62AAAUXGhRbzc463.jpg)
java final關(guān)鍵字用法技巧匯總解析
![<b class='flag-5'>java</b> <b class='flag-5'>final</b><b class='flag-5'>關(guān)鍵</b>字用法技巧匯總解析](https://file1.elecfans.com//web2/M00/A6/FF/wKgZomUMQbmAG04fAAAO5jUfr-A472.jpg)
基于關(guān)鍵詞的最優(yōu)路徑查詢算法
基于詞頻統(tǒng)計的關(guān)鍵詞提取方法
![基于詞頻統(tǒng)計的<b class='flag-5'>關(guān)鍵詞</b>提取方法](https://file.elecfans.com/web2/M00/49/7E/poYBAGKhwL6AdNTSAAAf6tKOzeM078.jpg)
基于自動關(guān)鍵詞抽取方法
![基于自動<b class='flag-5'>關(guān)鍵詞</b>抽取方法](https://file.elecfans.com/web2/M00/49/84/poYBAGKhwMGAGcNDAAAbA2MVSGs336.jpg)
融合BERT詞向量與TextRank的關(guān)鍵詞抽取方法
![融合BERT<b class='flag-5'>詞</b>向量與TextRank的<b class='flag-5'>關(guān)鍵詞</b>抽取方法](https://file.elecfans.com/web1/M00/E6/7D/pIYBAGBWr1KAdDvcAACpwbu_UCQ617.png)
Java中對static關(guān)鍵詞的介紹
![<b class='flag-5'>Java</b><b class='flag-5'>中</b>對static<b class='flag-5'>關(guān)鍵詞</b>的<b class='flag-5'>介紹</b>](https://file1.elecfans.com/web2/M00/A7/B5/wKgaomUmTiqAK9l4AAAmPEOgMIg313.jpg)
評論