反射--我快要遺忘的重要知識點整理
Class初識:
Java中萬物萬事皆物件,同樣,任何一個類也是物件,是Class類的物件。
假設有一個類Apple
1. Class c1 = Apple.class;表明每一個類都有一個靜態成員變數
2. Class c2 = new Apple().getClass();
3. Class c3 = Class.forName(“com.test.Apple”);
由於一個類只可能是Class類的一個例項物件,所以c1 == c2 && c2==c3 àtrue;
動態載入類:
編譯時刻載入類:就是 靜態載入類,new建立物件就是靜態載入類。
執行時刻載入類:就是 動態載入類。
靜態載入類的缺點是:因為在編譯時刻就要求所有的可能用到的類都要載入進來,所以如果程式中缺少了某一個類的話,就會導致整個程式跑不起來。
但是如果我們想要用哪個類時才載入哪個,不用時就不載入的話(即需要時才載入進來),這個就實現不了了。
例如軟體升級,一些功能性的類一般採用動態載入。
基本的資料型別:
1. Class c1 = int.class;
2. Class c2 = double.class;
3. Class c3 = Double.class;
4. Class c4 = void.class;
(1) 獲取類的方法資訊:
//根據方法名和入參的類型別陣列,獲取包括從父類繼承而來的所有public方法
Method amethod = c1.getMethod(“方法名”,Class[] 入參的類型別陣列);
//獲取包括從父類繼承而來的所有public方法
Method[] methods = c1.getMethods();
//根據方法名和入參的類型別陣列,獲取此類自己宣告的方法,public,protected ,private;
Method[] methods = c1.getDefaultMethod(String name,Class[]入參的類型別陣列);
//獲取此類自己宣告的方法,public , protected , private;
Method[] methods = c1.getDefaultMethods();
//獲取某個成員方法的傳人的引數的類型別:按照方法中引數的排列順序
Method m = Methods[1];Class[] paramTypes = m.getParameterTypes();
//獲取某個成員方法的返回值型別
Method m = Methods[1];Class[] paramTypes = m.getReturnType();
(2)獲取類的成員變數的資訊
//成員變數也是物件
Field[] fields = c1.getFields();//獲取包括從父類繼承來的public的變數
Field[] fields = c1.getDefaultFields();//獲取自己宣告的所有變數
//獲取Field物件的類型別
Field field = fields[1]; Class cField = field.getType();//例如返回int.class
(3)獲取類的構造方法的資訊
/**
返回一個包含某些 Constructor 物件的陣列,這些物件反映此 Class 物件所表示的類的所有public構造方法。如果該類沒有公共構造方法,或者該類是一個陣列類,或者該類反映一個基本型別或 void,則返回一個長度為 0 的陣列。
*/
ConStructor[] constructors = c1.getConstructors();
Constructor con = constructor[1];
Class[] paramTypes = con.getParameterTypes();
反射使用專題
(1)曾經的我們是這樣來呼叫方法的:
Apple a = new Apple();
String returnvlaue = a.getName(1);//物件呼叫方法
但是如今,反過來:方法本身通過物件呼叫自己
Method m = a.getClass().getMethod(“getName”,int.class);
String returnvlaue = (String)m.invoke(a,new Object[]{1});
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29900383/viewspace-1461584/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 容易遺忘的知識點總結
- JVM重要知識點整理和學習JVM
- 遺漏的知識點
- Promise重要知識點Promise
- Java 反射【前置知識點】Java反射
- JavaScript知識點整理JavaScript
- CSS知識點整理CSS
- CANFD知識點整理
- MQTT知識點整理MQQT
- linux基礎知識整理(備忘)Linux
- js資料型別重要知識整理JS資料型別
- Flow 常用知識點整理
- 原生JS知識點整理JS
- Runtime知識點整理
- String知識點整理
- 機器學習知識點整理(三)機器學習
- jQuery面試知識點整理jQuery面試
- laravel重要概念和知識點Laravel
- 那些不能遺忘的知識點回顧——C/C++系列(筆試面試高頻題)C++筆試面試
- 自己整理的php面試知識點PHP面試
- 重要,知識點:InnoDB的插入緩衝
- 整理:iOS開發知識點iOS
- 【整理】JVM知識點大梳理JVM
- PHP 易錯知識點整理PHP
- Koa 框架常用知識點整理框架
- vue知識點整理(轉發)Vue
- Servlet基礎知識點整理Servlet
- struts2知識點整理
- MySQL 叢集知識點整理MySql
- JavaScript 易錯知識點整理JavaScript
- JavaScript易錯知識點整理JavaScript
- TCP與DUP知識點整理TCP
- React入門知識點整理React
- React Native 知識點整理React Native
- jquery學習之重要知識點jQuery
- python中pandas的知識點整理Python
- SQL語法的重要知識點總結SQL
- Java容器相關知識點整理Java