java 反射和new的區別
關於java 反射和new的區別,在這里我不做多講,因為網上有大把資料,描述得很詳細。
今天我只講一點,為什么要用反射?直接用new不行么?干嘛弄得那么麻煩!
1.基本上效果差不多,但是new對象,無法調用該類里面私有的東西,反射反之,具體怎么做請參考java AIP,不過反射需要以犧牲性能做代價。
2.在不知道類名的情況下,你怎么去new?我相信很多人看到這句話都迷糊了(新手),肯定有這樣的疑問,不知道類名,你怎么反射啊?
那么接下來在講講new和反射本質上的區別,new屬於靜態編譯,而反射屬於動態編譯,意思就說只有到運行時他才會去獲得該對象的實例,可能講的有些抽象(也有可能講的不太正確)
舉例:spring框架是事先就寫好的框架,他內部的處理並不知道用戶要寫哪些類,應為那是以后由用他的人來定的,這時候你還能在spring內部去new嗎?所以用戶在用的時候才去配置文件中配置類路徑,這是一個典型反射的例子,在很多面試中就問道了這個問題。
靜態編譯和動態編譯的區別:來自網上,借花獻佛,
靜態編譯就是在編譯的時候把你所有的模塊都編譯進exe里去,當你啟動這個exe的時候所有模塊都加載進來了。你寫小程序沒問題,但程序一大,加載的過程(就是當你運行程序時初始化的過程)就比較費力了。。大多數ppc的硬件配置還是很一般的。
動態編譯就不一樣了,你編譯的時候那些模塊都沒有編譯進去,一般情況下你可以把那些模塊都編譯成dll,這樣你啟動程序(初始化)的時候這些模塊不會被加載,而是在運行的時候,用到那個模塊就調用哪個模塊。
簡單的打個比方,我寫個閱讀器,支持txt,pdf,udm三種格式,暫時把讀txt,讀pdf,讀udm定義為三個功能模塊。 使用靜態編譯:我想看個txt,點擊應用程序圖標以后三個功能都加載進來了,判斷格式,使用讀txt模塊。(在這里,另外兩個模塊的作用就是占用系統資源) 使用動態編譯:我想看個txt,點擊應用程序,判斷格式,只加載讀txt模塊,使用讀txt模塊。
顯然,動態編譯1速度快,2節省了系統資源,3利於今后拓展。
解釋2 靜態編譯的話 exe文件運行的時候不會用到別的文件 動態編譯 exe文件就要用到別的文件了
解釋3 一個是租自行車,什么時候騎什么時候租,有新車就租新車,沒新車就租舊車,有電動車就省點勁,碰上沒車座子的就扎屁股,人家不出租了你就別用了。 一個是自己買個自行車天天扛着,進電梯上地鐵也扛着。老子自己的 ...
解釋4 用靜態鏈接庫編譯,相當於你帶着一個工具包到處跑(遇到有需要的地方不需要周圍的環境提供相應的工具,自己用自己工具包的工具就行了,所以當環境發生變化可以盡可能的無視),當然,你本來不帶任何東西走到哪是哪和工具包隨身帶的區別顯然就是重量增加了,即程序的體積可能會比另一種方式來的大一點,看你的工具包有多大。
---轉自:https://blog.csdn.net/molashaonian/article/details/53177064