java中可以通過(guò)類(lèi)的class屬性得到該類(lèi)的字節(jié)碼文件對(duì)象?
問(wèn)題描述
如Class c1 = Student.class;可是無(wú)論是Student類(lèi)還是它繼承的Object類(lèi)都沒(méi)有class屬性呀?
問(wèn)題解答
回答1:謝邀。
首先糾正一個(gè)錯(cuò)誤,class 是 keyword ,不是 Student 類(lèi)里的 static member 。<class-name>.class 是 Java 中的某個(gè)特定語(yǔ)法。
其次,要得到該類(lèi)的字節(jié)碼文件,必須到文件系統(tǒng)中去找,無(wú)非就是 Student.class.getResource/getResourceAsStream 之類(lèi)的方法,比較麻煩。建議看下asm、cglib等字節(jié)碼開(kāi)源項(xiàng)目。
最后,字節(jié)碼是種比較復(fù)雜的技術(shù),不得已而用之,比如獲取方法參數(shù)里的Annotation(參考Spring Web MVC)。有些貌似可能和字節(jié)碼有關(guān)的技術(shù),實(shí)際上可以繞過(guò),例如基于interface的AOP,完全可以用Proxy而不是用字節(jié)碼來(lái)實(shí)現(xiàn)的。
回答2:我查的一個(gè)說(shuō)法是,這個(gè)不是一個(gè)關(guān)鍵字,而是一個(gè)字面量,你可以嘗試直接再ide中敲“Student.class”,是會(huì)提醒你需要將這個(gè)值賦給某個(gè)變量的。如果后續(xù)有查到新的會(huì)再補(bǔ)充,至于類(lèi)加載的話(huà),可以參考我的一篇博客自定義類(lèi)加載器-從.class和.jar中讀取
相關(guān)文章:
1. python - 如何正則字符串中的所有漢字2. mysql - 千萬(wàn)級(jí)數(shù)據(jù)的表,添加unique約束,insert會(huì)不會(huì)很慢?3. python - oslo_config4. mysql - 分庫(kù)分表、分區(qū)、讀寫(xiě)分離 這些都是用在什么場(chǎng)景下 ,會(huì)帶來(lái)哪些效率或者其他方面的好處5. mysql - 如何減少使用或者不用LEFT JOIN查詢(xún)?6. mysql - eclispe無(wú)法打開(kāi)數(shù)據(jù)庫(kù)連接7. mysql 5個(gè)left關(guān)鍵 然后再用搜索條件 幾千條數(shù)據(jù)就會(huì)卡,如何解決呢8. mysql - jdbc的問(wèn)題9. 圖片鏈接的地址怎么獲得的10. 視頻文件不能播放,怎么辦?
