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