java 反射:
? ????? ? 一個(gè)類(或Interface或Annotation或Enum或Arrays或修飾符等等這些東西)被加載后,jvm會(huì)創(chuàng)建一個(gè)對(duì)應(yīng)該類(或Interface或Annotation或Enum或Arrays或修飾符等等這些東西)的Class對(duì)象,類(或Interface或Annotation或Enum或Arrays或修飾符等等這些東西)的整個(gè)結(jié)構(gòu)信息會(huì)放到這個(gè)Class對(duì)象中。
? ????????? ? ? 通過這個(gè)Class對(duì)象,可以看對(duì)應(yīng)類(或Interface或Annotation或Enum或Arrays或修飾符等等這些東西)的所有類(或Interface或Annotation或Enum或Arrays或修飾符等等這些東西)信息。
? ? ????? 一個(gè)類(或Interface或Annotation)只被加載一次,這個(gè)類只對(duì)應(yīng)一個(gè)Class對(duì)象。
2.在程序運(yùn)行中,
? ? ? ? ? ? 在java 程序中(Class或Interface或Annotation或Enum或Arrays或修飾符等等這些?東 西) ? ? ? ? ? ? ? ? ? ? ? ?都可以在加載后獲得一個(gè)Class對(duì)象。
獲得Class對(duì)象的三種方式:
? ?????????????????? .getClass()? ? ? //對(duì)象調(diào)用
???????????????? ? ?? .class? ? ? ? ? ? //類名調(diào)用
???????????????? ? ?? Class.form()? ? //類全限定名
?使用反射加載一個(gè)類后可以:
????????????Class clazz=Class.forName("com.alces.rest.service.impl.ContentServiceImpl");
? ? ? ? ? ? ? ? ? ????? 1.獲得動(dòng)態(tài)加載類中的注解對(duì)象? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ????? ? 2.獲得動(dòng)態(tài)加載類中的方法對(duì)象
????????????????????????3.獲得動(dòng)態(tài)加載類中的屬性對(duì)象? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ????? 4.獲得該類的構(gòu)造函數(shù)對(duì)象
??????????????????????? 5.通過構(gòu)造函數(shù)獲得該類的實(shí)例
? ? ? ? ? ? ? ? ????? ? 6.動(dòng)態(tài)調(diào)用該類中的方法。
動(dòng)態(tài)調(diào)用:
????????????????????????? 1.通過傳入對(duì)象、類名、類全限定名。來獲得一個(gè)class對(duì)象
? ? ? ????????????? ????? 2.再通過傳入方法名來動(dòng)態(tài)調(diào)用方法。 //調(diào)用指定方法名的方法。