Java反射機制
1. java代碼
在 java 語言中最核心的就是代碼的運行, 按照面向對象的思想,在調用java代碼時往往需要先創建對象,再調用方法, 而寫在方法中的即所謂的java 代碼
先分析Class對象的圖解:
一段java代碼在程序運行期間會經歷三個階段: source-->class-->runtime
2. Class 對象
在java中用一個Class對象來表示一個java類的class階段,Class對象封裝了一個java類中定義的成員變量、成員方法、構造方法、類名、包名等。
獲得class對象的三種方式和區別
// 1. 根據給定的類名來獲得 用於類加載
// 來自配置文件
String classname = "cn.itcast.reflect.Person";
// 此對象代表Person.class
Class clazz = Class.forName(classname);
// 2. 如果拿到了對象,不知道是什麼類型 用於獲得對象的類型
Object obj = new Person();
// 獲得對象具體的類型
Class clazz1 = obj.getClass();
//java對象的比較不能用==,而是用equals,但是,有一個對象除外Class
If(clazz1 == Person.class)
// 3. 如果是明確地獲得某個類的Class對象 主要用於傳參
Class clazz2 = Person.class;
// 在java中所有的類型都會對應一個Class對象 int Integer
Class intClazz = int.class;
Class intarrClazz = int[].class;
Class voidClazz = void.class;
3. 反射的概念
反射就是獲得一個java類的各個組成部分
// 反射類的成員方法
Class clazz = Person.class;
Method method = clazz.getMethod(methodName, new Class[]{paramClazz1,paramClazz2});
method.invoke();
// 反射類的構造函數
Constructor con = clazz.getConstructor(new Class[]{paramClazz1,paramClazz2,...})
con.newInstance(params...)
// 反射類的屬性
Field field = clazz.getField(fieldName);
field.setAccessible(true);
field.setObject(value);
4. 反射用在哪裡?
到底框架是什麼? 框架就是將開發中大量重複的代碼集中起來寫個通用的程序
框架就是用反射來實現的
框架需要現在的類調用將來寫的類
框架是將來的程式設計師調用的,框架不能實現完整的功能,框架只是一些一些通用的代碼
框架要運行一定會依賴將來寫的類
現在寫的類要調用將來寫的類,我們先針對接口進行調用,將來的類需要實現接口,那麼方法就固定了
但是將來寫的類的類名我們無法獲知,這時就需要調用者通過配置文件告訴框架具體的類名
歡迎關注,獲得更多資料