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. docker-compose中volumes的問(wèn)題2. mysql 一個(gè)sql 返回多個(gè)總數(shù)3. CSS3 畫(huà)如下圖形4. 在mac下出現(xiàn)了兩個(gè)docker環(huán)境5. 如何用筆記本上的apache做微信開(kāi)發(fā)的服務(wù)器6. android - rxjava merge 返回Object對(duì)象數(shù)據(jù)如何緩存7. javascript - 螞蟻金服里的react Modal方法,是怎么把元素插入到頁(yè)面最后的8. python - Scrapy存在內(nèi)存泄漏的問(wèn)題。9. docker 下面創(chuàng)建的IMAGE 他們的 ID 一樣?這個(gè)是怎么回事????10. angular.js - ionic2 瀏覽器跨域問(wèn)題
