getclass方法 一個關(guān)于getClassLoader()方法的問題!請大家多多幫助?
一個關(guān)于getClassLoader()方法的問題!請大家多多幫助?首先,調(diào)用對象的getClass()方法是獲得對象當前的類類型,這部分數(shù)據(jù)存在方法區(qū)中,而后在類類型上調(diào)用getClassLoade
一個關(guān)于getClassLoader()方法的問題!請大家多多幫助?
首先,調(diào)用對象的getClass()方法是獲得對象當前的類類型,這部分數(shù)據(jù)存在方法區(qū)中,而后在類類型上調(diào)用getClassLoader()方法是得到當前類型的類加載器,我們知道在Java中所有的類都是通過加載器加載到虛擬機中的,而且類加載器之間存在父子關(guān)系,就是子知道父,父不知道子,這樣不同的子加載的類型之間是無法訪問的(雖然它們都被放在方法區(qū)中),所以在這里通過當前類的加載器來加載資源也就是保證是和類類型同一個加載器加載的。
最后調(diào)用了類加載器的getResourceAsStream()方法來加載資源。
java的反射到底是有什么用處?怎么用?
Java反射說的是在運行狀態(tài)中,對于任何一個類,我們都能夠知道這個類有哪些方法和屬性。對于任何一個對象,我們都能夠?qū)λ姆椒ê蛯傩赃M行調(diào)用。我們把這種動態(tài)獲取對象信息和調(diào)用對象方法的功能稱之為反射機制。
可以不通過new關(guān)鍵字獲取對象并且使用類對象中的成員變量,方法,修飾符等等,在這里舉例獲取類。
第一種:使用Class.forName(String classPath) ClassPath:寫需要反射的類名,一般是以包名.類名。如:Class clazz = Class.forName("com.entity.Example")
第二種:直接使用Class clz = 類名.class
這種情況一般在我們知道有這個類的時候去使用。如:Class clz = Example.class
第三種:Class clz = 對象. getClass()
前提是對象已經(jīng)被實例化出來了 。如:
Example ex = new Example()
Class clz = ex.getClass()
這三種方法都有各自的優(yōu)點,一般我們使用第一種比較多,按照自己的實際需求去使用才是最好的。反射有啥用?有啥應(yīng)用場景?
1.spring框架的ioc是基于java的反射機制。
2.JDBC 的數(shù)據(jù)庫的連接注冊驅(qū)動,獲取連接也是基于Java反射。
3.Hibernate,Mybatis都有運用到反射。