1. 程式人生 > 其它 >決策樹演算法的Sklearn完整復現

決策樹演算法的Sklearn完整復現

1.什麼是反射機制
簡單的來說,反射機制指的是程式在執行時能夠獲取自身的資訊。在java中,只要給定類的名字,那麼就可以通過反射機制來獲得類的所有資訊。

2.哪裡用到反射機制
有些時候,我們用過一些知識,但是並不知道它的專業術語是什麼,在剛剛學jdbc時用過一行程式碼,Class.forName("com.mysql.jdbc.Driver.class").newInstance();但是那時候只知道那行程式碼是生成驅動物件例項,並不知道它的具體含義。聽了反射機制這節課後,才知道,原來這就是反射,現在很多開框架都用到反射機制,hibernate、struts都是用反射機制實現的。

3.反射機制的優點與缺點
為什麼要用反射機制?直接java建立物件不就可以了嗎,這就涉及到了動態與靜態的概念,靜態編譯:在編譯時確定型別,繫結物件,即通過。

動態編譯:執行時確定型別,繫結物件。動態編譯最大限度發揮了java的靈活性,體現了多型的應用,有以降低類之間的藕合性。

一句話,反射機制的優點就是可以實現動態建立物件和編譯,體現出很大的靈活性,特別是在J2EE的開發中它的靈活性就表現的十分明顯。比如,一個大型的軟體,不可能一次就把把它設計的很完美,當這個程式編譯後,釋出了,當發現需要更新某些功能時,我們不可能要使用者把以前的解除安裝,再重新安裝新的版本,假如這樣的話,這個軟體肯定是沒有多少人用的。

採用靜態的話,需要把整個程式重新編譯一次才可以實現功能的更新,而採用反射機制的話,它就可以不用解除安裝,只需要在執行時才動態的建立和編譯,就可以實現該功能。

它的缺點是對效能有影響。使用反射基本上是一種解釋操作,我們可以告訴JVM,我們希望做什麼並且它滿足我們的要求。這類操作總是慢於只直接執行相同的操作。

4.利用反射機制能獲得什麼資訊
一句話,類中有什麼資訊,它就可以獲得什麼資訊,不過前提是得知道類的名字,要不就沒有後文了,首先得根據傳入的類的全名來建立Class物件。

Class c=Class.forName("className");註明:className必須為全名,也就是得包含包名,比如,cn.netjava.pojo.UserInfo;

Object obj=c.newInstance();//建立物件的例項

OK,有了物件就什麼都好辦了,想要什麼資訊就有什麼資訊了。

獲得建構函式的方法

Constructor getConstructor(Class[] params)//根據指定引數獲得public構造器

Constructor[] getConstructors()//獲得public的所有構造器

Constructor getDeclaredConstructor(Class[] params)//根據指定引數獲得public和非public的構造器

Constructor[] getDeclaredConstructors()//獲得public的所有構造器

獲得類方法的方法

Method getMethod(String name, Class[] params),根據方法名,引數型別獲得方法

Method[] getMethods()//獲得所有的public方法

Method getDeclaredMethod(String name, Class[] params)//根據方法名和引數型別,獲得public和非public的方法

Method[] getDeclaredMethods()//獲得所以的public和非public方法

獲得類中屬性的方法

Field getField(String name)//根據變數名得到相應的public變數

Field[] getFields()//獲得類中所以public的方法

Field getDeclaredField(String name)//根據方法名獲得public和非public變數

Field[] getDeclaredFields()//獲得類中所有的public和非public方法

常用的就這些,知道這些,其他的都好辦……