日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

String类为什么是final

發布時間:2025/3/20 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 String类为什么是final 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

String類為什么是final筆者總結

主要是為了“效率” 和 “安全性” 的緣故。
1.性能(效率)
如果指定一個類為final,則該類所有的方法都是final。Java編譯器會尋找機會內聯(inline)所有的final方法(這和具體的編譯器實現有關)。此舉能夠使性能平均提高50%。
若 String允許被繼承, 由于它的高度被使用率, 可能會降低程序的性能,所以String被定義成final。
2.安全性
String類的內部好多方法的實現都不是Java編程語言本身編寫的,好多方法都是調用的操作系統本地的API,也就是“本地方法調用”,這種類是非常底層的,和操作系統交流頻繁的,那么如果這種類可以被繼承的話,如果我們再把它的方法重寫了,往操作系統內部寫入一段具有惡意攻擊性質的代碼什么的,這不就成了核心病毒了么??
3.天生服務性
當時設計時,就是不希望別人改,這個類就像一個工具一樣,類的提供者給我們提供了,就希望我們直接用就完了,不想讓我們隨便能改,其實說白了還是安全性,如果隨便能改了,那么Java編寫的程序肯定就很不穩定。


各家風云

最佳答案:

主要是為了“效率”?和?“安全性”?的緣故。若?String允許被繼承,?由于它的高度被使用率,?可能會降低程序的性能,所以String被定義成final。


其它答案一:

String和其他基本類型不同,他是個對象類型.既然是對象類型,如果是在靜態方法下是必須調用靜態方法或值的,如果是非靜態的方法,就必須要實例化.?
main函數是個static的.所以String要能像其他的基本類型一樣直接被調用.這也是為什么在main函數下使用String類型不會報告錯誤的原因..?
一下就解釋了兩個心里的疑問..?
以前一直覺得奇怪,為什么String是對象類型在main函數下卻是不需要實例化的.再次佩服java設計人員想得真周到.

?

其它答案二:

當定義String類型的靜態字段(也成類字段),可以用靜態變量(非final)代替常量(final)加快程序速度。反之,對于原始數據類型,例如int,也成立。?

例如,你可能創建一個如下的String對象:?

private static final String x = "example";?

對于這個靜態常量(由final關鍵字標識),你使用常量的每個時候都會創建一個臨時的String對象。在字節代碼中,編譯器去掉”x”,代替它的是字符串“example”,以致每次引用”x”時VM都會進行一次哈希表查詢。?

相比之下,度于靜態變量(非final關鍵字),字符串只創建一次。僅當初始化“x”時,VM才進行哈希表查詢。?

還有另一個解釋:?
帶有final修飾符的類是不可派生的。在Java核心API中,有許多應用final的例子,例如java.lang.String。為String類指定final防止了人們覆蓋length()方法。?

  另外,如果指定一個類為final,則該類所有的方法都是final。Java編譯器會尋找機會內聯(inline)所有的final方法(這和具體的編譯器實現有關)。此舉能夠使性能平均提高50%。

示例:

public class Test {?
public static void main(String[] args)? {?
//??
}?
}?

如果String?不是final?那么就可以繼承?
public class String2 extends String{?
?? // ..?
?? // ...?
}?

那我們的?main也就可以寫成?
public class Test {?
public static void main(String2[] args)? { //?注意此處?
//??
}?
}

英文參考:http://forums.sun.com/thread.jspa?threadID=636414

=============================================================

另外補充一點:

引用:http://zhidao.baidu.com/question/94324055.html
作用就是 final的類不能被繼承,不能讓別人繼承有什么好處??
意義就在于,安全性,如此這般:?
Java自出生那天起就是“為人民服務”,這也就是為什么Java做不了病毒,也不一定非得是病毒,反正總之就是為了安全,人家Java的開發者目的就是不想讓Java干這類危險的事兒,Java并不是操作系統本地語言,換句話說Java必須借助操作系統本身的力量才能做事,JDK中提供的好多核心類比如String,這類的類的內部好多方法的實現都不是Java編程語言本身編寫的,好多方法都是調用的操作系統本地的API,這就是著名的“本地方法調用”,也只有這樣才能做事,這種類是非常底層的,和操作系統交流頻繁的,那么如果這種類可以被繼承的話,如果我們再把它的方法重寫了,往操作系統內部寫入一段具有惡意攻擊性質的代碼什么的,這不就成了核心病毒了么??
---?
上面所述是最重要的,另外一個方面,上面2位老兄說的也都很對,就是不希望別人改,這個類就像一個工具一樣,類的提供者給我們提供了,就希望我們直接用就完了,不想讓我們隨便能改,其實說白了還是安全性,如果隨便能改了,那么Java編寫的程序肯定就很不穩定,你可以保證自己不亂改,但是將來一個項目好多人來做,管不了別人,再說有時候萬一疏忽了呢?他也不是估計的,所以這個安全性是很重要的,Java和C++相比,優點之一就包括這一點;
---
原因絕對不只有這么多,因為如果這些個核心的類都能被隨便操作的話,那是很恐怖的,會出現好多好多未知的錯誤,莫名其妙的錯誤....?




總結

以上是生活随笔為你收集整理的String类为什么是final的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产爆操视频 | 久久亚洲一区二区三区四区五区 | 91丨porny丨海角社区 | 黑人操亚洲女人 | 亚洲一区二区三区三州 | 午夜国产福利视频 | 九月色婷婷 | 九九资源网 | 91精品91久久久中77777老牛 | 欧美久久成人 | 性――交――性――乱a | 男人天堂2021 | 色婷婷av一区二区三区之红樱桃 | 综合网五月| 制服丝袜中文字幕在线 | 青青草老司机 | 免费在线观看黄色网址 | 免费日韩一级片 | 国产一区二 | 人人综合网 | www奇米影视com | 欧美成人精品一区二区三区在线看 | 国产馆在线观看 | 亚洲最大色网站 | 亚洲欧美中文日韩在线v日本 | 色图在线观看 | a级片免费在线观看 | 五月天婷婷影院 | 国产福利av| 美女脱了裤子让男人桶 | 日韩精彩视频 | 巨乳美女被爆操 | 在办公室被c到呻吟的动态图 | 亚洲第一色区 | 88国产精品视频一区二区三区 | 风韵丰满熟妇啪啪区老熟熟女 | 岛国精品一区二区 | 三级网站在线 | 午夜小电影 | 精品人妻午夜一区二区三区四区 | 美女av网站 | 日韩高清在线一区二区 | 动漫艳母在线观看 | 香蕉亚洲 | 精品在线91 | 成人自拍网 | 国产精品色婷婷99久久精品 | 99riav3国产精品视频 | 人人爽爽爽 | 国产a大片 | 日本毛片在线看 | 尤物在线观看 | 欧美激情精品久久久久久蜜臀 | 国产日韩欧美在线观看 | 日韩av成人在线 | 日本精品视频网站 | 美女精品网站 | 日本美女一区二区三区 | 黄色a级片网站 | 三级小视频在线观看 | 中国亚洲老头同性gay男男… | 亚洲区精品 | 日韩黄色免费电影 | 天海翼av在线播放 | 亚洲乱熟女一区二区三区小说 | 国产又黄又粗又硬 | 欧美日韩一区二区三区不卡 | 日本精品在线观看视频 | 伊人久久免费视频 | 国产精品一区二区在线免费观看 | 成人一级黄色片 | 免费观看黄一级视频 | 成人免费片 | 欧美人与禽zozzo性之恋的特点 | 99热只有 | 欧美性生交xxxxx久久久 | 国产日韩欧美精品一区二区 | 国产77777 | 浴室里强摁做开腿呻吟男男 | 俺去俺来也在线www色官网 | 精品国产成人亚洲午夜福利 | 亚洲天堂美女视频 | 国产夜夜夜 | 中文字幕一区二区三区人妻电影 | 五月天激情小说 | www在线播放 | 日韩成人福利视频 | 亚洲国产精品欧美久久 | 天天摸天天做天天爽水多 | 国产成人精品综合久久久久99 | 亚洲精品综合网 | 麻豆av在线 | 国产大片黄 | 好吊色视频988gao在线观看 | 中文在线观看免费网站 | 国产一区二区免费视频 | 第一次破处视频 | 久久精品欧美一区二区三区麻豆 | 国产精品久久久久久久久免费 |