java中可以通過(guò)類的class屬性得到該類的字節(jié)碼文件對(duì)象?
問(wèn)題描述
如Class c1 = Student.class;可是無(wú)論是Student類還是它繼承的Object類都沒有class屬性呀?
問(wèn)題解答
回答1:謝邀。
首先糾正一個(gè)錯(cuò)誤,class 是 keyword ,不是 Student 類里的 static member 。<class-name>.class 是 Java 中的某個(gè)特定語(yǔ)法。
其次,要得到該類的字節(jié)碼文件,必須到文件系統(tǒng)中去找,無(wú)非就是 Student.class.getResource/getResourceAsStream 之類的方法,比較麻煩。建議看下asm、cglib等字節(jié)碼開源項(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ǔ)充,至于類加載的話,可以參考我的一篇博客自定義類加載器-從.class和.jar中讀取
相關(guān)文章:
1. python文檔怎么查看?2. java - 在用戶不登錄的情況下,用戶如何添加保存到購(gòu)物車?3. java - spring boot 如何打包成asp.net core 那種獨(dú)立應(yīng)用?4. javascript - 關(guān)于apply()與call()的問(wèn)題5. datetime - Python如何獲取當(dāng)前時(shí)間6. android - SwipeRefreshLayout5.0以下不兼容7. javascript - webpack 分割加載代碼后,react 界面不更新8. javascript - nginx反向代理靜態(tài)資源403錯(cuò)誤?9. html - eclipse 標(biāo)簽錯(cuò)誤10. 安全性測(cè)試 - nodejs中如何防m(xù)ySQL注入
