国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Java > 正文

java基礎(chǔ)語(yǔ)法之final關(guān)鍵字

2019-11-06 06:09:44
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

java基礎(chǔ)語(yǔ)法之final關(guān)鍵字

1、final關(guān)鍵字的含義。

Java關(guān)鍵字final有“無(wú)法改變的”、“最終的”等含義。可以修飾類,方法和成員變量。

final修飾的類不能被繼承。(網(wǎng)上部分文章有結(jié)論:final類中的方法默認(rèn)是final的。我不知道是怎么得出來(lái)的,但是感覺(jué)不對(duì),寫了個(gè)方法測(cè)試了下,證明結(jié)論是錯(cuò)誤的。)

import java.lang.reflect.Method;import java.lang.reflect.Modifier;public final class FinalDemo{	public void normalMethod(){}	public final void finalMethod(){}	public static void main(String[] args)	{		try		{			Method normalMethod = FinalDemo.class.getMethod("normalMethod", null);			Method finalMethod = FinalDemo.class.getMethod("finalMethod", null);			System.out.PRintln(Modifier.toString(normalMethod.getModifiers()));			System.out.println(Modifier.toString(finalMethod.getModifiers()));		}		catch (NoSuchMethodException | SecurityException e)		{			e.printStackTrace();		}	}}

輸出結(jié)果:

publicpublic final

final方法不能被子類的方法覆蓋。(網(wǎng)上有結(jié)論說(shuō)final方法不能被子類方法覆蓋,但是可以被繼承,可以被繼承應(yīng)該是和final無(wú)關(guān)的,而是和方法的訪問(wèn)修飾符有關(guān),例如public、private、protected,試想private final的那是肯定無(wú)法繼承到子類的。)

final成員變量表示常量,只能被賦值一次。(網(wǎng)上很多說(shuō)法是賦值后值不再改變,其實(shí)這種說(shuō)法不準(zhǔn)確,被final修飾的值,如果是基本類型,那么值不可變,如果是對(duì)象,則是引用不可變,對(duì)象的內(nèi)容是可以改變的。)

public class TestDemo{	public static void main(String[] args)	{		final StringBuilder sb = new StringBuilder("hello");		sb.append(" world");		System.out.println(sb.toString());	}}還有一種說(shuō)法:父類的private成員方法是不能被子類方法覆蓋的,因此private類型的方法默認(rèn)是final類型的。我就搞不懂了,final確實(shí)是禁止覆蓋的意思,但是不能覆蓋就一定是final在起作用?,明顯是private方法不能被繼承到子類,都沒(méi)有繼承到子類也就談不上覆蓋這種說(shuō)法了。直接上例子:

public  class FinalDemo{	private void normalMethod(){}	private final void finalMethod(){}		public static void main(String[] args)	{		try		{			Method normalMethod = FinalDemo.class.getDeclaredMethod("normalMethod", null);			Method finalMethod = FinalDemo.class.getDeclaredMethod("finalMethod", null);			System.out.println(Modifier.toString(normalMethod.getModifiers()));			System.out.println(Modifier.toString(finalMethod.getModifiers()));					}		catch (NoSuchMethodException | SecurityException e)		{			e.printStackTrace();		}	}}輸出結(jié)果:

privateprivate final對(duì)final關(guān)鍵字含義的總結(jié):

final修飾的類不能被繼承。

final修飾的方法不能被覆蓋。

final成員變量表示常量,只能被賦值一次。被final修飾的值,如果是基本類型,那么值不可變,如果是對(duì)象則是引用不可變,對(duì)象的內(nèi)容是可以改變的。

網(wǎng)上很多總結(jié)都是錯(cuò)誤的,是“一家之言”,希望大家學(xué)習(xí)的時(shí)候本著技術(shù)的質(zhì)疑和追根究底精神,而不是一味的盲從,把錯(cuò)誤當(dāng)成常識(shí)。

final的其他特性:

final成員變量必須在聲明的時(shí)候初始化或者在構(gòu)造器中初始化,否則就會(huì)報(bào)編譯錯(cuò)誤。

final本地變量必須在聲明時(shí)賦值。

2、final應(yīng)用場(chǎng)景

String以及Integer、Long等基本數(shù)據(jù)類型封裝類都是final class;

Math中PI 和 E 都是用final修飾的字段;

Math中sin cos等函數(shù)也是用final修飾的;


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 梨树县| 瑞金市| 措美县| 手游| 运城市| 富阳市| 石城县| 增城市| 阳原县| 高清| 西青区| 漠河县| 西乌珠穆沁旗| 南宁市| 葵青区| 错那县| 大余县| 北辰区| 武宁县| 明星| 扎赉特旗| 太和县| 勐海县| 镇江市| 保康县| 札达县| 禹州市| 习水县| 澳门| 江西省| 大同市| 潞城市| 台安县| 察隅县| 武义县| 瑞丽市| 平谷区| 伊春市| 阳原县| 永德县| 尼玛县|