Java語言中的反射機(jī)制是一個(gè)對(duì)開發(fā)者很有用的機(jī)制,它可以幫助開發(fā)者設(shè)計(jì)出優(yōu)越的框架,大大提高開發(fā)的效率。
反射機(jī)制的入口為Class對(duì)象,那如何才能獲取到Class對(duì)象呢?
方法有以下三種:
- 類.class
- 對(duì)象.getClass()
- Class.forName("className")
類.class
這種方式最直接,但僅能獲取到我已知的類的Class對(duì)象,也就是工程內(nèi)用過的類的對(duì)象都可以通過類.class方式獲取其Class對(duì)象,但是這種方式有一個(gè)不足就是對(duì)于未知的類,或者說不可見的類是不能獲取到其Class對(duì)象的。
對(duì)象.getClass()
Java中的祖先類Object提供了一個(gè)方法getClass()來獲取當(dāng)著實(shí)例的Class對(duì)象,這種方式是開發(fā)中用的最多的方式,同樣,它也不能獲取到未知的類,比如說某個(gè)接口的實(shí)現(xiàn)類的Class對(duì)象。
Class.forName("className")
這種方式是可以獲取到任何類的Class對(duì)象,前提是該類存在,否則會(huì)拋出ClassNotFoundException異常。通過這種方式,我們只需要知道類的名稱(完全限定名)即可獲取到其Class對(duì)象(如果存在的話)。