關於forName()、newInstance()、getMethod()、getClass()等區別的簡略說明

coding_1994發表於2018-07-29

因為最近頻繁用到,只能是自己查查,總結一下,方便以後利用。

1、lass.forName( )靜態方法的目的是為了動態載入類。在載入完成後,一般還要呼叫Class下的newInstance( )靜態方法來例項化物件以便操作。因此,Class.forName( )是動態載入類是沒有用的,其最終目的是為了例項化物件。

一般的實現方式:

String carClassName = "com.etc.test5.Car";
 //建立物件
 Car car = (Car) Class.forName(carClassName).newInstance();

2、.getClass();  //得到該物件的class,後期可能會用到getField()得到該類宣告的屬性,getMethod()獲取方法物件。

常見用法:

Method method = car.getClass().getMethod(setterMethodName, String.class);   //其中setterMethodName是setter方法的名稱,String型別。

3、invoke()方法:我理解為反射賦值,比如繼續上面的程式碼:method.invoke(car, carPropertyValue);其中Car類中有一個name變數,那個執行invoke方法後,物件car的name值則為carPropertyValue(在之前宣告過)。

總結:

forName返回Class,後需要newInstance例項化;

newInstance返回T;

getClass返回Class,後需要getMethod獲取方法;

getMethod返回Method;

invoke無返回值,需要用Method的物件來呼叫。

 

現在基礎知識很弱,處於寫程式碼全靠模仿,原理知之甚少的階段,需要一點一點的自學,加油。

 

相關文章